{"version":3,"file":"directhome.js","mappings":"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","sources":["webpack://$/webpack/universalModuleDefinition","webpack://$/./ts/sol/core/network.ts","webpack://$/./ts/sol/core/read-more-control.ts","webpack://$/./ts/sol/core/core-common.ts","webpack://$/./ts/sol/core/alert-control.ts","webpack://$/./ts/sol/core/logging.ts","webpack://$/./node_modules/lottie-web/build/player/lottie.js","webpack://$/webpack/bootstrap","webpack://$/webpack/runtime/amd options","webpack://$/./ts/sol/retail/home.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"$\"] = factory();\n\telse\n\t\troot[\"$\"] = factory();\n})(self, () => {\nreturn ","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.network = void 0;\r\nvar core_common_1 = require(\"./core-common\");\r\nvar logging_1 = require(\"./logging\");\r\n$(function () {\r\n (0, logging_1.logScriptLoad)(\"[core] [network]\");\r\n});\r\nexports.network = {\r\n fetchData: function fetchData(url) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var response, json, err_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n (0, logging_1.log)(\"Entering method.\", 3 /* LogType.Information */, \"fetchData\");\r\n (0, core_common_1.clearAndHideInfoBar)();\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 4, 5, 6]);\r\n (0, logging_1.log)(\"Calling url: \".concat(url), 3 /* LogType.Information */, \"fetchData\");\r\n return [4 /*yield*/, fetch(url)];\r\n case 2:\r\n response = _a.sent();\r\n if (!response || !response.ok) {\r\n throw new Error(\"Network error calling \".concat(url, \": \").concat(response.statusText));\r\n }\r\n return [4 /*yield*/, response.json()];\r\n case 3:\r\n json = _a.sent();\r\n return [2 /*return*/, json];\r\n case 4:\r\n err_1 = _a.sent();\r\n (0, logging_1.log)(\"Error calling '\".concat(url, \"': \").concat(err_1.message), 1 /* LogType.Error */, \"fetchData\");\r\n throw err_1;\r\n case 5:\r\n (0, logging_1.log)(\"Leaving method.\", 3 /* LogType.Information */, \"fetchData\");\r\n return [7 /*endfinally*/];\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ReadMoreControl = void 0;\r\nvar ReadMoreControl = /** @class */ (function () {\r\n function ReadMoreControl() {\r\n $('body').on('click', '[js-read-more]', this.onToggle.bind(this));\r\n }\r\n ReadMoreControl.prototype.onToggle = function (e) {\r\n var readMoreText = 'Read more';\r\n var readLessText = 'Read less';\r\n var switchElement = $(e.currentTarget);\r\n var targetId = switchElement.attr('aria-controls');\r\n if (switchElement.text().trim() == readMoreText) {\r\n switchElement.text(readLessText);\r\n }\r\n else {\r\n switchElement.text(readMoreText);\r\n }\r\n $(\"#\".concat(targetId)).toggleClass(\"readMoreCover\");\r\n };\r\n return ReadMoreControl;\r\n}());\r\nexports.ReadMoreControl = ReadMoreControl;\r\n","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.scrollToElement = exports.modifySection = exports.isValidEmail = exports.modifyContentInSection = exports.isFormValid = exports.setButtonEnabledState = exports.getHiddenFieldValue = exports.setUiState = exports.processQueryStringParameters = exports.hasValue = exports.isPostcodeValid = exports.isPostalAreaValid = exports.clearAndHideInfoBar = exports.handleAlertAreaDisplay = exports.scrollToTop = exports.scrollToBottom = exports.resetWarningLightsSelection = exports.warningLightsChecked = exports.changeMultipleElementVisibility = exports.changeElementVisibility = exports.handleCheckBoxClick = exports.handleRadioGroupClick = exports.resetErrors = exports.getFieldErrorsOnSubmittedForm = exports.handleSubmit = exports.getCurrentPage = exports.sessionExpired = exports.resetSessionTimer = exports.validateModel = exports.validateInputsForModel = exports.showRetailerInfoDialog = exports.showSiteMaintenanceDialog = exports.bindPageShowEvent = exports.encodeForUrlTransit = exports.setNavigationStepStates = exports.bindAddVehicleClick = exports.bindMileageInputKeyUp = exports.bindMileageInputKeyDown = exports.bindNewVehicleMileageInputKeyDown = exports.bindNewVehicleMileageInputKeyUp = exports.bindSelectVehicleLinkClick = exports.bindNewVehicleNumberPlateInputKeyDown = exports.setAddButtonState = exports.getTime = exports.setFocusOnElement = exports.setupCommon = exports._setupValidationMsg = exports._route = exports._alertArea = exports._infoBar = void 0;\r\nexports.bindFormSubmit = exports.TabbedContent = exports.centreElement = exports.hideOverlay = exports.showOverlay = exports.vehicleHasServicePack = void 0;\r\nvar animator = require(\"../../../wwwroot/images/loadingAnimator.json\");\r\nvar logging_1 = require(\"../core/logging\");\r\nvar network_1 = require(\"./network\");\r\nvar lottie_web_1 = __importDefault(require(\"lottie-web\"));\r\nvar alert_control_1 = require(\"./alert-control\");\r\nvar read_more_control_1 = require(\"./read-more-control\");\r\nexports._infoBar = \".informationBar\";\r\nexports._alertArea = \".alertArea\";\r\nexports._route = \"#Route\";\r\nexports._setupValidationMsg = \"#SetupLocalisedValidationMessage\";\r\nvar _transitionInMs = 1000;\r\nvar _sessionCheckIntervalSeconds = 10;\r\nvar _slideTransitionInMs = 500;\r\nvar _sessionTimer = null;\r\nvar _remainingSessionSeconds;\r\nvar _selectedServices;\r\n$(function () {\r\n (0, logging_1.logScriptLoad)(\"[core-common]\");\r\n (0, logging_1.log)(\"Version: \" + $(\"#BuildVersion\").text() + \" | Timestamp: \" + $(\"#BuildTimestamp\").text(), 3 /* LogType.Information */, \"BUILD\");\r\n});\r\n/** This method must only be called ONCE for each page otherwise duplicate event-handlers will be setup. */\r\nfunction setupCommon() {\r\n // This is required as the html for Retail & Corp is slightly different with regards to the Service List layout\r\n _selectedServices = $(\"#invisibleListWrapper\").length ? \"#ServiceList > #invisibleListWrapper input:checked\" : \"#ServiceList input:checked\";\r\n setupAlertArea();\r\n handleAlertAreaDisplay();\r\n initSessionTimer();\r\n setFocusOnFirstInput();\r\n bindPageShowEvent();\r\n loadProgressAnimation();\r\n setupBasket();\r\n setupFooterControl();\r\n setupCookieBannerObserver();\r\n setupAccordions();\r\n $(\"a\").on(\"click\", function () {\r\n if (!$(this).hasClass(\"no-progress\")\r\n && !$(this).hasClass(\"help-link\")\r\n && !$(this).hasClass(\"toolTip\")\r\n && !$(this).hasClass(\"overlayFire\")\r\n && $(this).parent(\".no-progress\").length === 0) {\r\n setUiState(\"Busy\" /* Ui.Busy */);\r\n }\r\n else {\r\n (0, logging_1.log)(\"element has a class indicating spinner should not be shown.\", 4 /* LogType.Debug */, \"{core-common - anchor click event}\");\r\n }\r\n });\r\n $(document).on(\"click\", \".alertClose\", function (ev) {\r\n ev.preventDefault();\r\n $(\".alertArea\").fadeOut(\"slow\");\r\n });\r\n $(document).on(\"keydown\", function (ev) {\r\n if (ev.key === \"Escape\") {\r\n hideOverlay();\r\n }\r\n });\r\n $(document).on(\"click\", \".toolTip\", function (ev) {\r\n ev.preventDefault();\r\n var id = $(this).attr(\"id\");\r\n var content = $(this).hasClass(\"jobInformationLink\")\r\n ? $(\".JobInformation\" + $(this).data(\"jobcode\")).val()\r\n : $(\"#\" + id + \"__Wrapper\").html();\r\n if (content) {\r\n showOverlay(content);\r\n }\r\n });\r\n $(document).on(\"click\", \".communication-info\", function (ev) {\r\n ev.preventDefault();\r\n showOverlay($(\"#CommunicationInfo\").val());\r\n });\r\n $(document).on(\"click\", \".service-pack-terms-and-conditions\", function (ev) {\r\n ev.preventDefault();\r\n showOverlay($(\"#ServicePackTermsAndConditions\").val());\r\n });\r\n $(document).on(\"click\", \".mp-withdraw-consent-info\", function (ev) {\r\n ev.preventDefault();\r\n showOverlay($(\"#WithdrawConsentInfo\").val());\r\n });\r\n $(document).on(\"click\", \".promotion-terms-and-conditions\", function (ev) {\r\n ev.preventDefault();\r\n showOverlay($(\"#personalisedPricing_Wrapper\").html());\r\n });\r\n $(\".expander\").off(\"click\").on(\"click\", function () {\r\n var $triggeringElement = $(this);\r\n if ($(this).parent().find('.content').is(':animated')) { // check if content animation is in progress\r\n return false; // stop trigger event if so\r\n }\r\n if ($(this).hasClass(\"closes-other-expanders\")) {\r\n $(\".expander\").each(function () {\r\n if (!$triggeringElement.is($(this))) {\r\n var $targetContent = $(this).parent().find(\".content\");\r\n $targetContent.hide(\"slow\");\r\n $(this).addClass(\"closed\").removeClass(\"open\");\r\n }\r\n });\r\n }\r\n $(this).toggleClass(\"closed open\");\r\n var $content = $(this).parent().find(\".content\");\r\n var newState = $(this).hasClass(\"open\") ? \"Open\" /* UiState.Open */ : \"Close\" /* UiState.Close */;\r\n modifyContentInSection($content, newState);\r\n });\r\n $(\".js-close-modal\").on(\"click\", function () {\r\n hideOverlay();\r\n });\r\n $(\".modalInner\").on('click', '.js-close-modal', function () {\r\n hideOverlay();\r\n });\r\n $(\".menuCloseBtn\").on(\"click\", function (ev) {\r\n ev.preventDefault();\r\n });\r\n $(\"button\").on(\"click\", function () {\r\n var source = $(this).prop(\"id\") || $(this).prop(\"name\") || $(this).prop(\"class\");\r\n (0, logging_1.log)(\"element: \" + source, 4 /* LogType.Debug */, \"Button click {event}\");\r\n });\r\n bindFormSubmit();\r\n $(\".step-progress a\").off(\"click\").on(\"click\", function () {\r\n (0, logging_1.log)(\"Navigation clicked, show progress Ui.\", 4 /* LogType.Debug */, \"Nav Step click\");\r\n setUiState(\"Busy\" /* Ui.Busy */);\r\n });\r\n $(\".to-upper-case\").on(\"keyup\", function (ev) {\r\n $(this).val($(this).val().toString().toUpperCase());\r\n });\r\n $(\".remove-spaces\").on(\"keyup\", function (ev) {\r\n $(this).val($(this).val().toString().replace(\" \", \"\"));\r\n });\r\n //Checkbox and radio button selection add checked\r\n $(document).on(\"click\", \".selectButtons label\", function (e) {\r\n (0, logging_1.log)(\"Event.\", 4 /* LogType.Debug */, \".selectButtons label {click}\");\r\n var src = $(this);\r\n if (src.hasClass(\"waiting-option-has-no-availability\")) {\r\n (0, logging_1.log)(\"waiting-option-has-no-availability class clicked\", 4 /* LogType.Debug */, \".selectButtons label {click}\");\r\n return;\r\n }\r\n src.siblings().removeClass(\"checked\");\r\n src.addClass(\"checked\");\r\n if (src.hasClass(\"dateChoose\")) {\r\n // Corp only UI element manipulation\r\n $(\".corp-std-booking-radio:radio\").prop(\"checked\", false);\r\n var defaultValue = $(\"#DefaultCorpRadioButtonValue\").val();\r\n if (defaultValue) {\r\n var defaultRadioButton = $(src).closest(\".waiting-option-container\").find(\".corp-std-booking-radio:radio[value=\\\"\".concat(defaultValue, \"\\\"]\"));\r\n // Set the expected 'default' radio button after selecting a date\r\n if (defaultRadioButton.length > 0) {\r\n $(defaultRadioButton).prop(\"checked\", true);\r\n }\r\n }\r\n }\r\n });\r\n $(document).on(\"keyup\", \"#customer-details-for-callback input\", function () {\r\n if ($(\"#customer-details-for-callback-email\").val()\r\n && $(\"#customer-details-for-callback-telephone\").val()\r\n && $(\"#customer-details-for-callback-forename\").val()\r\n && $(\"#customer-details-for-callback-surname\").val()\r\n && isValidEmail($(\"#customer-details-for-callback-email\").val())) {\r\n $(\"#sendCustomerDetailsToRetailer\").prop(\"disabled\", false);\r\n }\r\n else {\r\n $(\"#sendCustomerDetailsToRetailer\").prop(\"disabled\", true);\r\n }\r\n });\r\n $(document).on(\"click\", \"#UnifiedConsent\", function () {\r\n var newState;\r\n var $content = $(\"p.marketing-preferences\").parent().find(\".content\");\r\n if ($(this).is(\":checked\")) {\r\n $(\".communication-channel-selected\").prop(\"checked\", true);\r\n $(\"p.marketing-preferences\").addClass(\"closed\").removeClass(\"open\");\r\n newState = \"Close\" /* UiState.Close */;\r\n }\r\n else {\r\n $(\".communication-channel-selected\").prop(\"checked\", false);\r\n $(\"p.marketing-preferences\").addClass(\"open\").removeClass(\"closed\");\r\n newState = \"Open\" /* UiState.Open */;\r\n }\r\n modifyContentInSection($content, newState);\r\n });\r\n $(document).on(\"click\", \".communication-channel-selected\", function () {\r\n var source = this;\r\n if (!$(source).prop(\"checked\")) {\r\n $(\".unified-consent-checkbox\").prop(\"checked\", false);\r\n }\r\n });\r\n $(document).on(\"click\", \"#sendCustomerDetailsToRetailer\", function (ev) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var url, jsonResult, e_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n $(this).hide();\r\n url = \"/clientapi/requestCustomerCallback\"\r\n + \"?rooftop=\".concat($(\"#Retailer_RooftopId\").val())\r\n + \"&email=\".concat($(\"#customer-details-for-callback-email\").val())\r\n + \"&telephone=\".concat($(\"#customer-details-for-callback-telephone\").val())\r\n + \"&forename=\".concat($(\"#customer-details-for-callback-forename\").val())\r\n + \"&surname=\".concat($(\"#customer-details-for-callback-surname\").val());\r\n if (!(url.indexOf(\"//\") === -1)) return [3 /*break*/, 6];\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 3, 4, 5]);\r\n return [4 /*yield*/, network_1.network.fetchData(url)];\r\n case 2:\r\n jsonResult = _a.sent();\r\n $(\".retailer-contact-info .sending-callback-request\").show();\r\n $(\".retailer-contact-info .sent-callback-request\").fadeIn();\r\n return [3 /*break*/, 5];\r\n case 3:\r\n e_1 = _a.sent();\r\n $(\".retailer-contact-info .callback-request-failed\").fadeIn();\r\n return [3 /*break*/, 5];\r\n case 4:\r\n $(\".retailer-contact-info .sending-callback-request\").hide();\r\n $(\".retailer-contact-info .intro\").hide();\r\n $(\".retailer-contact-info .contact-retailer-directly\").hide();\r\n $(\".retailer-contact-info .send-customer-details-to-retailer\").hide();\r\n $(\".retailer-contact-info .send-customer-details-to-retailer img\").show();\r\n return [7 /*endfinally*/];\r\n case 5: return [3 /*break*/, 7];\r\n case 6:\r\n // we built an invalid API endpoint so just bale immediately\r\n $(\".retailer-contact-info .callback-request-failed\").fadeIn();\r\n $(\".retailer-contact-info .intro\").hide();\r\n $(\".retailer-contact-info .sending-callback-request\").hide();\r\n $(\".retailer-contact-info .contact-retailer-directly\").hide();\r\n $(\".retailer-contact-info .send-customer-details-to-retailer\").hide();\r\n _a.label = 7;\r\n case 7: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n });\r\n $(document).on(\"click\", \".navStepBtn\", function (ev) {\r\n try {\r\n var source = $(this);\r\n if (source.hasClass(\"nextSection\") || source.hasClass(\"nextButton\")) {\r\n var currentTab = $(\"#recommendedTabs li.current\");\r\n if (currentTab.attr(\"id\") === \"recommendedContentTab\" && currentTab.is(\":visible\")) {\r\n // don't process the normal section change if we are currently showing the recommended tab in the estimate\r\n // a seperate event handler will pick up and process the tab switch\r\n return;\r\n }\r\n }\r\n var invalid = true;\r\n var navStepId = $(this).attr(\"navstepid\");\r\n if (navStepId) {\r\n var id = parseInt(navStepId);\r\n if (!isNaN(id)) {\r\n var step = id;\r\n setNavigationStepStates(step);\r\n changeMultipleElementVisibility($(this).attr(\"elementsLinkJson\"));\r\n if (step === 5 /* NavStep.Servicing */) {\r\n //Show skip to tyres nav\r\n $(\".stepSection.tyres\").removeClass(\"hidden\");\r\n }\r\n else if (step === 6 /* NavStep.Tyres */) {\r\n // If we have a service item in the basket and we're on the first tyres page \r\n // show skip to appointment nav\r\n if ($(_selectedServices).length > 0\r\n && !$(\"[elementLinkId='tyres']\").hasClass(\"hidden\")) {\r\n $(\".stepSection.accessories\").removeClass(\"hidden\");\r\n }\r\n }\r\n else if (step === 7 /* NavStep.Accessories */) {\r\n // If we have a service item in the basket and we're on the accessories page\r\n // show skip to appointment nav\r\n if ($(_selectedServices).length > 0\r\n && !$(\"[elementLinkId='accessoriesFormStep']\").hasClass(\"hidden\")) {\r\n $(\".stepSection.appointment\").removeClass(\"hidden\");\r\n }\r\n }\r\n invalid = false;\r\n scrollToTop();\r\n }\r\n }\r\n if (invalid) {\r\n (0, logging_1.log)(\"Received an invalid or missing navstepid from .navStepBtn button.\", 1 /* LogType.Error */, \".navStepBtn {click}\");\r\n }\r\n }\r\n catch (ex) {\r\n (0, logging_1.log)(ex.message, 1 /* LogType.Error */, \".navStepBtn {click}\");\r\n }\r\n finally {\r\n setUiState(\"Ready\" /* Ui.Ready */);\r\n }\r\n });\r\n $(document).on(\"click\", \".stepSection\", function () {\r\n $(\".stepSection\").addClass(\"hidden\").hide();\r\n });\r\n $(\".iconChecks .check-box\").on(\"click\", function () {\r\n warningLightsChecked();\r\n var elementLink = $(this).attr(\"elementLink\");\r\n var elementLinkProp = $(this).prop(\"checked\");\r\n var elementAction = elementLinkProp ? \"show\" : \"hide\";\r\n elementLink && elementAction ? changeElementVisibility(elementLink, elementAction) : null;\r\n });\r\n $(\"#returnToVehicleStepBtn\").on(\"click\", function () {\r\n // Reset selection options\r\n $(\"#book-service\").prop(\"checked\", false);\r\n $(\"#not-sure\").prop(\"checked\", false);\r\n $(\"#warningNo\").prop(\"checked\", false);\r\n $(\"#warningYes\").prop(\"checked\", false);\r\n $('.serviceListWrapper').find(\"[elementLinkId]\").hide();\r\n $('#warningLights input[type=\"checkbox\"]').prop('checked', false);\r\n $('[elementLinkId=warningLights]').hide();\r\n $('[elementLinkId=warningLightsList]').hide();\r\n $(\"[elementLinkId=seeServices]\").attr(\"disabled\", \"disabled\");\r\n //hide basket on mobile\r\n $(\".mobileBasket\").removeClass(\"show\");\r\n });\r\n $('.is-numeric').on(\"keydown\", function (ev) {\r\n var permittedNonDigits = [\"ArrowLeft\", \"ArrowRight\", \"Backspace\", \"Delete\", \"Home\", \"End\", \"Enter\", \"Tab\", \"F5\", \"F10\", \"F12\"];\r\n if (permittedNonDigits.indexOf(ev.key) > -1) {\r\n return;\r\n }\r\n if (ev.key === \" \" || !isFinite(Number(ev.key))) {\r\n ev.preventDefault();\r\n }\r\n });\r\n}\r\nexports.setupCommon = setupCommon;\r\nfunction setFocusOnElement(selector) {\r\n var _a, _b;\r\n try {\r\n if (selector) {\r\n var $element = $(selector);\r\n if ($element.length > 0) {\r\n $(selector).first().focus();\r\n var id = (_b = (_a = $element.attr(\"id\")) !== null && _a !== void 0 ? _a : $element.attr(\"name\")) !== null && _b !== void 0 ? _b : \"unspecified\";\r\n (0, logging_1.log)(\"Set focus to element \".concat(id, \".\"), 4 /* LogType.Debug */, \"setFocusOnElement\");\r\n }\r\n }\r\n }\r\n catch (e) { }\r\n}\r\nexports.setFocusOnElement = setFocusOnElement;\r\n;\r\nfunction getTime() {\r\n var now = new Date();\r\n var result = \"\".concat(now.getHours(), \":\").concat(now.getMinutes() < 10 ? \"0\" : \"\").concat(now.getMinutes(), \".\").concat((now.getSeconds() < 10 ? \"0\" : \"\")).concat(now.getSeconds());\r\n return result;\r\n}\r\nexports.getTime = getTime;\r\nfunction setAddButtonState() {\r\n var mileage = $('.add-vehicle-current-mileage-input').val().toString();\r\n if ($(\".add-vehicle-number-plate-input\").val() && mileage.length > 0 && parseInt(mileage)) {\r\n $(\"#addVehicleButton\").removeProp(\"disabled\").removeAttr(\"disabled\");\r\n }\r\n else {\r\n $(\"#addVehicleButton\").prop(\"disabled\", true);\r\n }\r\n}\r\nexports.setAddButtonState = setAddButtonState;\r\nfunction bindNewVehicleNumberPlateInputKeyDown() {\r\n $('.add-vehicle-number-plate-input').keyup(function (ev) {\r\n var invalid = $(this).val().toString().length === 0;\r\n $(this).toggleClass(\"input-validation-error\", invalid);\r\n if (invalid) {\r\n $(this).next(\"span\").removeClass(\"field-validation-valid\").addClass(\"field-validation-error\").text(\"Number plate is required.\");\r\n }\r\n else {\r\n $(this).next(\"span\").removeClass(\"field-validation-error\").addClass(\"field-validation-valid\").text(\"\");\r\n }\r\n setAddButtonState();\r\n });\r\n}\r\nexports.bindNewVehicleNumberPlateInputKeyDown = bindNewVehicleNumberPlateInputKeyDown;\r\nfunction bindSelectVehicleLinkClick() {\r\n $('.selectVehicleLink').click(function () {\r\n $('.current-mileage-input').val('');\r\n $('.selectVehicleLink').removeClass(\"selected\");\r\n $(this).addClass(\"selected\");\r\n $('.vehicleSelectBox').hide();\r\n //show selected vehicle container\r\n $('.vehicleSelectBox[data-key=\"' + $(this).data('key') + '\"]').fadeIn('slow', function () {\r\n $('.selected-vehicle[data-key=\"' + $(this).data('key') + '\"]').click();\r\n $(\"form\").validate().resetForm();\r\n $(\"label.error\").hide();\r\n $(\".error\").removeClass(\"error\");\r\n $('.current-mileage-input[data-key=\"' + $(this).data(\"key\") + '\"]').focus();\r\n });\r\n });\r\n}\r\nexports.bindSelectVehicleLinkClick = bindSelectVehicleLinkClick;\r\nfunction bindNewVehicleMileageInputKeyUp() {\r\n $('.add-vehicle-current-mileage-input').keyup(function (ev) {\r\n setAddButtonState();\r\n });\r\n}\r\nexports.bindNewVehicleMileageInputKeyUp = bindNewVehicleMileageInputKeyUp;\r\nfunction bindNewVehicleMileageInputKeyDown() {\r\n $('.add-vehicle-current-mileage-input').keydown(function (ev) {\r\n if (!isFinite(Number(ev.key)) && ev.key !== \"Backspace\" && ev.key !== \"Delete\" && ev.key !== \"Tab\" && ev.key != \"Enter\") {\r\n ev.preventDefault();\r\n }\r\n });\r\n}\r\nexports.bindNewVehicleMileageInputKeyDown = bindNewVehicleMileageInputKeyDown;\r\nfunction bindMileageInputKeyDown() {\r\n $('.current-mileage-input').keydown(function (ev) {\r\n if (!isFinite(Number(ev.key)) && ev.key !== \"Backspace\" && ev.key !== \"Delete\" && ev.key !== \"Tab\" && ev.key != \"Enter\") {\r\n ev.preventDefault();\r\n }\r\n var invalid = $(this).val().toString().length === 0 || !parseInt($(this).val().toString());\r\n $(this).parent().parent().find('#confirmVehicle').prop('disabled', invalid);\r\n });\r\n}\r\nexports.bindMileageInputKeyDown = bindMileageInputKeyDown;\r\nfunction bindMileageInputKeyUp() {\r\n $('.current-mileage-input').keyup(function (ev) {\r\n $(\".selected-current-mileage\").val($(this).val());\r\n var invalid = $(this).val().toString().length === 0 || !parseInt($(this).val().toString());\r\n $(this).parent().parent().find('#confirmVehicle').prop('disabled', invalid);\r\n });\r\n}\r\nexports.bindMileageInputKeyUp = bindMileageInputKeyUp;\r\nfunction bindAddVehicleClick() {\r\n $(\"#addVehicle\").click(function () {\r\n $(\".add-vehicle-number-plate-input\").val(\"\");\r\n $(\".add-vehicle-current-mileage-input\").val(\"\");\r\n if ($(this).is(\":checked\")) {\r\n $(\".addVehicle\").fadeIn(\"slow\").removeClass(\"hidden\");\r\n $(\".vehicleSelectBox.addVehicle\").fadeIn(\"slow\", function () {\r\n $(\".add-vehicle-number-plate-input\").focus();\r\n });\r\n }\r\n else {\r\n $(\".addVehicle\").addClass(\"hidden\").hide();\r\n }\r\n });\r\n}\r\nexports.bindAddVehicleClick = bindAddVehicleClick;\r\nfunction setNavigationStepStates(activeStep) {\r\n var $activeSteps = $(\".progressBar li[data-ui-step='\" + activeStep + \"']\");\r\n $activeSteps.toggleClass(\"active current\", true);\r\n var $allSteps = $(\".progressBar li\");\r\n $allSteps.each(function (i, step) {\r\n $(step).toggleClass('active', $(step).data(\"ui-step\") <= activeStep);\r\n $(step).find('a').toggleClass('disabled', $(step).data(\"ui-step\") > activeStep);\r\n });\r\n}\r\nexports.setNavigationStepStates = setNavigationStepStates;\r\n;\r\nfunction encodeForUrlTransit(input) {\r\n (0, logging_1.log)(\"input: \" + input, 4 /* LogType.Debug */, \"encodeForUrlTransit\");\r\n var output = encodeURIComponent(input).replace(/[!\"()]/g, escape).replace(/\\*/g, \"%2A\");\r\n (0, logging_1.log)(\"output: \" + output, 4 /* LogType.Debug */, \"encodeForUrlTransit\");\r\n return output;\r\n}\r\nexports.encodeForUrlTransit = encodeForUrlTransit;\r\n;\r\nfunction bindPageShowEvent() {\r\n try {\r\n window.addEventListener('pageshow', function (event) {\r\n if (event.persisted) {\r\n setUiState(\"Ready\" /* Ui.Ready */);\r\n (0, logging_1.log)('Page restored from bfcache.', 4 /* LogType.Debug */, 'pageshow event');\r\n }\r\n else {\r\n (0, logging_1.log)('Page loaded normally.', 4 /* LogType.Debug */, 'pageshow event');\r\n }\r\n });\r\n }\r\n catch (ex) { }\r\n}\r\nexports.bindPageShowEvent = bindPageShowEvent;\r\n;\r\nfunction showSiteMaintenanceDialog() {\r\n showOverlay($(\"#siteMaintenance__Wrapper\").html(), \"small\" /* ModalSize.Small */);\r\n}\r\nexports.showSiteMaintenanceDialog = showSiteMaintenanceDialog;\r\n;\r\nfunction showRetailerInfoDialog() {\r\n showOverlay($(\"#customerCallback__Wrapper\").html(), \"small\" /* ModalSize.Small */);\r\n}\r\nexports.showRetailerInfoDialog = showRetailerInfoDialog;\r\n;\r\nfunction validateInputsForModel(model) {\r\n var invalidCount = 0;\r\n var targetAttr = \"data-model='\" + model + \"'\";\r\n $(\"input[\" + targetAttr + \"], select[\" + targetAttr + \"]\").each(function () {\r\n if (!$(this).valid()) {\r\n invalidCount++;\r\n console.log(\"Field [\" + $(this).attr(\"id\") + \"] invalid.\");\r\n }\r\n });\r\n console.log(\"There are [\" + invalidCount + \"] invalid fields on model [\" + model + \"]\");\r\n return invalidCount;\r\n}\r\nexports.validateInputsForModel = validateInputsForModel;\r\n;\r\nfunction validateModel(model, continueSelector, disableContinueIfInvalid, continueFunction, continueArgs) {\r\n var $modelInputs = $(\"input[data-model='\" + model + \"']\");\r\n $($modelInputs).each(function () {\r\n $(this).blur(function () {\r\n var invalidCount = validateInputsForModel(model);\r\n if (disableContinueIfInvalid && continueSelector) {\r\n if (invalidCount > 0) {\r\n $(continueSelector).attr(\"disabled\", \"disabled\");\r\n }\r\n else {\r\n $(continueSelector).removeAttr(\"disabled\");\r\n }\r\n }\r\n });\r\n });\r\n if (continueSelector) {\r\n $(continueSelector).click(function (ev) {\r\n if (validateInputsForModel(model) > 0) {\r\n ev.preventDefault();\r\n if (disableContinueIfInvalid) {\r\n $(continueSelector).attr(\"disabled\", \"disabled\");\r\n }\r\n }\r\n else {\r\n if (disableContinueIfInvalid) {\r\n $(continueSelector).removeAttr(\"disabled\");\r\n }\r\n if (continueFunction) {\r\n $.when(continueFunction.apply(this, continueArgs)).then(function () {\r\n console.debug(\"Proceeding.\");\r\n });\r\n }\r\n }\r\n });\r\n }\r\n}\r\nexports.validateModel = validateModel;\r\n;\r\nfunction initSessionTimer() {\r\n (0, logging_1.log)(\"invoked\", 4 /* LogType.Debug */, \"initSessionTimer\");\r\n if (_sessionTimer === null) {\r\n _remainingSessionSeconds = calculateSessionDurationInSeconds();\r\n if (_remainingSessionSeconds) {\r\n _sessionTimer = setInterval(checkSession, _sessionCheckIntervalSeconds * 1000);\r\n }\r\n }\r\n}\r\n;\r\nfunction calculateSessionDurationInSeconds() {\r\n var target = $(\"#SessionDuration\");\r\n if ($(target).length === 0) {\r\n return 0;\r\n }\r\n var durationInMins = parseInt($(\"#SessionDuration\").val().toString());\r\n return durationInMins * 60;\r\n}\r\nfunction checkSession() {\r\n _remainingSessionSeconds = _remainingSessionSeconds - _sessionCheckIntervalSeconds;\r\n (0, logging_1.log)(\"Session has \".concat(_remainingSessionSeconds, \" seconds remaining\"), 4 /* LogType.Debug */, \"checkSession\");\r\n if (_remainingSessionSeconds <= 0) {\r\n sessionExpired();\r\n }\r\n}\r\nfunction resetSessionTimer() {\r\n (0, logging_1.log)(\"invoked\", 4 /* LogType.Debug */, \"resetSessionTimer\");\r\n _remainingSessionSeconds = calculateSessionDurationInSeconds();\r\n}\r\nexports.resetSessionTimer = resetSessionTimer;\r\n;\r\nfunction sessionExpired() {\r\n (0, logging_1.log)(\"invoked\", 4 /* LogType.Debug */, \"sessionExpired\");\r\n //re-direct to home page on time-out\r\n window.location.href = \"/?error=1&info=session+expired\";\r\n}\r\nexports.sessionExpired = sessionExpired;\r\n;\r\nfunction getCurrentPage() {\r\n var href = window.location.href;\r\n if (href.endsWith(\"/\")) {\r\n href = href.substring(0, href.length - 1);\r\n }\r\n return href.split(\"/\").pop().toLowerCase().trim();\r\n}\r\nexports.getCurrentPage = getCurrentPage;\r\n;\r\nfunction setFocusOnFirstInput() {\r\n try {\r\n var settingEnabled = $('#SetFocusOnFirstInput').val() === \"1\";\r\n if (settingEnabled) {\r\n var firstInput_1 = $(\"form\").first().find(\"input[type=text],input[type=textarea],input[type=select]\").first();\r\n if (firstInput_1) {\r\n (0, logging_1.log)(\"set focus on: \" + $(firstInput_1).attr(\"id\"), 4 /* LogType.Debug */, \"setFocusOnFirstInput\");\r\n // ensures the element is rendered before setting focus\r\n setTimeout(function () { $(firstInput_1).focus(); }, 0);\r\n }\r\n }\r\n }\r\n catch (_a) { }\r\n}\r\n;\r\nfunction handleSubmit(form, canSubmit) {\r\n (0, logging_1.log)(\"Invoked.\", 4 /* LogType.Debug */, \"handleSubmit\");\r\n if (form && canSubmit) {\r\n resetErrors();\r\n setUiState(\"Busy\" /* Ui.Busy */);\r\n form[0].submit();\r\n }\r\n}\r\nexports.handleSubmit = handleSubmit;\r\n;\r\nfunction getFieldErrorsOnSubmittedForm(form) {\r\n var fieldsInError = null;\r\n if (form) {\r\n fieldsInError = $(form).find(\".input-validation-error:visible\");\r\n }\r\n return fieldsInError;\r\n}\r\nexports.getFieldErrorsOnSubmittedForm = getFieldErrorsOnSubmittedForm;\r\n;\r\nfunction resetErrors() {\r\n //Removes validation from input-fields\r\n $(\".input-validation-error\").addClass(\"input-validation-valid\");\r\n $(\".input-validation-error\").removeClass(\"input-validation-error\");\r\n //Removes validation message after input-fields\r\n $(\".field-validation-error\").addClass(\"field-validation-valid\");\r\n $(\".field-validation-error\").removeClass(\"field-validation-error\");\r\n //Removes validation summary\r\n $(\".validation-summary-errors\").addClass(\"validation-summary-valid\");\r\n $(\".validation-summary-errors\").removeClass(\"validation-summary-errors\");\r\n}\r\nexports.resetErrors = resetErrors;\r\n;\r\nfunction handleRadioGroupClick(clickedRadio) {\r\n (0, logging_1.log)(\"Invoked.\", 4 /* LogType.Debug */, \"handleRadioGroupClick\");\r\n if (clickedRadio) {\r\n var id = $(clickedRadio).attr(\"id\");\r\n var $radioGroup = $(\"input[name=\" + $(clickedRadio).attr(\"name\") + \"]:radio\");\r\n var elementLink = $(clickedRadio).attr(\"elementLink\");\r\n var elementAction = $(clickedRadio).attr(\"elementAction\");\r\n var elementsLinkJson = $(clickedRadio).attr(\"elementsLinkJson\");\r\n $($radioGroup).removeAttr(\"checked\");\r\n $($radioGroup).prop(\"checked\", false);\r\n $($radioGroup).closest(\"label\").toggleClass(\"checked\", false);\r\n $(clickedRadio).attr(\"checked\", \"checked\");\r\n $(clickedRadio).prop(\"checked\", true);\r\n (0, logging_1.log)(\"Radio button [id: \" + id + \"] [value: \" + $(clickedRadio).val() + \"] selected.\", 4 /* LogType.Debug */, \"handleRadioGroupClick\");\r\n $(clickedRadio).closest(\"label\").toggleClass(\"checked\", true);\r\n // - Change element visibility of connected div class if elementLink and elementAction is present or multiple classes is elementsLinkJson is an attr\r\n // - To change visibility of multiple classes add the class names and actions to the elementLinkJson data attribute on the element\r\n // - elementLinkJson follows the format { 'class name 1': 'action 1', 'class name 2', 'action 2' } where action is \"show\" or \"hide\"\r\n // - e.g. single element \r\n // - e.g. multiple elements \r\n // - N.B. The elemementsLinkJson *must* be contained in single (') not double (\") quotes for it to be parsed correctly\r\n elementLink && elementAction ? changeElementVisibility(elementLink, elementAction) : null;\r\n elementsLinkJson ? changeMultipleElementVisibility(elementsLinkJson) : null;\r\n // if warningNo radio id selected reset warning lights form\r\n id === \"warningNo\" ? (resetWarningLightsSelection(), setButtonEnabledState($(\"#seeServices\"), true)) : null;\r\n id === \"warningYes\" ? setButtonEnabledState($(\"#seeServices\"), false) : null;\r\n id === \"tyresSkipYes\" ? $(\"#tyreSizes\").show() : null;\r\n id === \"tyresSkipNo\" ? $(\"#tyreSizes\").hide() : null;\r\n }\r\n}\r\nexports.handleRadioGroupClick = handleRadioGroupClick;\r\n;\r\nfunction handleCheckBoxClick(clickedCheckBox) {\r\n (0, logging_1.log)(\"Invoked.\", 4 /* LogType.Debug */, \"handleCheckBoxClick\");\r\n if (clickedCheckBox) {\r\n var id = $(clickedCheckBox).attr(\"id\");\r\n if (id === \"priceOnArrival\") {\r\n clickedCheckBox.checked ? setButtonEnabledState($(\".proceedToAppointmentNextBtn\"), true) : setButtonEnabledState($(\".proceedToAppointmentNextBtn\"), false);\r\n }\r\n }\r\n}\r\nexports.handleCheckBoxClick = handleCheckBoxClick;\r\n;\r\nfunction changeElementVisibility(elementLink, action) {\r\n (0, logging_1.log)(\"Single Show/Hide function called for \" + elementLink + \" : \" + action, 4 /* LogType.Debug */, \"changeElementVisibility\");\r\n //let target = $(\"form\").find(`[elementLinkId=` + elementLink + `]`);\r\n var target = $(document).find(\"[elementLinkId=\" + elementLink + \"]\");\r\n action === \"show\"\r\n ? $(target).removeClass(\"hidden\").show()\r\n : $(target).addClass(\"hidden\").hide();\r\n}\r\nexports.changeElementVisibility = changeElementVisibility;\r\nfunction changeMultipleElementVisibility(elementsLinkJson) {\r\n var elementsToShowHide = JSON.parse(elementsLinkJson);\r\n for (var key in elementsToShowHide) {\r\n if (elementsToShowHide.hasOwnProperty(key)) {\r\n (0, logging_1.log)(\"Multiple Show/Hide function called for \" + key + \" : \" + elementsToShowHide[key], 4 /* LogType.Debug */, \"changeMultipleElementVisibility\");\r\n changeElementVisibility(key, elementsToShowHide[key]);\r\n }\r\n }\r\n}\r\nexports.changeMultipleElementVisibility = changeMultipleElementVisibility;\r\nfunction warningLightsChecked() {\r\n var numberOfWarningLightsChecked = $('.iconChecks').find('input[type=checkbox]:checked').length;\r\n numberOfWarningLightsChecked > 0 ? setButtonEnabledState($(\"#seeServices\"), true) : setButtonEnabledState($(\"#seeServices\"), false);\r\n}\r\nexports.warningLightsChecked = warningLightsChecked;\r\nfunction resetWarningLightsSelection() {\r\n $('.iconChecks .check-box').each(function () {\r\n $(this).prop('checked') ? ($(this).click(), changeElementVisibility($(this).attr(\"elementLink\"), \"hide\")) : null;\r\n });\r\n (0, logging_1.log)(\"Reset all warning light selection\", 4 /* LogType.Debug */, \"resetWarningLightsSelection\");\r\n}\r\nexports.resetWarningLightsSelection = resetWarningLightsSelection;\r\nfunction scrollToBottom() {\r\n window.scrollTo(0, document.body.scrollHeight);\r\n}\r\nexports.scrollToBottom = scrollToBottom;\r\n;\r\nfunction scrollToTop() {\r\n window.scrollTo(0, 0);\r\n}\r\nexports.scrollToTop = scrollToTop;\r\n;\r\nfunction handleAlertAreaDisplay(message) {\r\n if ($(exports._infoBar).length === 0) {\r\n return;\r\n }\r\n var show = false;\r\n if (message) {\r\n message = message.trim();\r\n if (message.slice(-1) === \",\") {\r\n message = message.slice(0, -1);\r\n }\r\n show = true;\r\n // use html not text prop set\r\n $(exports._infoBar).html(message);\r\n }\r\n else {\r\n if ($(exports._infoBar).find(\".validation-summary-valid > li:visible\").length === 0) {\r\n $(exports._infoBar).find(\".validation-summary-errors\").hide();\r\n }\r\n else {\r\n $(exports._infoBar).find(\".validation-summary-errors\").show();\r\n show = true;\r\n }\r\n // check for .net validators triggers and js pushed errors\r\n if ($(exports._infoBar).find(\".validation-summary-valid li\").text()) {\r\n show = true;\r\n }\r\n else {\r\n show = $(exports._infoBar).children().length > 0;\r\n }\r\n }\r\n if (show) {\r\n scrollToElement(exports._alertArea);\r\n $(exports._alertArea).fadeIn().removeClass(\"hidden\");\r\n setUiState(\"Ready\" /* Ui.Ready */);\r\n (0, logging_1.log)(\"scrolled to alertArea\", 4 /* LogType.Debug */, \"handleAlertAreaDisplay\");\r\n }\r\n else {\r\n $(exports._alertArea).hide();\r\n (0, logging_1.log)(\"hidden alertArea\", 4 /* LogType.Debug */, \"handleAlertAreaDisplay\");\r\n }\r\n}\r\nexports.handleAlertAreaDisplay = handleAlertAreaDisplay;\r\n;\r\nfunction clearAndHideInfoBar() {\r\n $(exports._infoBar).empty();\r\n handleAlertAreaDisplay();\r\n}\r\nexports.clearAndHideInfoBar = clearAndHideInfoBar;\r\n;\r\nfunction isPostalAreaValid(postalArea) {\r\n var postalAreaRegex = /^([a-zA-Z]){1}([0-9][0-9]|[0-9]|[a-zA-Z][0-9][a-zA-Z]|[a-zA-Z][0-9][0-9]|[a-zA-Z][0-9])\\s?([0-9]?[a-zA-z]?[a-zA-z]?)?$/;\r\n var result = postalAreaRegex.test(postalArea);\r\n (0, logging_1.log)(\"Invoked, input: \" + postalArea + \" | result: \" + result, 4 /* LogType.Debug */, \"isPostalAreaValid\");\r\n return result;\r\n}\r\nexports.isPostalAreaValid = isPostalAreaValid;\r\n;\r\nfunction isPostcodeValid(postcode, sourceField) {\r\n var postcodeRegex = /^([a-zA-Z]){1}([0-9][0-9]|[0-9]|[a-zA-Z][0-9][a-zA-Z]|[a-zA-Z][0-9][0-9]|[a-zA-Z][0-9])\\s?([0-9][a-zA-z][a-zA-z]){1}$/;\r\n var result = postcodeRegex.test(postcode);\r\n (0, logging_1.log)(\"Invoked, input: \" + postcode + \" | result: \" + result, 4 /* LogType.Debug */, \"isPostcodeValid\");\r\n if (sourceField) {\r\n $(sourceField).toggleClass(\"input-validation-error\", !result);\r\n }\r\n return result;\r\n}\r\nexports.isPostcodeValid = isPostcodeValid;\r\n;\r\nfunction hasValue(toTest) {\r\n var result;\r\n if (Array.isArray(toTest)) {\r\n var validCount = 0;\r\n toTest.forEach(function (item, index) {\r\n validCount = toTest !== null ? validCount + 1 : validCount;\r\n });\r\n result = validCount === toTest.length;\r\n }\r\n else {\r\n result = toTest !== null;\r\n }\r\n (0, logging_1.log)(\"input: \" + toTest + \" | output: \" + result, 4 /* LogType.Debug */, \"hasValue\");\r\n return result;\r\n}\r\nexports.hasValue = hasValue;\r\nfunction processQueryStringParameters(url, parameters) {\r\n if (url !== null && parameters !== null) {\r\n var paramsAddedCount = 0;\r\n for (var i = 0; i < parameters.length; i++) {\r\n var param = parameters[i];\r\n if (param !== null) {\r\n var kvp = param.split(\"|\");\r\n if (kvp.length === 2 && !!kvp[0] && !!kvp[1]) {\r\n var marker = paramsAddedCount === 0 ? \"?\" : \"&\";\r\n url += \"\".concat(marker).concat(kvp[0], \"=\").concat(kvp[1]);\r\n paramsAddedCount++;\r\n }\r\n }\r\n }\r\n console.info(\"Built querystring url: \" + url);\r\n }\r\n return url;\r\n}\r\nexports.processQueryStringParameters = processQueryStringParameters;\r\nfunction setUiState(state) {\r\n if (state === \"Busy\" /* Ui.Busy */) {\r\n $(\".loading\").show();\r\n }\r\n else {\r\n $(\".loading\").fadeOut(\"fast\");\r\n }\r\n (0, logging_1.log)(\"Invoked, set Ui state to: \" + state, 4 /* LogType.Debug */, \"setUiState\");\r\n}\r\nexports.setUiState = setUiState;\r\n;\r\nfunction getHiddenFieldValue(targetSelector, fallbackValue) {\r\n if (!targetSelector) {\r\n return fallbackValue;\r\n }\r\n var $target = $(targetSelector);\r\n if ($target.length === 0) {\r\n return fallbackValue;\r\n }\r\n return $target.val().toString() ? $target.val().toString() : $target.text();\r\n}\r\nexports.getHiddenFieldValue = getHiddenFieldValue;\r\n;\r\nfunction setButtonEnabledState(selector, isEnabled) {\r\n (0, logging_1.log)(\"enabled: \" + isEnabled, 4 /* LogType.Debug */, \"setButtonEnabledState\");\r\n if (isEnabled) {\r\n $(selector).removeAttr(\"disabled\");\r\n }\r\n else {\r\n $(selector).attr(\"disabled\", \"true\");\r\n }\r\n}\r\nexports.setButtonEnabledState = setButtonEnabledState;\r\n;\r\nfunction isFormValid(formToCheck) {\r\n if (!formToCheck) {\r\n return true;\r\n }\r\n var ok = $(formToCheck).valid();\r\n return ok;\r\n}\r\nexports.isFormValid = isFormValid;\r\n;\r\nfunction modifyContentInSection(content, newState) {\r\n if (content && newState) {\r\n switch (newState) {\r\n case \"Open\" /* UiState.Open */:\r\n if (!$(content).is(\":visible\")) {\r\n $(content).slideToggle(_slideTransitionInMs);\r\n }\r\n $(content).addClass(\"open\").removeClass(\"closed\");\r\n break;\r\n case \"Close\" /* UiState.Close */:\r\n if ($(content).is(\":visible\")) {\r\n $(content).slideToggle(_slideTransitionInMs);\r\n }\r\n $(content).addClass(\"closed\").removeClass(\"open\");\r\n break;\r\n case \"Toggle\" /* UiState.Toggle */:\r\n $(content).toggle(_transitionInMs);\r\n if ($(content).is(\":visible\")) {\r\n $(content)\r\n .addClass(\"open\")\r\n .removeClass(\"closed\");\r\n }\r\n else {\r\n $(content)\r\n .addClass(\"closed\")\r\n .removeClass(\"open\");\r\n }\r\n break;\r\n }\r\n }\r\n}\r\nexports.modifyContentInSection = modifyContentInSection;\r\n;\r\nfunction isValidEmail(email) {\r\n // this is a deliberately simple regex to catch the \r\n // obviously errors when inputting email, a bulletproof regex for email is \r\n // notoriously painful and out of scope for this usage\r\n var regex = /\\S+@\\S+\\.\\S+/;\r\n var result = regex.test(email);\r\n (0, logging_1.log)(\"input: \" + email + \" => \" + result, 4 /* LogType.Debug */, \"isValidEmail\");\r\n return result;\r\n}\r\nexports.isValidEmail = isValidEmail;\r\n;\r\nfunction modifySection(section, newState, scrollToAfter) {\r\n (0, logging_1.log)(\"section: \" + $(section).attr(\"id\") + \" | state: \" + newState, 4 /* LogType.Debug */, \"modifySection\");\r\n if (!section) {\r\n return;\r\n }\r\n var requiresChange = !$(section).hasClass(newState === \"Open\" /* UiState.Open */ ? \"open\" : \"closed\");\r\n if (requiresChange) {\r\n switch (newState) {\r\n case \"Open\" /* UiState.Open */:\r\n $(section).addClass(\"open\").removeClass(\"closed\");\r\n break;\r\n case \"Close\" /* UiState.Close */:\r\n $(section).addClass(\"closed\").removeClass(\"open\");\r\n break;\r\n case \"Toggle\" /* UiState.Toggle */:\r\n $(section).toggleClass(\"open closed\");\r\n break;\r\n }\r\n var $content = $(section).parent().find(\".content\");\r\n modifyContentInSection($content, newState);\r\n }\r\n else {\r\n (0, logging_1.log)(\"No change to section required - UiState already set.\", 4 /* LogType.Debug */, \"modifySection\");\r\n }\r\n if (scrollToAfter) {\r\n scrollToElement(section);\r\n }\r\n}\r\nexports.modifySection = modifySection;\r\n;\r\nfunction scrollToElement(elementSelector) {\r\n if (elementSelector && $(elementSelector).length > 0) {\r\n (0, logging_1.log)(\"scrolling to element: \" + elementSelector, 4 /* LogType.Debug */, \"scrollToElement\");\r\n var headerHeight = $(\".page-header\").height() || 0;\r\n $(\"html,body\").animate({ scrollTop: $(elementSelector).offset().top - headerHeight }, \"slow\");\r\n }\r\n}\r\nexports.scrollToElement = scrollToElement;\r\n;\r\nfunction vehicleHasServicePack() {\r\n return $('#VehicleHasStandardServicePack').val() || $('#VehicleHasStandardServicePack').val();\r\n}\r\nexports.vehicleHasServicePack = vehicleHasServicePack;\r\n;\r\nfunction showOverlay(content, modalSize) {\r\n (0, logging_1.log)(\"Fired.\", 4 /* LogType.Debug */, \"showOverlay\");\r\n setUiState(\"Ready\" /* Ui.Ready */);\r\n if (content === null || content.length === 0) {\r\n return;\r\n }\r\n if (modalSize === null || modalSize === undefined) {\r\n $(\".modalOuter\").removeClass(\"small\" /* ModalSize.Small */);\r\n $(\".modalOuter\").removeClass(\"large\" /* ModalSize.Large */);\r\n }\r\n else {\r\n $(\".modalOuter\").addClass(modalSize);\r\n switch (modalSize) {\r\n case \"small\" /* ModalSize.Small */:\r\n $(\".modalOuter\").removeClass(\"large\" /* ModalSize.Large */);\r\n break;\r\n case \"medium\" /* ModalSize.Medium */:\r\n $(\".modalOuter\").removeClass(\"small\" /* ModalSize.Small */);\r\n $(\".modalOuter\").removeClass(\"large\" /* ModalSize.Large */);\r\n break;\r\n case \"large\" /* ModalSize.Large */:\r\n $(\".modalOuter\").removeClass(\"small\" /* ModalSize.Small */);\r\n break;\r\n }\r\n }\r\n $(\".modalInner\").html(content);\r\n $(\".modal\").addClass(\"modalOpen\");\r\n $(\"body\").addClass(\"modalBody\");\r\n $(\".modalClose.js-close-modal\").show();\r\n}\r\nexports.showOverlay = showOverlay;\r\n;\r\nfunction hideOverlay() {\r\n (0, logging_1.log)(\"Fired.\", 4 /* LogType.Debug */, \"hideOverlay\");\r\n setUiState(\"Ready\" /* Ui.Ready */);\r\n $(\".modalOuter\").removeClass(\"large\");\r\n $(\".modal\").removeClass(\"modalOpen\");\r\n $(\"body\").removeClass(\"modalBody\");\r\n}\r\nexports.hideOverlay = hideOverlay;\r\n;\r\nvar triggerExpander = function triggerExpander() {\r\n console.log('triggerExpander');\r\n};\r\nfunction centreElement(element) {\r\n element.css(\"position\", \"absolute\");\r\n element.css(\"top\", Math.max(0, (($(window).height() - $(element).outerHeight()) / 2) + $(window).scrollTop()) + \"px\");\r\n element.css(\"left\", Math.max(0, (($(window).width() - $(element).outerWidth()) / 2) + $(window).scrollLeft()) + \"px\");\r\n}\r\nexports.centreElement = centreElement;\r\n;\r\nfunction loadProgressAnimation() {\r\n lottie_web_1.default.loadAnimation({\r\n container: document.getElementById('loaderAnimate'),\r\n renderer: 'svg',\r\n loop: true,\r\n autoplay: true,\r\n animationData: animator\r\n });\r\n}\r\n;\r\nfunction setupBasket() {\r\n var EstimateBasketDisplay = (function () {\r\n function EstimateBasketDisplay() {\r\n var _this = this;\r\n this.window = $(window);\r\n this.toggleButton = $('.appointmentHead');\r\n this.toggleButtonLower = $('.closer.no-progress');\r\n this.toggleTarget = $('.expandedBasket');\r\n if (window.innerWidth < 768) {\r\n this.toggleTarget.hide();\r\n this.toggleButton.addClass(\"closed\");\r\n }\r\n this.toggleButton.on('click', function (e) {\r\n _this.toggleTarget.toggle();\r\n _this.toggleButton.toggleClass(\"closed\");\r\n return false;\r\n });\r\n this.toggleButtonLower.on('click', function (e) {\r\n _this.toggleTarget.toggle();\r\n _this.toggleButtonLower.toggleClass(\"closed\");\r\n scrollToTop();\r\n return false;\r\n });\r\n this.window.resize(function () {\r\n if (window.matchMedia(\"(min-width: 768px)\").matches) {\r\n _this.toggleTarget.show();\r\n _this.toggleButton.removeClass(\"closed\");\r\n return;\r\n }\r\n });\r\n }\r\n return EstimateBasketDisplay;\r\n }());\r\n var estimateBasket = new EstimateBasketDisplay();\r\n}\r\nexports.TabbedContent = (function () {\r\n function TabbedContent(options) {\r\n var _this = this;\r\n this.settings = {\r\n targetDiv: '',\r\n tabSelectedClass: 'selected',\r\n content: [],\r\n targetTab: '',\r\n selectedDiv: ''\r\n };\r\n this.handleClickEvent = function (element) {\r\n var parentElementClicked = element.target.parentNode;\r\n var parentNodeID = '#' + parentElementClicked.getAttribute('ID');\r\n //If we've hit the show all services pill, loop through the other options and display them all\r\n if (parentNodeID == \"#allServicesTab\") {\r\n var idArray = [];\r\n $(\"#moreContent div[id*='Content']\").each(function () {\r\n idArray.push(\"#\" + $(this).attr('id'));\r\n });\r\n _this.showHideContentEventAll(idArray, parentNodeID, _this.settings);\r\n // Hide the 'all services' module\r\n $('[elementLinkId=serviceAll]').hide();\r\n }\r\n //If not, show the individual options\r\n else {\r\n var divToShow = _this.getTheElementToShow(element.target.href); // Returns the ID from the URL\r\n _this.showHideContentEvent(divToShow, parentNodeID, _this.settings);\r\n // Show the 'all services' module\r\n $('[elementLinkId=serviceAll]').show();\r\n }\r\n element.preventDefault();\r\n };\r\n if (options) {\r\n $.extend(this.settings, options); // Overwrites the default settings with those defined in the function call (options object)\r\n }\r\n this.cachedTargetID = document.querySelector(this.settings.targetDiv);\r\n this.hideContent(this.settings);\r\n this.initialView(this.settings);\r\n this.addClickEvents(this.settings);\r\n }\r\n TabbedContent.prototype.hideContent = function (settings) {\r\n var numberOfTabbedContent = settings.content.length;\r\n for (var count = 0; count < numberOfTabbedContent; count++) {\r\n $(settings.content[count]).css({ 'display': 'none' });\r\n }\r\n };\r\n TabbedContent.prototype.initialView = function (settings) {\r\n $(settings.targetTab).addClass(settings.tabSelectedClass);\r\n $(settings.selectedDiv).css({ 'display': 'block' });\r\n };\r\n TabbedContent.prototype.addClickEvents = function (settings) {\r\n var clickableElements = this.cachedTargetID.getElementsByTagName('a');\r\n var numberOfClickableElements = clickableElements.length;\r\n for (var count = 0; count < numberOfClickableElements; count++) {\r\n clickableElements[count].addEventListener('click', this.handleClickEvent);\r\n }\r\n };\r\n TabbedContent.prototype.getTheElementToShow = function (fullURL) {\r\n var theURL = '[\\\\#]([^&#]*)';\r\n var regex = new RegExp(theURL);\r\n var tabHrefID = regex.exec(fullURL);\r\n return tabHrefID[0];\r\n };\r\n TabbedContent.prototype.showHideContentEvent = function (elementToShow, tabClicked, settings) {\r\n if (elementToShow != settings.selectedDiv) {\r\n // Update display state for all Content\r\n $(\"#moreContent div[id*='Content']\").each(function () {\r\n $(this).css({ 'display': 'none' });\r\n });\r\n // Displays the content\r\n $(settings.selectedDiv).css({ 'display': 'none' });\r\n $(elementToShow).css({ 'display': 'block' });\r\n settings.selectedDiv = elementToShow;\r\n // Changes the class on the tabs\r\n $(\"#allOptionsTabs li[id*='Tab']\").each(function (item) {\r\n $(this).removeClass(settings.tabSelectedClass);\r\n });\r\n $(tabClicked).addClass(settings.tabSelectedClass);\r\n settings.targetTab = tabClicked;\r\n }\r\n };\r\n TabbedContent.prototype.showHideContentEventAll = function (elementsToShow, tabClicked, settings) {\r\n // Remove selected state from all tabs\r\n $(\"#allOptionsTabs li[id*='Tab']\").each(function (item) {\r\n $(this).removeClass(settings.tabSelectedClass);\r\n });\r\n if (elementsToShow.length > 0) {\r\n // Set allServices tab to selected\r\n $(tabClicked).addClass(settings.tabSelectedClass);\r\n elementsToShow.forEach(function (item) {\r\n // Displays all content\r\n $(item).css({ 'display': 'block' });\r\n });\r\n }\r\n settings.selectedDiv = \"\";\r\n };\r\n TabbedContent.prototype.setActiveTab = function (tabId) {\r\n var divToShow = this.getTheElementToShow($(tabId + ' a').attr('href')); // Returns the ID from the URL\r\n this.showHideContentEvent(divToShow, tabId, this.settings);\r\n };\r\n return TabbedContent;\r\n}());\r\nfunction setupFooterControl() {\r\n var FooterControl = (function () {\r\n function FooterControl() {\r\n this.footerNavButtons = $(\".footerNav h2\");\r\n this.footerNavButtons.on(\"click\", function (e) {\r\n // hide, outerHeight, toggle and show forces a redraw on Safari - otherwise the arrows look stuck.\r\n $(e.target).hide();\r\n $(e.target).outerHeight();\r\n $(e.target).toggleClass(\"open\");\r\n $(e.target).show();\r\n $(e.target).parent().children(\"ul\").toggleClass(\"open\");\r\n });\r\n }\r\n return FooterControl;\r\n }());\r\n var footerControl = new FooterControl();\r\n}\r\nfunction setupAlertArea() {\r\n var alertAreaControl = new alert_control_1.AlertControl();\r\n var readMoreControl = new read_more_control_1.ReadMoreControl();\r\n}\r\nfunction bindFormSubmit() {\r\n $(\"form\").on(\"submit\", function (ev) {\r\n if (!isFormValid(this)) {\r\n setUiState(\"Ready\" /* Ui.Ready */);\r\n (0, logging_1.log)(\"Form invalid, hiding progress spinner, preventing form submit.\", 4 /* LogType.Debug */, \"{ event } form submit\");\r\n return false;\r\n }\r\n else {\r\n setUiState(\"Busy\" /* Ui.Busy */);\r\n (0, logging_1.log)(\"Form valid, showing progress spinner.\", 4 /* LogType.Debug */, \"{ event } form submit\");\r\n }\r\n });\r\n}\r\nexports.bindFormSubmit = bindFormSubmit;\r\nfunction setupCookieBannerObserver() {\r\n var target = document.querySelector('#bmw-eprivacy-banner');\r\n var observer = new MutationObserver(function () {\r\n var buttons = $(\".bmw-eprivacy-banner__ctas\").find(\"button\");\r\n $(\".cookie-banner\").toggleClass(\"tinted\", buttons.length > 0);\r\n });\r\n // configuration of the observer\r\n var config = { attributes: true, childList: true, characterData: true, subtree: true };\r\n observer.observe(target, config);\r\n}\r\nfunction setupAccordions() {\r\n $(document).on(\"click\", \".accordion\", function (ev) {\r\n var source = $(this);\r\n source.toggleClass(\"closed\");\r\n source.parent().find(\".accordionContent\").toggle();\r\n });\r\n}\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.AlertControl = void 0;\r\nvar AlertControl = /** @class */ (function () {\r\n function AlertControl() {\r\n var _this = this;\r\n this.closeButton = $('.alertClose');\r\n this.closeTarget = $('.alertArea');\r\n this.headerLine = $('header .contentHolder');\r\n this.closeButton.on('click', function (e) {\r\n _this.closeTarget.hide();\r\n });\r\n }\r\n return AlertControl;\r\n}());\r\nexports.AlertControl = AlertControl;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.logScriptLoad = exports.determineLoggingLevel = exports.log = exports.logMethodEndInputAndOutput = exports.logMethodEnd = exports.logMethodBegin = void 0;\r\nvar core_common_1 = require(\"./core-common\");\r\nfunction logMethodBegin(method) {\r\n log(\"Begin.\", 4 /* LogType.Debug */, method, true);\r\n}\r\nexports.logMethodBegin = logMethodBegin;\r\nfunction logMethodEnd(method, result) {\r\n log(\"End. Returning: \".concat(result !== null && result !== void 0 ? result : \"n/a\"), 4 /* LogType.Debug */, method, true);\r\n}\r\nexports.logMethodEnd = logMethodEnd;\r\nfunction logMethodEndInputAndOutput(method, input, result) {\r\n log(\"End. Input: \\\"\".concat(input, \"\\\", returning: \\\"\").concat(result !== null && result !== void 0 ? result : \"n/a\", \"\\\"\"), 4 /* LogType.Debug */, method, true);\r\n}\r\nexports.logMethodEndInputAndOutput = logMethodEndInputAndOutput;\r\nfunction log(message, logType, caller, prependWithTimestamp) {\r\n if (!logType) {\r\n // if caller didnt provide a log type for the message, assume its \"info\".\r\n logType = 3 /* LogType.Information */;\r\n }\r\n if (message) {\r\n var loggingLevel = determineLoggingLevel();\r\n if (loggingLevel >= logType) {\r\n if (caller) {\r\n message = \"[ \" + caller + \" ] => \" + message;\r\n }\r\n if (prependWithTimestamp) {\r\n message = \"\".concat((0, core_common_1.getTime)(), \": \").concat(message);\r\n }\r\n switch (loggingLevel) {\r\n case 4 /* LogType.Debug */:\r\n console.log(message);\r\n break;\r\n case 3 /* LogType.Information */:\r\n console.info(message);\r\n break;\r\n case 2 /* LogType.Warning */:\r\n console.warn(message);\r\n break;\r\n case 1 /* LogType.Error */:\r\n default:\r\n console.error(message);\r\n }\r\n }\r\n }\r\n}\r\nexports.log = log;\r\n;\r\nfunction determineLoggingLevel() {\r\n var clientLoggingLevel = $(\"#LogType\");\r\n if (clientLoggingLevel.length > 0) {\r\n return Number($(clientLoggingLevel[0]).val());\r\n }\r\n else {\r\n return 0 /* LogType.None */;\r\n }\r\n}\r\nexports.determineLoggingLevel = determineLoggingLevel;\r\n;\r\nfunction logScriptLoad(scriptId) {\r\n if (scriptId) {\r\n console.log(\"Loaded script: \" + scriptId);\r\n }\r\n}\r\nexports.logScriptLoad = logScriptLoad;\r\n;\r\n","(typeof navigator !== \"undefined\") && (function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n var svgNS = 'http://www.w3.org/2000/svg';\n var locationHref = '';\n var _useWebWorker = false;\n var initialDefaultFrame = -999999;\n\n var setWebWorker = function setWebWorker(flag) {\n _useWebWorker = !!flag;\n };\n\n var getWebWorker = function getWebWorker() {\n return _useWebWorker;\n };\n\n var setLocationHref = function setLocationHref(value) {\n locationHref = value;\n };\n\n var getLocationHref = function getLocationHref() {\n return locationHref;\n };\n\n function createTag(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n }\n\n function extendPrototype(sources, destination) {\n var i;\n var len = sources.length;\n var sourcePrototype;\n\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n\n for (var attr in sourcePrototype) {\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n }\n\n function getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n }\n\n function createProxyFunction(prototype) {\n function ProxyFunction() {}\n\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n }\n\n // import Howl from '../../3rd_party/howler';\n var audioControllerFactory = function () {\n function AudioController(audioFactory) {\n this.audios = [];\n this.audioFactory = audioFactory;\n this._volume = 1;\n this._isMuted = false;\n }\n\n AudioController.prototype = {\n addAudio: function addAudio(audio) {\n this.audios.push(audio);\n },\n pause: function pause() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].pause();\n }\n },\n resume: function resume() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].resume();\n }\n },\n setRate: function setRate(rateValue) {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].setRate(rateValue);\n }\n },\n createAudio: function createAudio(assetPath) {\n if (this.audioFactory) {\n return this.audioFactory(assetPath);\n }\n\n if (window.Howl) {\n return new window.Howl({\n src: [assetPath]\n });\n }\n\n return {\n isPlaying: false,\n play: function play() {\n this.isPlaying = true;\n },\n seek: function seek() {\n this.isPlaying = false;\n },\n playing: function playing() {},\n rate: function rate() {},\n setVolume: function setVolume() {}\n };\n },\n setAudioFactory: function setAudioFactory(audioFactory) {\n this.audioFactory = audioFactory;\n },\n setVolume: function setVolume(value) {\n this._volume = value;\n\n this._updateVolume();\n },\n mute: function mute() {\n this._isMuted = true;\n\n this._updateVolume();\n },\n unmute: function unmute() {\n this._isMuted = false;\n\n this._updateVolume();\n },\n getVolume: function getVolume() {\n return this._volume;\n },\n _updateVolume: function _updateVolume() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n }\n }\n };\n return function () {\n return new AudioController();\n };\n }();\n\n var createTypedArray = function () {\n function createRegularArray(type, len) {\n var i = 0;\n var arr = [];\n var value;\n\n switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n\n default:\n value = 1.1;\n break;\n }\n\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n\n return arr;\n }\n\n function createTypedArrayFactory(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n }\n\n if (type === 'int16') {\n return new Int16Array(len);\n }\n\n if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n\n return createRegularArray(type, len);\n }\n\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArrayFactory;\n }\n\n return createRegularArray;\n }();\n\n function createSizedArray(len) {\n return Array.apply(null, {\n length: len\n });\n }\n\n function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\n var subframeEnabled = true;\n var expressionsPlugin = null;\n var expressionsInterfaces = null;\n var idPrefix$1 = '';\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var _shouldRoundValues = false;\n var bmPow = Math.pow;\n var bmSqrt = Math.sqrt;\n var bmFloor = Math.floor;\n var bmMax = Math.max;\n var bmMin = Math.min;\n var BMMath = {};\n\n (function () {\n var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n var i;\n var len = propertyNames.length;\n\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n\n function ProjectInterface$1() {\n return {};\n }\n\n BMMath.random = Math.random;\n\n BMMath.abs = function (val) {\n var tOfVal = _typeof$6(val);\n\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n\n return absArr;\n }\n\n return Math.abs(val);\n };\n\n var defaultCurveSegments = 150;\n var degToRads = Math.PI / 180;\n var roundCorner = 0.5519;\n\n function roundValues(flag) {\n _shouldRoundValues = !!flag;\n }\n\n function bmRnd(value) {\n if (_shouldRoundValues) {\n return Math.round(value);\n }\n\n return value;\n }\n\n function styleDiv(element) {\n element.style.position = 'absolute';\n element.style.top = 0;\n element.style.left = 0;\n element.style.display = 'block';\n element.style.transformOrigin = '0 0';\n element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = 'visible';\n element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = 'preserve-3d';\n element.style.webkitTransformStyle = 'preserve-3d';\n element.style.mozTransformStyle = 'preserve-3d';\n }\n\n function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n this.type = type;\n this.currentTime = currentTime;\n this.totalTime = totalTime;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n this.type = type;\n this.currentLoop = currentLoop;\n this.totalLoops = totalLoops;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n }\n\n function BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n }\n\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n\n function BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n }\n\n function BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n }\n\n var createElementID = function () {\n var _count = 0;\n return function createID() {\n _count += 1;\n return idPrefix$1 + '__lottie_element_' + _count;\n };\n }();\n\n function HSVtoRGB(h, s, v) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n\n default:\n break;\n }\n\n return [r, g, b];\n }\n\n function RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h;\n var s = max === 0 ? 0 : d / max;\n var v = max / 255;\n\n switch (max) {\n case min:\n h = 0;\n break;\n\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n\n default:\n break;\n }\n\n return [h, s, v];\n }\n\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n var rgbToHex = function () {\n var colorMap = [];\n var i;\n var hex;\n\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n }\n\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n\n if (g < 0) {\n g = 0;\n }\n\n if (b < 0) {\n b = 0;\n }\n\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n }();\n\n var setSubframeEnabled = function setSubframeEnabled(flag) {\n subframeEnabled = !!flag;\n };\n\n var getSubframeEnabled = function getSubframeEnabled() {\n return subframeEnabled;\n };\n\n var setExpressionsPlugin = function setExpressionsPlugin(value) {\n expressionsPlugin = value;\n };\n\n var getExpressionsPlugin = function getExpressionsPlugin() {\n return expressionsPlugin;\n };\n\n var setExpressionInterfaces = function setExpressionInterfaces(value) {\n expressionsInterfaces = value;\n };\n\n var getExpressionInterfaces = function getExpressionInterfaces() {\n return expressionsInterfaces;\n };\n\n var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n defaultCurveSegments = value;\n };\n\n var getDefaultCurveSegments = function getDefaultCurveSegments() {\n return defaultCurveSegments;\n };\n\n var setIdPrefix = function setIdPrefix(value) {\n idPrefix$1 = value;\n };\n\n var getIdPrefix = function getIdPrefix() {\n return idPrefix$1;\n };\n\n function createNS(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n }\n\n function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n var dataManager = function () {\n var _counterId = 1;\n var processes = [];\n var workerFn;\n var workerInstance;\n var workerProxy = {\n onmessage: function onmessage() {},\n postMessage: function postMessage(path) {\n workerFn({\n data: path\n });\n }\n };\n var _workerSelf = {\n postMessage: function postMessage(data) {\n workerProxy.onmessage({\n data: data\n });\n }\n };\n\n function createWorker(fn) {\n if (window.Worker && window.Blob && getWebWorker()) {\n var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n type: 'text/javascript'\n }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n var url = URL.createObjectURL(blob);\n return new Worker(url);\n }\n\n workerFn = fn;\n return workerProxy;\n }\n\n function setupWorker() {\n if (!workerInstance) {\n workerInstance = createWorker(function workerStart(e) {\n function dataFunctionManager() {\n function completeLayers(layers, comps) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if ('ks' in layerData && !layerData.completed) {\n layerData.completed = true;\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty === 5) {\n completeText(layerData);\n }\n }\n }\n }\n\n function completeChars(chars, assets) {\n if (chars) {\n var i = 0;\n var len = chars.length;\n\n for (i = 0; i < len; i += 1) {\n if (chars[i].t === 1) {\n // var compData = findComp(chars[i].data.refId, assets);\n chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n // chars[i].data.op = 99999;\n // chars[i].data.st = 0;\n // chars[i].data.sr = 1;\n // chars[i].w = compData.w;\n // chars[i].data.ks = {\n // a: { k: [0, 0, 0], a: 0 },\n // p: { k: [0, -compData.h, 0], a: 0 },\n // r: { k: 0, a: 0 },\n // s: { k: [100, 100], a: 0 },\n // o: { k: 100, a: 0 },\n // };\n\n completeLayers(chars[i].data.layers, assets);\n }\n }\n }\n }\n\n function findComp(id, comps) {\n var i = 0;\n var len = comps.length;\n\n while (i < len) {\n if (comps[i].id === id) {\n return comps[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function findCompLayers(id, comps) {\n var comp = findComp(id, comps);\n\n if (comp) {\n if (!comp.layers.__used) {\n comp.layers.__used = true;\n return comp.layers;\n }\n\n return JSON.parse(JSON.stringify(comp.layers));\n }\n\n return null;\n }\n\n function completeShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i;\n var len = path.i.length;\n\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n if (minimum[0] > animVersion[0]) {\n return true;\n }\n\n if (animVersion[0] > minimum[0]) {\n return false;\n }\n\n if (minimum[1] > animVersion[1]) {\n return true;\n }\n\n if (animVersion[1] > minimum[1]) {\n return false;\n }\n\n if (minimum[2] > animVersion[2]) {\n return true;\n }\n\n if (animVersion[2] > minimum[2]) {\n return false;\n }\n\n return null;\n }\n\n var checkText = function () {\n var minimumVersion = [4, 4, 14];\n\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [{\n s: documentData,\n t: 0\n }]\n };\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkChars = function () {\n var minimumVersion = [4, 7, 99];\n return function (animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i;\n var len = animationData.chars.length;\n\n for (i = 0; i < len; i += 1) {\n var charData = animationData.chars[i];\n\n if (charData.data && charData.data.shapes) {\n completeShapes(charData.data.shapes);\n charData.data.ip = 0;\n charData.data.op = 99999;\n charData.data.st = 0;\n charData.data.sr = 1;\n charData.data.ks = {\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n }\n };\n\n if (!animationData.chars[i].t) {\n charData.data.shapes.push({\n ty: 'no'\n });\n charData.data.shapes[0].it.push({\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n },\n sk: {\n k: 0,\n a: 0\n },\n sa: {\n k: 0,\n a: 0\n },\n ty: 'tr'\n });\n }\n }\n }\n }\n };\n }();\n\n var checkPathProperties = function () {\n var minimumVersion = [5, 7, 15];\n\n function updateTextLayer(textLayer) {\n var pathData = textLayer.t.p;\n\n if (typeof pathData.a === 'number') {\n pathData.a = {\n a: 0,\n k: pathData.a\n };\n }\n\n if (typeof pathData.p === 'number') {\n pathData.p = {\n a: 0,\n k: pathData.p\n };\n }\n\n if (typeof pathData.r === 'number') {\n pathData.r = {\n a: 0,\n k: pathData.r\n };\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkColors = function () {\n var minimumVersion = [4, 1, 9];\n\n function iterateShapes(shapes) {\n var i;\n var len = shapes.length;\n var j;\n var jLen;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkShapes = function () {\n var minimumVersion = [4, 4, 18];\n\n function completeClosingShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeClosingShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n\n if (layerData.ty === 4) {\n completeClosingShapes(layerData.shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n function completeData(animationData) {\n if (animationData.__complete) {\n return;\n }\n\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkPathProperties(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets);\n completeChars(animationData.chars, animationData.assets);\n animationData.__complete = true;\n }\n\n function completeText(data) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n }\n }\n\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkPathProperties = checkPathProperties;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n\n if (!_workerSelf.dataManager) {\n _workerSelf.dataManager = dataFunctionManager();\n }\n\n if (!_workerSelf.assetLoader) {\n _workerSelf.assetLoader = function () {\n function formatResponse(xhr) {\n // using typeof doubles the time of execution of this method,\n // so if available, it's better to use the header to validate the type\n var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n return xhr.response;\n }\n\n if (xhr.response && _typeof$5(xhr.response) === 'object') {\n return xhr.response;\n }\n\n if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n }\n\n if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n\n return null;\n }\n\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = 'json';\n } catch (err) {} // eslint-disable-line no-empty\n\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n response = formatResponse(xhr);\n callback(response);\n } else {\n try {\n response = formatResponse(xhr);\n callback(response);\n } catch (err) {\n if (errorCallback) {\n errorCallback(err);\n }\n }\n }\n }\n };\n\n try {\n // Hack to workaround banner validation\n xhr.open(['G', 'E', 'T'].join(''), path, true);\n } catch (error) {\n // Hack to workaround banner validation\n xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true);\n }\n\n xhr.send();\n }\n\n return {\n load: loadAsset\n };\n }();\n }\n\n if (e.data.type === 'loadAnimation') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.dataManager.completeData(data);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n } else if (e.data.type === 'complete') {\n var animation = e.data.animation;\n\n _workerSelf.dataManager.completeData(animation);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: animation,\n status: 'success'\n });\n } else if (e.data.type === 'loadData') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n }\n });\n\n workerInstance.onmessage = function (event) {\n var data = event.data;\n var id = data.id;\n var process = processes[id];\n processes[id] = null;\n\n if (data.status === 'success') {\n process.onComplete(data.payload);\n } else if (process.onError) {\n process.onError();\n }\n };\n }\n }\n\n function createProcess(onComplete, onError) {\n _counterId += 1;\n var id = 'processId_' + _counterId;\n processes[id] = {\n onComplete: onComplete,\n onError: onError\n };\n return id;\n }\n\n function loadAnimation(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadAnimation',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function loadData(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadData',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function completeAnimation(anim, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'complete',\n animation: anim,\n id: processId\n });\n }\n\n return {\n loadAnimation: loadAnimation,\n loadData: loadData,\n completeAnimation: completeAnimation\n };\n }();\n\n var ImagePreloader = function () {\n var proxyImage = function () {\n var canvas = createTag('canvas');\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext('2d');\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return canvas;\n }();\n\n function imageLoaded() {\n this.loadedAssets += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function footageLoaded() {\n this.loadedFootagesCount += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData, assetsPath, originalPath) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = assetsPath + imagePath;\n } else {\n path = originalPath;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n }\n\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(function () {\n var box = img.getBBox();\n\n if (box.width || _count > 500) {\n this._imageLoaded();\n\n clearInterval(intervalId);\n }\n\n _count += 1;\n }.bind(this), 50);\n }\n\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener('load', this._imageLoaded, false);\n }\n\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n if (this._elementHelper.append) {\n this._elementHelper.append(img);\n } else {\n this._elementHelper.appendChild(img);\n }\n\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createImgData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createTag('img');\n img.crossOrigin = 'anonymous';\n img.addEventListener('load', this._imageLoaded, false);\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.src = path;\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createFootageData(data) {\n var ob = {\n assetData: data\n };\n var path = getAssetsPath(data, this.assetsPath, this.path);\n dataManager.loadData(path, function (footageData) {\n ob.img = footageData;\n\n this._footageLoaded();\n }.bind(this), function () {\n ob.img = {};\n\n this._footageLoaded();\n }.bind(this));\n return ob;\n }\n\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n if (!assets[i].t || assets[i].t === 'seq') {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n } else if (assets[i].t === 3) {\n this.totalFootages += 1;\n this.images.push(this.createFootageData(assets[i]));\n }\n }\n }\n }\n\n function setPath(path) {\n this.path = path || '';\n }\n\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n\n function getAsset(assetData) {\n var i = 0;\n var len = this.images.length;\n\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n\n function loadedImages() {\n return this.totalImages === this.loadedAssets;\n }\n\n function loadedFootages() {\n return this.totalFootages === this.loadedFootagesCount;\n }\n\n function setCacheType(type, elementHelper) {\n if (type === 'svg') {\n this._elementHelper = elementHelper;\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n\n function ImagePreloaderFactory() {\n this._imageLoaded = imageLoaded.bind(this);\n this._footageLoaded = footageLoaded.bind(this);\n this.testImageLoaded = testImageLoaded.bind(this);\n this.createFootageData = createFootageData.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.totalFootages = 0;\n this.loadedAssets = 0;\n this.loadedFootagesCount = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n\n ImagePreloaderFactory.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loadedImages: loadedImages,\n loadedFootages: loadedFootages,\n destroy: destroy,\n getAsset: getAsset,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n footageLoaded: footageLoaded,\n setCacheType: setCacheType\n };\n return ImagePreloaderFactory;\n }();\n\n function BaseEvent() {}\n\n BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\n\n for (var i = 0; i < callbacks.length; i += 1) {\n callbacks[i](args);\n }\n }\n },\n addEventListener: function addEventListener(eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n\n this._cbs[eventName].push(callback);\n\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function removeEventListener(eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0;\n var len = this._cbs[eventName].length;\n\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n\n i -= 1;\n len -= 1;\n }\n\n i += 1;\n }\n\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n }\n };\n\n var markerParser = function () {\n function parsePayloadLines(payload) {\n var lines = payload.split('\\r\\n');\n var keys = {};\n var line;\n var keysCount = 0;\n\n for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(':');\n\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n\n if (keysCount === 0) {\n throw new Error();\n }\n\n return keys;\n }\n\n return function (_markers) {\n var markers = [];\n\n for (var i = 0; i < _markers.length; i += 1) {\n var _marker = _markers[i];\n var markerData = {\n time: _marker.tm,\n duration: _marker.dr\n };\n\n try {\n markerData.payload = JSON.parse(_markers[i].cm);\n } catch (_) {\n try {\n markerData.payload = parsePayloadLines(_markers[i].cm);\n } catch (__) {\n markerData.payload = {\n name: _markers[i].cm\n };\n }\n }\n\n markers.push(markerData);\n }\n\n return markers;\n };\n }();\n\n var ProjectInterface = function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n\n return function () {\n function _thisProjectFunction(name) {\n var i = 0;\n var len = this.compositions.length;\n\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n\n return this.compositions[i].compInterface;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\n };\n }();\n\n var renderers = {};\n\n var registerRenderer = function registerRenderer(key, value) {\n renderers[key] = value;\n };\n\n function getRenderer(key) {\n return renderers[key];\n }\n\n function getRegisteredRenderer() {\n // Returns canvas by default for compatibility\n if (renderers.canvas) {\n return 'canvas';\n } // Returns any renderer that is registered\n\n\n for (var key in renderers) {\n if (renderers[key]) {\n return key;\n }\n }\n\n return '';\n }\n\n function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n var AnimationItem = function AnimationItem() {\n this._cbs = [];\n this.name = '';\n this.path = '';\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.firstFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.playCount = 0;\n this.animationData = {};\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = createElementID();\n this.assetsPath = '';\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.isSubframeEnabled = getSubframeEnabled();\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n this.audioController = audioControllerFactory();\n this.markers = [];\n this.configAnimation = this.configAnimation.bind(this);\n this.onSetupError = this.onSetupError.bind(this);\n this.onSegmentComplete = this.onSegmentComplete.bind(this);\n this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n this.expressionsPlugin = getExpressionsPlugin();\n };\n\n extendPrototype([BaseEvent], AnimationItem);\n\n AnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n\n var animType = 'svg';\n\n if (params.animType) {\n animType = params.animType;\n } else if (params.renderer) {\n animType = params.renderer;\n }\n\n var RendererClass = getRenderer(animType);\n this.renderer = new RendererClass(this, params.rendererSettings);\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n\n if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n this.loop = true;\n } else if (params.loop === false) {\n this.loop = false;\n } else {\n this.loop = parseInt(params.loop, 10);\n }\n\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n\n if (params.animationData) {\n this.setupAnimation(params.animationData);\n } else if (params.path) {\n if (params.path.lastIndexOf('\\\\') !== -1) {\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n } else {\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n }\n\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n }\n };\n\n AnimationItem.prototype.onSetupError = function () {\n this.trigger('data_failed');\n };\n\n AnimationItem.prototype.setupAnimation = function (data) {\n dataManager.completeAnimation(data, this.configAnimation);\n };\n\n AnimationItem.prototype.setData = function (wrapper, animationData) {\n if (animationData) {\n if (_typeof$4(animationData) !== 'object') {\n animationData = JSON.parse(animationData);\n }\n }\n\n var params = {\n wrapper: wrapper,\n animationData: animationData\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : getRegisteredRenderer() || 'canvas';\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else if (loop !== '') {\n params.loop = parseInt(loop, 10);\n }\n\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n params.autoplay = autoplay !== 'false';\n params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n if (prerender === 'false') {\n params.prerender = false;\n }\n\n if (!params.path) {\n this.trigger('destroy');\n } else {\n this.setParams(params);\n }\n };\n\n AnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n\n var layers = this.animationData.layers;\n var i;\n var len = layers.length;\n var newLayers = data.layers;\n var j;\n var jLen = newLayers.length;\n\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n\n while (i < len) {\n if (layers[i].id === newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n\n i += 1;\n }\n }\n\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n\n if (data.assets) {\n len = data.assets.length;\n\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n\n this.animationData.__complete = false;\n dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n };\n\n AnimationItem.prototype.onSegmentComplete = function (data) {\n this.animationData = data;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\n }\n\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n this.segmentPos += 1;\n dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n };\n\n AnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\n };\n\n AnimationItem.prototype.preloadImages = function () {\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n };\n\n AnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n\n try {\n this.animationData = animData;\n\n if (this.initialSegment) {\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n this.firstFrame = Math.round(this.initialSegment[0]);\n } else {\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.firstFrame = Math.round(this.animationData.ip);\n }\n\n this.renderer.configAnimation(animData);\n\n if (!animData.assets) {\n animData.assets = [];\n }\n\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.frameMult = this.animationData.fr / 1000;\n this.renderer.searchExtraCompositions(animData.assets);\n this.markers = markerParser(animData.markers || []);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n };\n\n AnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n };\n\n AnimationItem.prototype.checkLoaded = function () {\n if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n this.isLoaded = true;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n\n if (this.autoplay) {\n this.play();\n }\n }\n };\n\n AnimationItem.prototype.resize = function (width, height) {\n // Adding this validation for backwards compatibility in case an event object was being passed down\n var _width = typeof width === 'number' ? width : undefined;\n\n var _height = typeof height === 'number' ? height : undefined;\n\n this.renderer.updateContainerSize(_width, _height);\n };\n\n AnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\n };\n\n AnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n\n this.trigger('enterFrame');\n this.renderFrame();\n this.trigger('drawnFrame');\n };\n\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false || !this.renderer) {\n return;\n }\n\n try {\n if (this.expressionsPlugin) {\n this.expressionsPlugin.resetFrame();\n }\n\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n };\n\n AnimationItem.prototype.play = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.isPaused = false;\n this.trigger('_play');\n this.audioController.resume();\n\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n };\n\n AnimationItem.prototype.pause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === false) {\n this.isPaused = true;\n this.trigger('_pause');\n this._idle = true;\n this.trigger('_idle');\n this.audioController.pause();\n }\n };\n\n AnimationItem.prototype.togglePause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n\n AnimationItem.prototype.stop = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n };\n\n AnimationItem.prototype.getMarkerData = function (markerName) {\n var marker;\n\n for (var i = 0; i < this.markers.length; i += 1) {\n marker = this.markers[i];\n\n if (marker.payload && marker.payload.name === markerName) {\n return marker;\n }\n }\n\n return null;\n };\n\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n this.goToAndStop(marker.time, true);\n }\n } else if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n\n this.pause();\n };\n\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n if (!marker.duration) {\n this.goToAndStop(marker.time, true);\n } else {\n this.playSegments([marker.time, marker.time + marker.duration], true);\n }\n }\n } else {\n this.goToAndStop(numValue, isFrame, name);\n }\n\n this.play();\n };\n\n AnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n if (!this.loop || this.playCount === this.loop) {\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n _isComplete = true;\n nextValue = this.totalFrames - 1;\n }\n } else if (nextValue >= this.totalFrames) {\n this.playCount += 1;\n\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n this._completedLoop = true;\n this.trigger('loopComplete');\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n } else if (nextValue < 0) {\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n // eslint-disable-line no-plusplus\n this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n if (!this._completedLoop) {\n this._completedLoop = true;\n } else {\n this.trigger('loopComplete');\n }\n } else {\n _isComplete = true;\n nextValue = 0;\n }\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n };\n\n AnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\n\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n\n this.totalFrames = arr[0] - arr[1];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n } else if (arr[1] > arr[0]) {\n if (this.frameModifier < 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(1);\n }\n }\n\n this.totalFrames = arr[1] - arr[0];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n\n this.trigger('segmentStart');\n };\n\n AnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\n\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init;\n }\n }\n\n this.firstFrame = init;\n this.totalFrames = end - init;\n this.timeCompleted = this.totalFrames;\n\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n\n if (_typeof$4(arr[0]) === 'object') {\n var i;\n var len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n\n if (this.isPaused) {\n this.play();\n }\n };\n\n AnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n\n if (forceFlag) {\n this.checkSegments(0);\n }\n };\n\n AnimationItem.prototype.checkSegments = function (offset) {\n if (this.segments.length) {\n this.adjustSegment(this.segments.shift(), offset);\n return true;\n }\n\n return false;\n };\n\n AnimationItem.prototype.destroy = function (name) {\n if (name && this.name !== name || !this.renderer) {\n return;\n }\n\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = null;\n this.onLoopComplete = null;\n this.onComplete = null;\n this.onSegmentStart = null;\n this.onDestroy = null;\n this.renderer = null;\n this.expressionsPlugin = null;\n this.imagePreloader = null;\n this.projectInterface = null;\n };\n\n AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n };\n\n AnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setLoop = function (isLooping) {\n this.loop = isLooping;\n };\n\n AnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.setVolume(val);\n };\n\n AnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n };\n\n AnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.mute();\n };\n\n AnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.unmute();\n };\n\n AnimationItem.prototype.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n this.audioController.setRate(this.playSpeed * this.playDirection);\n };\n\n AnimationItem.prototype.getPath = function () {\n return this.path;\n };\n\n AnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n };\n\n AnimationItem.prototype.getAssetData = function (id) {\n var i = 0;\n var len = this.assets.length;\n\n while (i < len) {\n if (id === this.assets[i].id) {\n return this.assets[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n AnimationItem.prototype.hide = function () {\n this.renderer.hide();\n };\n\n AnimationItem.prototype.show = function () {\n this.renderer.show();\n };\n\n AnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n };\n\n AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n try {\n var element = this.renderer.getElementByPath(path);\n element.updateDocumentData(documentData, index);\n } catch (error) {// TODO: decide how to handle catch case\n }\n };\n\n AnimationItem.prototype.trigger = function (name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case 'enterFrame':\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n break;\n\n case 'drawnFrame':\n this.drawnFrameEvent.currentTime = this.currentFrame;\n this.drawnFrameEvent.totalTime = this.totalFrames;\n this.drawnFrameEvent.direction = this.frameModifier;\n this.triggerEvent(name, this.drawnFrameEvent);\n break;\n\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n\n default:\n this.triggerEvent(name);\n }\n }\n\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n\n AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n AnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n var animationManager = function () {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var playingAnimationsNum = 0;\n var _stopped = true;\n var _isFrozen = false;\n\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n\n i += 1;\n }\n }\n\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n\n var i = 0;\n\n while (i < len) {\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n\n i += 1;\n }\n\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n\n function getRegisteredAnimations() {\n var i;\n var lenAnims = registeredAnimations.length;\n var animations = [];\n\n for (i = 0; i < lenAnims; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n\n return animations;\n }\n\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n }\n\n function setupAnimation(animItem, element) {\n animItem.addEventListener('destroy', removeElement);\n animItem.addEventListener('_active', addPlayingCount);\n animItem.addEventListener('_idle', subtractPlayingCount);\n registeredAnimations.push({\n elem: element,\n animation: animItem\n });\n len += 1;\n }\n\n function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n\n function setSpeed(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n\n function setDirection(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n\n function play(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n\n initTime = nowTime;\n\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n\n function pause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n\n function goToAndStop(value, isFrame, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n\n function stop(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n\n function togglePause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n\n function destroy(animation) {\n var i;\n\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n var i;\n var lenAnims = animElements.length;\n\n for (i = 0; i < lenAnims; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n\n registerAnimation(animElements[i], animationData);\n }\n\n if (standalone && lenAnims === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n\n var body = document.getElementsByTagName('body')[0];\n body.innerText = '';\n var div = createTag('div');\n div.style.width = '100%';\n div.style.height = '100%';\n div.setAttribute('data-bm-type', renderer);\n body.appendChild(div);\n registerAnimation(div, animationData);\n }\n }\n\n function resize() {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n\n function freeze() {\n _isFrozen = true;\n }\n\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n\n function setVolume(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n\n function mute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n\n function unmute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\n }\n\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\n moduleOb.pause = pause;\n moduleOb.stop = stop;\n moduleOb.togglePause = togglePause;\n moduleOb.searchAnimations = searchAnimations;\n moduleOb.resize = resize; // moduleOb.start = start;\n\n moduleOb.goToAndStop = goToAndStop;\n moduleOb.destroy = destroy;\n moduleOb.freeze = freeze;\n moduleOb.unfreeze = unfreeze;\n moduleOb.setVolume = setVolume;\n moduleOb.mute = mute;\n moduleOb.unmute = unmute;\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\n }();\n\n /* eslint-disable */\n var BezierFactory = function () {\n /**\r\n * BezierEasing - use bezier curve for transition easing function\r\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n *\r\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n * Usage:\r\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n *\r\n */\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n if (beziers[str]) {\n return beziers[str];\n }\n\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n var float32ArraySupported = typeof Float32Array === 'function';\n\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n\n function C(aA1) {\n return 3.0 * aA1;\n } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n\n return aGuessT;\n }\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n */\n\n\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n this.get = this.get.bind(this);\n }\n\n BezierEasing.prototype = {\n get: function get(x) {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n if (!this._precomputed) this._precompute();\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n _precompute: function _precompute() {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n this._precomputed = true;\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n this._calcSampleValues();\n }\n },\n _calcSampleValues: function _calcSampleValues() {\n var mX1 = this._p[0],\n mX2 = this._p[2];\n\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n\n /**\r\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n */\n _getTForX: function _getTForX(aX) {\n var mX1 = this._p[0],\n mX2 = this._p[2],\n mSampleValues = this._mSampleValues;\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample; // Interpolate to provide an initial guess for t\n\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n }\n\n if (initialSlope === 0.0) {\n return guessForT;\n }\n\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n };\n return ob;\n }();\n\n var pooling = function () {\n function _double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n\n return {\n \"double\": _double\n };\n }();\n\n var poolFactory = function () {\n return function (initialLength, _create, _release) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n var ob = {\n newElement: newElement,\n release: release\n };\n\n function newElement() {\n var element;\n\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n\n return element;\n }\n\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n if (_release) {\n _release(element);\n }\n\n pool[_length] = element;\n _length += 1;\n }\n\n return ob;\n };\n }();\n\n var bezierLengthPool = function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', getDefaultCurveSegments()),\n lengths: createTypedArray('float32', getDefaultCurveSegments())\n };\n }\n\n return poolFactory(8, create);\n }();\n\n var segmentsLengthPool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n\n function release(element) {\n var i;\n var len = element.lengths.length;\n\n for (i = 0; i < len; i += 1) {\n bezierLengthPool.release(element.lengths[i]);\n }\n\n element.lengths.length = 0;\n }\n\n return poolFactory(8, create, release);\n }();\n\n function bezFunction() {\n var math = Math;\n\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n return det1 > -0.001 && det1 < 0.001;\n }\n\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n var diffDist;\n\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n\n return diffDist > -0.0001 && diffDist < 0.0001;\n }\n\n var getBezierLength = function () {\n return function (pt1, pt2, pt3, pt4) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point = [];\n var lastPoint = [];\n var lengthData = bezierLengthPool.newElement();\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint[i] !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n\n lastPoint[i] = point[i];\n }\n\n if (ptDistance) {\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n }\n\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }();\n\n function getSegmentsLength(shapeData) {\n var segmentsLength = segmentsLengthPool.newElement();\n var closed = shapeData.c;\n var pathV = shapeData.v;\n var pathO = shapeData.o;\n var pathI = shapeData.i;\n var i;\n var len = shapeData._length;\n var lengths = segmentsLength.lengths;\n var totalLength = 0;\n\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n\n if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n\n var buildBezierData = function () {\n var storedData = {};\n return function (pt1, pt2, pt3, pt4) {\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n if (!storedData[bezierName]) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point;\n var lastPoint = null;\n\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n }\n\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n\n return storedData[bezierName];\n };\n }();\n\n function getDistancePerc(perc, bezierData) {\n var percents = bezierData.percents;\n var lengths = bezierData.lengths;\n var len = percents.length;\n var initPos = bmFloor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n }\n\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n\n while (flag) {\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n flag = false;\n } else {\n initPos += dir;\n }\n\n if (initPos < 0 || initPos >= len - 1) {\n // FIX for TypedArrays that don't store floating point values with enough accuracy\n if (initPos === len - 1) {\n return percents[initPos];\n }\n\n flag = false;\n }\n }\n\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n }\n\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u1 = 1 - t1;\n var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n return [ptX, ptY];\n }\n\n var bezierSegmentPoints = createTypedArray('float32', 8);\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n if (startPerc < 0) {\n startPerc = 0;\n } else if (startPerc > 1) {\n startPerc = 1;\n }\n\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i;\n var len = pt1.length;\n var u0 = 1 - t0;\n var u1 = 1 - t1;\n var u0u0u0 = u0 * u0 * u0;\n var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0t0 = t0 * t0 * t0; //\n\n var u0u0u1 = u0 * u0 * u1;\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0t1 = t0 * t0 * t1; //\n\n var u0u1u1 = u0 * u1 * u1;\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1t1 = t0 * t1 * t1; //\n\n var u1u1u1 = u1 * u1 * u1;\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1t1 = t1 * t1 * t1;\n\n for (i = 0; i < len; i += 1) {\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n }\n\n return bezierSegmentPoints;\n }\n\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D\n };\n }\n\n var bez = bezFunction();\n\n var initFrame = initialDefaultFrame;\n var mathAbs = Math.abs;\n\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\n }\n\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n\n iterationIndex = 0;\n break;\n }\n\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n var k;\n var kLen;\n var perc;\n var jLen;\n var j;\n var fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n\n if (keyData.to) {\n if (!keyframeMetadata.bezierData) {\n keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n\n var bezierData = keyframeMetadata.bezierData;\n\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n } // caching._lastKeyframeIndex = -1;\n\n } else {\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n var distanceInLine = bezierData.segmentLength * perc;\n var segmentPerc;\n var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n\n break;\n }\n\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX;\n var outY;\n var inX;\n var inY;\n var keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n\n if (this.sh && keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n newValue[0] = endValue[0];\n newValue[1] = endValue[1];\n newValue[2] = endValue[2];\n } else if (frameNum <= keyTime) {\n newValue[0] = keyData.s[0];\n newValue[1] = keyData.s[1];\n newValue[2] = keyData.s[2];\n } else {\n var quatStart = createQuaternion(keyData.s);\n var quatEnd = createQuaternion(endValue);\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n }\n } else {\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n perc = 1;\n } else if (frameNum < keyTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyframeMetadata.__fnct) {\n keyframeMetadata.__fnct = [];\n }\n\n if (!keyframeMetadata.__fnct[i]) {\n outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyframeMetadata.__fnct[i] = fnc;\n } else {\n fnc = keyframeMetadata.__fnct[i];\n }\n } else if (!keyframeMetadata.__fnct) {\n outX = keyData.o.x;\n outY = keyData.o.y;\n inX = keyData.i.x;\n inY = keyData.i.y;\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.keyframeMetadata = fnc;\n } else {\n fnc = keyframeMetadata.__fnct;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\n }\n\n endValue = nextKeyData.s || keyData.e;\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n\n caching.lastIndex = iterationIndex;\n return newValue;\n } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n var bx = b[0];\n var by = b[1];\n var bz = b[2];\n var bw = b[3];\n var omega;\n var cosom;\n var sinom;\n var scale0;\n var scale1;\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n if (1.0 - cosom > 0.000001) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n }\n\n function quaternionToEuler(out, quat) {\n var qx = quat[0];\n var qy = quat[1];\n var qz = quat[2];\n var qw = quat[3];\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n out[0] = heading / degToRads;\n out[1] = attitude / degToRads;\n out[2] = bank / degToRads;\n }\n\n function createQuaternion(values) {\n var heading = values[0] * degToRads;\n var attitude = values[1] * degToRads;\n var bank = values[2] * degToRads;\n var c1 = Math.cos(heading / 2);\n var c2 = Math.cos(attitude / 2);\n var c3 = Math.cos(bank / 2);\n var s1 = Math.sin(heading / 2);\n var s2 = Math.sin(attitude / 2);\n var s3 = Math.sin(bank / 2);\n var w = c1 * c2 * c3 - s1 * s2 * s3;\n var x = s1 * s2 * c3 + c1 * c2 * s3;\n var y = s1 * c2 * c3 + c1 * s2 * s3;\n var z = c1 * s2 * c3 - s1 * c2 * s3;\n return [x, y, z, w];\n }\n\n function getValueAtCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n if (this._caching.lastFrame >= frameNum) {\n this._caching._lastKeyframeIndex = -1;\n this._caching.lastIndex = 0;\n }\n\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function setVValue(val) {\n var multipliedValue;\n\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\n\n if (mathAbs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0;\n var len = this.v.length;\n\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n\n i += 1;\n }\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n function ValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.mult = mult || 1;\n this.data = data;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.effectsSequence = [];\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function MultiDimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n this.mult = mult || 1;\n this.data = data;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n var i;\n var len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n this.vel = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n this.v[i] = data.k[i] * this.mult;\n this.pv[i] = data.k[i];\n }\n\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: 0,\n _lastKeyframeIndex: -1\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.v = initFrame;\n this.pv = initFrame;\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.addEffect = addEffect;\n }\n\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n var i;\n var len = data.k.length;\n var s;\n var e;\n var to;\n var ti;\n\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n s = data.k[i].s;\n e = data.k[i + 1].s;\n to = data.k[i].to;\n ti = data.k[i].ti;\n\n if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n }\n\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.data = data;\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this._isFirstFrame = true;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n var arrLen = data.k[0].s.length;\n this.v = createTypedArray('float32', arrLen);\n this.pv = createTypedArray('float32', arrLen);\n\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: createTypedArray('float32', arrLen)\n };\n this.addEffect = addEffect;\n }\n\n var PropertyFactory = function () {\n function getProp(elem, data, type, mult, container) {\n if (data.sid) {\n data = elem.globalData.slotManager.getProp(data);\n }\n\n var p;\n\n if (!data.k.length) {\n p = new ValueProperty(elem, data, mult, container);\n } else if (typeof data.k[0] === 'number') {\n p = new MultiDimensionalProperty(elem, data, mult, container);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult, container);\n break;\n\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n\n default:\n break;\n }\n }\n\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n\n return p;\n }\n\n var ob = {\n getProp: getProp\n };\n return ob;\n }();\n\n function DynamicPropertyContainer() {}\n\n DynamicPropertyContainer.prototype = {\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n this.container.addDynamicProperty(this);\n this._isAnimated = true;\n }\n },\n iterateDynamicProperties: function iterateDynamicProperties() {\n this._mdf = false;\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n }\n };\n\n var pointPool = function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n\n return poolFactory(8, create);\n }();\n\n function ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = createSizedArray(this._maxLength);\n this.o = createSizedArray(this._maxLength);\n this.i = createSizedArray(this._maxLength);\n }\n\n ShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n\n while (i < len) {\n this.v[i] = pointPool.newElement();\n this.o[i] = pointPool.newElement();\n this.i[i] = pointPool.newElement();\n i += 1;\n }\n };\n\n ShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n\n this._length = len;\n };\n\n ShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(createSizedArray(this._maxLength));\n this.i = this.i.concat(createSizedArray(this._maxLength));\n this.o = this.o.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n };\n\n ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n\n case 'i':\n arr = this.i;\n break;\n\n case 'o':\n arr = this.o;\n break;\n\n default:\n arr = [];\n break;\n }\n\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = pointPool.newElement();\n }\n\n arr[pos][0] = x;\n arr[pos][1] = y;\n };\n\n ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, 'v', pos, replace);\n this.setXYAt(oX, oY, 'o', pos, replace);\n this.setXYAt(iX, iY, 'i', pos, replace);\n };\n\n ShapePath.prototype.reverse = function () {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v;\n var outPoints = this.o;\n var inPoints = this.i;\n var init = 0;\n\n if (this.c) {\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n init = 1;\n }\n\n var cnt = this._length - 1;\n var len = this._length;\n var i;\n\n for (i = init; i < len; i += 1) {\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n cnt -= 1;\n }\n\n return newPath;\n };\n\n ShapePath.prototype.length = function () {\n return this._length;\n };\n\n var shapePool = function () {\n function create() {\n return new ShapePath();\n }\n\n function release(shapePath) {\n var len = shapePath._length;\n var i;\n\n for (i = 0; i < len; i += 1) {\n pointPool.release(shapePath.v[i]);\n pointPool.release(shapePath.i[i]);\n pointPool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n\n shapePath._length = 0;\n shapePath.c = false;\n }\n\n function clone(shape) {\n var cloned = factory.newElement();\n var i;\n var len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n\n for (i = 0; i < len; i += 1) {\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n }\n\n return cloned;\n }\n\n var factory = poolFactory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n\n function ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n }\n\n ShapeCollection.prototype.addShape = function (shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n }\n\n this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n\n ShapeCollection.prototype.releaseShapes = function () {\n var i;\n\n for (i = 0; i < this._length; i += 1) {\n shapePool.release(this.shapes[i]);\n }\n\n this._length = 0;\n };\n\n var shapeCollectionPool = function () {\n var ob = {\n newShapeCollection: newShapeCollection,\n release: release\n };\n var _length = 0;\n var _maxLength = 4;\n var pool = createSizedArray(_maxLength);\n\n function newShapeCollection() {\n var shapeCollection;\n\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n\n return shapeCollection;\n }\n\n function release(shapeCollection) {\n var i;\n var len = shapeCollection._length;\n\n for (i = 0; i < len; i += 1) {\n shapePool.release(shapeCollection.shapes[i]);\n }\n\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n }();\n\n var ShapePropertyFactory = function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS;\n var keyPropE;\n var isHold;\n var j;\n var k;\n var jLen;\n var kLen;\n var perc;\n var vertexValue;\n var kf = this.keyframes;\n\n if (frameNum < kf[0].t - this.offsetTime) {\n keyPropS = kf[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n /* if(kf[kf.length - 1].s){\r\n keyPropS = kf[kf.length - 1].s[0];\r\n }else{\r\n keyPropS = kf[kf.length - 2].e[0];\r\n } */\n\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n isHold = keyData.h === 1;\n iterationIndex = i;\n\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n }\n\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n\n keyPropS = keyData.s[0];\n }\n\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n previousValue.i[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n previousValue.o[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n previousValue.v[j][k] = vertexValue;\n }\n }\n }\n\n function interpolateShapeCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n var lastFrame = this._caching.lastFrame;\n\n if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n /// /\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n this.interpolateShape(frameNum, this.pv, this._caching); /// /\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n\n var i;\n var len = shape1._length;\n\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n\n return true;\n }\n\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shapePool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var finalValue;\n\n if (this.kf) {\n finalValue = this.pv;\n } else if (this.data.ks) {\n finalValue = this.data.ks.k;\n } else {\n finalValue = this.data.pt.k;\n }\n\n var i;\n var len = this.effectsSequence.length;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function ShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.container = elem;\n this.elem = elem;\n this.data = data;\n this.k = false;\n this.kf = false;\n this._mdf = false;\n var pathData = type === 3 ? data.pt.k : data.ks.k;\n this.v = shapePool.clone(pathData);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n this.effectsSequence = [];\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n\n function KeyframedShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.elem = elem;\n this.container = elem;\n this.offsetTime = elem.data.st;\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n this.keyframesMetadata = [];\n this.k = true;\n this.kf = true;\n var len = this.keyframes[0].s[0].i.length;\n this.v = shapePool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.lastFrame = initFrame;\n this.reset = resetShape;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0\n };\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n }\n\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n var EllShapeProperty = function () {\n var cPoint = roundCorner;\n\n function EllShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.localShapeCollection.addShape(this.v);\n this.d = data.d;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n\n EllShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: function convertEllToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var s0 = this.s.v[0] / 2;\n var s1 = this.s.v[1] / 2;\n\n var _cw = this.d !== 3;\n\n var _v = this.v;\n _v.v[0][0] = p0;\n _v.v[0][1] = p1 - s1;\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.v[1][1] = p1;\n _v.v[2][0] = p0;\n _v.v[2][1] = p1 + s1;\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.v[3][1] = p1;\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.i[0][1] = p1 - s1;\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.i[1][1] = p1 - s1 * cPoint;\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.i[2][1] = p1 + s1;\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.i[3][1] = p1 + s1 * cPoint;\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.o[0][1] = p1 - s1;\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.o[1][1] = p1 + s1 * cPoint;\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.o[2][1] = p1 + s1;\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.o[3][1] = p1 - s1 * cPoint;\n }\n };\n extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n return EllShapePropertyFactory;\n }();\n\n var StarShapeProperty = function () {\n function StarShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 0);\n this.elem = elem;\n this.comp = elem.comp;\n this.data = data;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n this.convertToPath = this.convertStarToPath;\n } else {\n this.convertToPath = this.convertPolygonToPath;\n }\n\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n\n StarShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertToPath();\n }\n },\n convertStarToPath: function convertStarToPath() {\n var numPts = Math.floor(this.pt.v) * 2;\n var angle = Math.PI * 2 / numPts;\n /* this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts; */\n\n var longFlag = true;\n var longRad = this.or.v;\n var shortRad = this.ir.v;\n var longRound = this.os.v;\n var shortRound = this.is.v;\n var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n var i;\n var rad;\n var roundness;\n var perimSegment;\n var currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n /* this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n this.v._length = numPts; */\n\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n convertPolygonToPath: function convertPolygonToPath() {\n var numPts = Math.floor(this.pt.v);\n var angle = Math.PI * 2 / numPts;\n var rad = this.or.v;\n var roundness = this.os.v;\n var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n var i;\n var currentAng = -Math.PI * 0.5;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n currentAng += angle * dir;\n }\n\n this.paths.length = 0;\n this.paths[0] = this.v;\n }\n };\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n return StarShapePropertyFactory;\n }();\n\n var RectShapeProperty = function () {\n function RectShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n\n RectShapePropertyFactory.prototype = {\n convertRectToPath: function convertRectToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var v0 = this.s.v[0] / 2;\n var v1 = this.s.v[1] / 2;\n var round = bmMin(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n },\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape\n };\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n return RectShapePropertyFactory;\n }();\n\n function getShapeProp(elem, data, type) {\n var prop;\n\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n\n if (keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n }\n\n function getConstructorFunction() {\n return ShapeProperty;\n }\n\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n\n /*!\r\n Transformation Matrix v2.0\r\n (c) Epistemex 2014-2015\r\n www.epistemex.com\r\n By Ken Fyrstenberg\r\n Contributions by leeoniya.\r\n License: MIT, header required.\r\n */\n\n /**\r\n * 2D transformation matrix object initialized with identity matrix.\r\n *\r\n * The matrix can synchronize a canvas context by supplying the context\r\n * as an argument, or later apply current absolute transform to an\r\n * existing context.\r\n *\r\n * All values are handled as floating point values.\r\n *\r\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n * @prop {number} a - scale x\r\n * @prop {number} b - shear y\r\n * @prop {number} c - shear x\r\n * @prop {number} d - scale y\r\n * @prop {number} e - translate x\r\n * @prop {number} f - translate y\r\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n * @constructor\r\n */\n\n var Matrix = function () {\n var _cos = Math.cos;\n var _sin = Math.sin;\n var _tan = Math.tan;\n var _rnd = Math.round;\n\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n }\n\n function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n\n function translate(tx, ty, tz) {\n tz = tz || 0;\n\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n\n return this;\n }\n\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\n\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n // NOTE: commenting this condition because TurboFan deoptimizes code when present\n // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n _p[12] = _p[12] * a2 + _p[15] * m2;\n _p[13] = _p[13] * f2 + _p[15] * n2;\n _p[14] = _p[14] * k2 + _p[15] * o2;\n _p[15] *= p2; // }\n\n this._identityCalculated = false;\n return this;\n }\n\n var a1 = _p[0];\n var b1 = _p[1];\n var c1 = _p[2];\n var d1 = _p[3];\n var e1 = _p[4];\n var f1 = _p[5];\n var g1 = _p[6];\n var h1 = _p[7];\n var i1 = _p[8];\n var j1 = _p[9];\n var k1 = _p[10];\n var l1 = _p[11];\n var m1 = _p[12];\n var n1 = _p[13];\n var o1 = _p[14];\n var p1 = _p[15];\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\n\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n this._identityCalculated = false;\n return this;\n }\n\n function multiply(matrix) {\n var matrixProps = matrix.props;\n return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]);\n }\n\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n\n return this._identity;\n }\n\n function equals(matr) {\n var i = 0;\n\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n }\n\n function clone(matr) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n\n return matr;\n }\n\n function cloneFromProps(props) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n };\n /* return {\r\n x: x * me.a + y * me.c + me.e,\r\n y: x * me.b + y * me.d + me.f\r\n }; */\n }\n\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n\n function getInverseMatrix() {\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n var a = this.props[5] / determinant;\n var b = -this.props[1] / determinant;\n var c = -this.props[4] / determinant;\n var d = this.props[0] / determinant;\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n var inverseMatrix = new Matrix();\n inverseMatrix.props[0] = a;\n inverseMatrix.props[1] = b;\n inverseMatrix.props[4] = c;\n inverseMatrix.props[5] = d;\n inverseMatrix.props[12] = e;\n inverseMatrix.props[13] = f;\n return inverseMatrix;\n }\n\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n\n function inversePoints(pts) {\n var i;\n var len = pts.length;\n var retPts = [];\n\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n\n return retPts;\n }\n\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\n\n if (this.isIdentity()) {\n arr[0] = pt1[0];\n arr[1] = pt1[1];\n arr[2] = pt2[0];\n arr[3] = pt2[1];\n arr[4] = pt3[0];\n arr[5] = pt3[1];\n } else {\n var p0 = this.props[0];\n var p1 = this.props[1];\n var p4 = this.props[4];\n var p5 = this.props[5];\n var p12 = this.props[12];\n var p13 = this.props[13];\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n }\n\n return arr;\n }\n\n function applyToPointArray(x, y, z) {\n var arr;\n\n if (this.isIdentity()) {\n arr = [x, y, z];\n } else {\n arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n }\n\n return arr;\n }\n\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\n\n var _p = this.props;\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n }\n\n function toCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var i = 0;\n var props = this.props;\n var cssValue = 'matrix3d(';\n var v = 10000;\n\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n\n return cssValue;\n }\n\n function roundMatrixProperty(val) {\n var v = 10000;\n\n if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n return _rnd(val * v) / v;\n }\n\n return val;\n }\n\n function to2dCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var props = this.props;\n\n var _a = roundMatrixProperty(props[0]);\n\n var _b = roundMatrixProperty(props[1]);\n\n var _c = roundMatrixProperty(props[4]);\n\n var _d = roundMatrixProperty(props[5]);\n\n var _e = roundMatrixProperty(props[12]);\n\n var _f = roundMatrixProperty(props[13]);\n\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n }\n\n return function () {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.multiply = multiply;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.applyToTriplePoints = applyToTriplePoints;\n this.applyToPointStringified = applyToPointStringified;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.equals = equals;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this.getInverseMatrix = getInverseMatrix;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n this.props = createTypedArray('float32', 16);\n this.reset();\n };\n }();\n\n function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n var lottie = {};\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\n\n function setLocation(href) {\n setLocationHref(href);\n }\n\n function searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n }\n\n function setSubframeRendering(flag) {\n setSubframeEnabled(flag);\n }\n\n function setPrefix(prefix) {\n setIdPrefix(prefix);\n }\n\n function loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n\n return animationManager.loadAnimation(params);\n }\n\n function setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n setDefaultCurveSegments(200);\n break;\n\n default:\n case 'medium':\n setDefaultCurveSegments(50);\n break;\n\n case 'low':\n setDefaultCurveSegments(10);\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n setDefaultCurveSegments(value);\n }\n\n if (getDefaultCurveSegments() >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n }\n\n function inBrowser() {\n return typeof navigator !== 'undefined';\n }\n\n function installPlugin(type, plugin) {\n if (type === 'expressions') {\n setExpressionsPlugin(plugin);\n }\n }\n\n function getFactory(name) {\n switch (name) {\n case 'propertyFactory':\n return PropertyFactory;\n\n case 'shapePropertyFactory':\n return ShapePropertyFactory;\n\n case 'matrix':\n return Matrix;\n\n default:\n return null;\n }\n }\n\n lottie.play = animationManager.play;\n lottie.pause = animationManager.pause;\n lottie.setLocationHref = setLocation;\n lottie.togglePause = animationManager.togglePause;\n lottie.setSpeed = animationManager.setSpeed;\n lottie.setDirection = animationManager.setDirection;\n lottie.stop = animationManager.stop;\n lottie.searchAnimations = searchAnimations;\n lottie.registerAnimation = animationManager.registerAnimation;\n lottie.loadAnimation = loadAnimation;\n lottie.setSubframeRendering = setSubframeRendering;\n lottie.resize = animationManager.resize; // lottie.start = start;\n\n lottie.goToAndStop = animationManager.goToAndStop;\n lottie.destroy = animationManager.destroy;\n lottie.setQuality = setQuality;\n lottie.inBrowser = inBrowser;\n lottie.installPlugin = installPlugin;\n lottie.freeze = animationManager.freeze;\n lottie.unfreeze = animationManager.unfreeze;\n lottie.setVolume = animationManager.setVolume;\n lottie.mute = animationManager.mute;\n lottie.unmute = animationManager.unmute;\n lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n lottie.useWebWorker = setWebWorker;\n lottie.setIDPrefix = setPrefix;\n lottie.__getFactory = getFactory;\n lottie.version = '5.12.2';\n\n function checkReady() {\n if (document.readyState === 'complete') {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n\n function getQueryVariable(variable) {\n var vars = queryString.split('&');\n\n for (var i = 0; i < vars.length; i += 1) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) == variable) {\n // eslint-disable-line eqeqeq\n return decodeURIComponent(pair[1]);\n }\n }\n\n return null;\n }\n\n var queryString = '';\n\n if (standalone) {\n var scripts = document.getElementsByTagName('script');\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: ''\n };\n queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n renderer = getQueryVariable('renderer');\n }\n\n var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n try {\n if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n ) {\n window.bodymovin = lottie;\n }\n } catch (err) {//\n }\n\n var ShapeModifiers = function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n\n return ob;\n }();\n\n function ShapeModifier() {}\n\n ShapeModifier.prototype.initModifierProperties = function () {};\n\n ShapeModifier.prototype.addShapeToModifier = function () {};\n\n ShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n data.sh.container.addDynamicProperty(data.sh);\n var shapeData = {\n shape: data.sh,\n data: data,\n localShapeCollection: shapeCollectionPool.newShapeCollection()\n };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n\n if (this._isAnimated) {\n data.setAsAnimated();\n }\n }\n };\n\n ShapeModifier.prototype.init = function (elem, data) {\n this.shapes = [];\n this.elem = elem;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, data);\n this.frameId = initialDefaultFrame;\n this.closed = false;\n this.k = false;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n ShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n function TrimModifier() {}\n\n extendPrototype([ShapeModifier], TrimModifier);\n\n TrimModifier.prototype.initModifierProperties = function (elem, data) {\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n this.sValue = 0;\n this.eValue = 0;\n this.getValue = this.processKeys;\n this.m = data.m;\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n };\n\n TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n };\n\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n\n if (e <= 1) {\n segments.push({\n s: s,\n e: e\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1\n });\n } else {\n segments.push({\n s: s,\n e: 1\n });\n segments.push({\n s: 0,\n e: e - 1\n });\n }\n\n var shapeSegments = [];\n var i;\n var len = segments.length;\n var segmentOb;\n\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n var shapeS;\n var shapeE;\n\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n\n return shapeSegments;\n };\n\n TrimModifier.prototype.releasePathsData = function (pathsData) {\n var i;\n var len = pathsData.length;\n\n for (i = 0; i < len; i += 1) {\n segmentsLengthPool.release(pathsData[i]);\n }\n\n pathsData.length = 0;\n return pathsData;\n };\n\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s;\n var e;\n\n if (this._mdf || _isFirstFrame) {\n var o = this.o.v % 360 / 360;\n\n if (o < 0) {\n o += 1;\n }\n\n if (this.s.v > 1) {\n s = 1 + o;\n } else if (this.s.v < 0) {\n s = 0 + o;\n } else {\n s = this.s.v + o;\n }\n\n if (this.e.v > 1) {\n e = 1 + o;\n } else if (this.e.v < 0) {\n e = 0 + o;\n } else {\n e = this.e.v + o;\n }\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n s = Math.round(s * 10000) * 0.0001;\n e = Math.round(e * 10000) * 0.0001;\n this.sValue = s;\n this.eValue = e;\n } else {\n s = this.sValue;\n e = this.eValue;\n }\n\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var pathsData;\n var pathData;\n var totalShapeLength;\n var totalModifierLength = 0;\n\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape._mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n if (this._mdf) {\n this.shapes[i].pathsData.length = 0;\n }\n }\n } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n var segments = [];\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\n\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n\n var shapeS = s;\n var shapeE = e;\n var addedLength = 0;\n var edges;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n if (this.m === 2 && len > 1) {\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n\n jLen = edges.length;\n\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n }\n\n var newShapesData = this.addShapes(shapeData, segments[0]);\n\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n if (lastShapeInCollection.c) {\n var lastShape = newShapesData.pop();\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n } else {\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1]);\n }\n }\n\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n // Don't remove this even if it's losing cached info.\n this.shapes[i].pathsData.length = 0;\n this.shapes[i].shape._mdf = true;\n }\n }\n };\n\n TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i;\n var len = newPaths.length;\n\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n };\n\n TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n shapePath.setXYAt(points[1], points[5], 'o', pos);\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i;\n var len = shapeData.shape.paths._length;\n var j;\n var jLen;\n var addedLength = 0;\n var currentLengthData;\n var segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n\n if (!shapePath) {\n shapePath = shapePool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n\n shapes.push(shapePath);\n\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n }\n\n if (addedLength > shapeSegment.e) {\n break;\n }\n\n if (i < len - 1) {\n shapePath = shapePool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n\n return shapes;\n };\n\n function PuckerAndBloatModifier() {}\n\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this._isAnimated = !!this.amount.effectsSequence.length;\n };\n\n PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length;\n var i = 0;\n\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < pathLength; i += 1) {\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n\n return clonedPath;\n };\n\n PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n var TransformPropertyFactory = function () {\n var defaultVector = [0, 0];\n\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n\n this.iterateDynamicProperties();\n\n if (this._mdf || forceRender) {\n var frameRate;\n this.v.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n this.v.rotate(-this.r.v);\n } else if (!this.r && this.appliedTransformations < 4) {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.autoOriented) {\n var v1;\n var v2;\n frameRate = this.elem.globalData.frameRate;\n\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n }\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n v1 = [];\n v2 = [];\n var px = this.px;\n var py = this.py;\n\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n } else {\n v1 = [px.pv, py.pv];\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n }\n } else {\n v2 = defaultVector;\n v1 = v2;\n }\n\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n\n if (this.data.p && this.data.p.s) {\n if (this.data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n this.frameId = this.elem.globalData.frameId;\n }\n\n function precalculateMatrix() {\n this.appliedTransformations = 0;\n this.pre.reset();\n\n if (!this.a.effectsSequence.length) {\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n this.appliedTransformations = 1;\n } else {\n return;\n }\n\n if (!this.s.effectsSequence.length) {\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n this.appliedTransformations = 2;\n } else {\n return;\n }\n\n if (this.sk) {\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n this.appliedTransformations = 3;\n } else {\n return;\n }\n }\n\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\n }\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n this.appliedTransformations = 4;\n }\n }\n\n function autoOrient() {//\n // var prevP = this.getValueAtTime();\n }\n\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\n\n function TransformProperty(elem, data, container) {\n this.elem = elem;\n this.frameId = -1;\n this.propType = 'transform';\n this.data = data;\n this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n\n if (data.p && data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p || {\n k: [0, 0, 0]\n }, 1, 0, this);\n }\n\n if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n if (data.or.k[0].ti) {\n var i;\n var len = data.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = null;\n data.or.k[i].ti = null;\n }\n }\n\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || {\n k: 0\n }, 0, degToRads, this);\n }\n\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n }\n\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: [0, 0, 0]\n }, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: [100, 100, 100]\n }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n } else {\n this.o = {\n _mdf: false,\n v: 1\n };\n }\n\n this._isDirty = true;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n }\n\n TransformProperty.prototype = {\n applyToMatrix: applyToMatrix,\n getValue: processKeys,\n precalculateMatrix: precalculateMatrix,\n autoOrient: autoOrient\n };\n extendPrototype([DynamicPropertyContainer], TransformProperty);\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n\n return {\n getTransformProperty: getTransformProperty\n };\n }();\n\n function RepeaterModifier() {}\n\n extendPrototype([ShapeModifier], RepeaterModifier);\n\n RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n this.data = data;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n\n this._isAnimated = !!this.dynamicProperties.length;\n this.pMatrix = new Matrix();\n this.rMatrix = new Matrix();\n this.sMatrix = new Matrix();\n this.tMatrix = new Matrix();\n this.matrix = new Matrix();\n };\n\n RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n };\n\n RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n this.elem = elem;\n this.arr = arr;\n this.pos = pos;\n this.elemsData = elemsData;\n this._currentCopies = 0;\n this._elements = [];\n this._groups = [];\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, arr[pos]);\n\n while (pos > 0) {\n pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n this._elements.unshift(arr[pos]);\n }\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n RepeaterModifier.prototype.resetElements = function (elements) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\n }\n }\n };\n\n RepeaterModifier.prototype.cloneElements = function (elements) {\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n };\n\n RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n };\n\n RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n var items;\n var itemsTransform;\n var i;\n var dir;\n var cont;\n var hasReloaded = false;\n\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\n\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: 'gr'\n };\n group.it.push({\n a: {\n a: 0,\n ix: 1,\n k: [0, 0]\n },\n nm: 'Transform',\n o: {\n a: 0,\n ix: 7,\n k: 100\n },\n p: {\n a: 0,\n ix: 2,\n k: [0, 0]\n },\n r: {\n a: 1,\n ix: 6,\n k: [{\n s: 0,\n e: 0,\n t: 0\n }, {\n s: 0,\n e: 0,\n t: 1\n }]\n },\n s: {\n a: 0,\n ix: 3,\n k: [100, 100]\n },\n sa: {\n a: 0,\n ix: 5,\n k: 0\n },\n sk: {\n a: 0,\n ix: 4,\n k: 0\n },\n ty: 'tr'\n });\n this.arr.splice(0, 0, group);\n\n this._groups.splice(0, 0, group);\n\n this._currentCopies += 1;\n }\n\n this.elem.reloadShapes();\n hasReloaded = true;\n }\n\n cont = 0;\n var renderFlag;\n\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n\n if (!renderFlag) {\n var elems = this.elemsData[i].it;\n var transformData = elems[elems.length - 1];\n\n if (transformData.transform.op.v !== 0) {\n transformData.transform.op._mdf = true;\n transformData.transform.op.v = 0;\n } else {\n transformData.transform.op._mdf = false;\n }\n }\n\n cont += 1;\n }\n\n this._currentCopies = copies; /// /\n\n var offset = this.o.v;\n var offsetModulo = offset % 1;\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n var pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j;\n var jLen;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n jLen = itemsTransform.length;\n items[items.length - 1].transform.mProps._mdf = true;\n items[items.length - 1].transform.op._mdf = true;\n items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n if (iteration !== 0) {\n if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n\n this.matrix.reset();\n } else {\n this.matrix.reset();\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n items[items.length - 1].transform.mProps._mdf = false;\n items[items.length - 1].transform.op._mdf = false;\n cont -= 1;\n i += dir;\n }\n }\n\n return hasReloaded;\n };\n\n RepeaterModifier.prototype.addShape = function () {};\n\n function RoundCornersModifier() {}\n\n extendPrototype([ShapeModifier], RoundCornersModifier);\n\n RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this._isAnimated = !!this.rd.effectsSequence.length;\n };\n\n RoundCornersModifier.prototype.processPath = function (path, round) {\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var i;\n var len = path._length;\n var currentV;\n var currentI;\n var currentO;\n var closerV;\n var distance;\n var newPosPerc;\n var index = 0;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /* clonedPath.v[index] = currentV;\r\n clonedPath.o[index] = currentO;\r\n clonedPath.i[index] = currentI; */\n\n index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = iX;\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n vY = iY;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = oX;\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n vY = oY;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n index += 1;\n }\n }\n\n return clonedPath;\n };\n\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function floatEqual(a, b) {\n return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));\n }\n\n function floatZero(f) {\n return Math.abs(f) <= 0.00001;\n }\n\n function lerp(p0, p1, amount) {\n return p0 * (1 - amount) + p1 * amount;\n }\n\n function lerpPoint(p0, p1, amount) {\n return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n }\n\n function quadRoots(a, b, c) {\n // no root\n if (a === 0) return [];\n var s = b * b - 4 * a * c; // Complex roots\n\n if (s < 0) return [];\n var singleRoot = -b / (2 * a); // 1 root\n\n if (s === 0) return [singleRoot];\n var delta = Math.sqrt(s) / (2 * a); // 2 roots\n\n return [singleRoot - delta, singleRoot + delta];\n }\n\n function polynomialCoefficients(p0, p1, p2, p3) {\n return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0];\n }\n\n function singlePoint(p) {\n return new PolynomialBezier(p, p, p, p, false);\n }\n\n function PolynomialBezier(p0, p1, p2, p3, linearize) {\n if (linearize && pointEqual(p0, p1)) {\n p1 = lerpPoint(p0, p3, 1 / 3);\n }\n\n if (linearize && pointEqual(p2, p3)) {\n p2 = lerpPoint(p0, p3, 2 / 3);\n }\n\n var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]);\n var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]);\n this.a = [coeffx[0], coeffy[0]];\n this.b = [coeffx[1], coeffy[1]];\n this.c = [coeffx[2], coeffy[2]];\n this.d = [coeffx[3], coeffy[3]];\n this.points = [p0, p1, p2, p3];\n }\n\n PolynomialBezier.prototype.point = function (t) {\n return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]];\n };\n\n PolynomialBezier.prototype.derivative = function (t) {\n return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]];\n };\n\n PolynomialBezier.prototype.tangentAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[1], p[0]);\n };\n\n PolynomialBezier.prototype.normalAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[0], p[1]);\n };\n\n PolynomialBezier.prototype.inflectionPoints = function () {\n var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1];\n if (floatZero(denom)) return [];\n var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom;\n var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom;\n if (square < 0) return [];\n var root = Math.sqrt(square);\n\n if (floatZero(root)) {\n if (root > 0 && root < 1) return [tcusp];\n return [];\n }\n\n return [tcusp - root, tcusp + root].filter(function (r) {\n return r > 0 && r < 1;\n });\n };\n\n PolynomialBezier.prototype.split = function (t) {\n if (t <= 0) return [singlePoint(this.points[0]), this];\n if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])];\n var p10 = lerpPoint(this.points[0], this.points[1], t);\n var p11 = lerpPoint(this.points[1], this.points[2], t);\n var p12 = lerpPoint(this.points[2], this.points[3], t);\n var p20 = lerpPoint(p10, p11, t);\n var p21 = lerpPoint(p11, p12, t);\n var p3 = lerpPoint(p20, p21, t);\n return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)];\n };\n\n function extrema(bez, comp) {\n var min = bez.points[0][comp];\n var max = bez.points[bez.points.length - 1][comp];\n\n if (min > max) {\n var e = max;\n max = min;\n min = e;\n } // Derivative roots to find min/max\n\n\n var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\n\n for (var i = 0; i < f.length; i += 1) {\n if (f[i] > 0 && f[i] < 1) {\n var val = bez.point(f[i])[comp];\n if (val < min) min = val;else if (val > max) max = val;\n }\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n PolynomialBezier.prototype.bounds = function () {\n return {\n x: extrema(this, 0),\n y: extrema(this, 1)\n };\n };\n\n PolynomialBezier.prototype.boundingBox = function () {\n var bounds = this.bounds();\n return {\n left: bounds.x.min,\n right: bounds.x.max,\n top: bounds.y.min,\n bottom: bounds.y.max,\n width: bounds.x.max - bounds.x.min,\n height: bounds.y.max - bounds.y.min,\n cx: (bounds.x.max + bounds.x.min) / 2,\n cy: (bounds.y.max + bounds.y.min) / 2\n };\n };\n\n function intersectData(bez, t1, t2) {\n var box = bez.boundingBox();\n return {\n cx: box.cx,\n cy: box.cy,\n width: box.width,\n height: box.height,\n bez: bez,\n t: (t1 + t2) / 2,\n t1: t1,\n t2: t2\n };\n }\n\n function splitData(data) {\n var split = data.bez.split(0.5);\n return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)];\n }\n\n function boxIntersect(b1, b2) {\n return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height;\n }\n\n function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n if (!boxIntersect(d1, d2)) return;\n\n if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) {\n intersections.push([d1.t, d2.t]);\n return;\n }\n\n var d1s = splitData(d1);\n var d2s = splitData(d2);\n intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n }\n\n PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) {\n if (tolerance === undefined) tolerance = 2;\n if (maxRecursion === undefined) maxRecursion = 7;\n var intersections = [];\n intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion);\n return intersections;\n };\n\n PolynomialBezier.shapeSegment = function (shapePath, index) {\n var nextIndex = (index + 1) % shapePath.length();\n return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true);\n };\n\n PolynomialBezier.shapeSegmentInverted = function (shapePath, index) {\n var nextIndex = (index + 1) % shapePath.length();\n return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true);\n };\n\n function crossProduct(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n }\n\n function lineIntersection(start1, end1, start2, end2) {\n var v1 = [start1[0], start1[1], 1];\n var v2 = [end1[0], end1[1], 1];\n var v3 = [start2[0], start2[1], 1];\n var v4 = [end2[0], end2[1], 1];\n var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4));\n if (floatZero(r[2])) return null;\n return [r[0] / r[2], r[1] / r[2]];\n }\n\n function polarOffset(p, angle, length) {\n return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n }\n\n function pointDistance(p1, p2) {\n return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n }\n\n function pointEqual(p1, p2) {\n return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n }\n\n function ZigZagModifier() {}\n\n extendPrototype([ShapeModifier], ZigZagModifier);\n\n ZigZagModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this);\n this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this);\n this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0;\n };\n\n function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) {\n var angO = angle - Math.PI / 2;\n var angI = angle + Math.PI / 2;\n var px = point[0] + Math.cos(angle) * direction * amplitude;\n var py = point[1] - Math.sin(angle) * direction * amplitude;\n outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length());\n }\n\n function getPerpendicularVector(pt1, pt2) {\n var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]];\n var rot = -Math.PI * 0.5;\n var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]];\n return rotatedVector;\n }\n\n function getProjectingAngle(path, cur) {\n var prevIndex = cur === 0 ? path.length() - 1 : cur - 1;\n var nextIndex = (cur + 1) % path.length();\n var prevPoint = path.v[prevIndex];\n var nextPoint = path.v[nextIndex];\n var pVector = getPerpendicularVector(prevPoint, nextPoint);\n return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]);\n }\n\n function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) {\n var angle = getProjectingAngle(path, cur);\n var point = path.v[cur % path._length];\n var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1];\n var nextPoint = path.v[(cur + 1) % path._length];\n var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0;\n var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0;\n setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType);\n }\n\n function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) {\n for (var i = 0; i < frequency; i += 1) {\n var t = (i + 1) / (frequency + 1);\n var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0;\n var angle = segment.normalAngle(t);\n var point = segment.point(t);\n setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType);\n direction = -direction;\n }\n\n return direction;\n }\n\n ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) {\n var count = path._length;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n\n if (!path.c) {\n count -= 1;\n }\n\n if (count === 0) return clonedPath;\n var direction = -1;\n var segment = PolynomialBezier.shapeSegment(path, 0);\n zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction);\n\n for (var i = 0; i < count; i += 1) {\n direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction);\n\n if (i === count - 1 && !path.c) {\n segment = null;\n } else {\n segment = PolynomialBezier.shapeSegment(path, (i + 1) % count);\n }\n\n zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction);\n }\n\n return clonedPath;\n };\n\n ZigZagModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amplitude = this.amplitude.v;\n var frequency = Math.max(0, Math.round(this.frequency.v));\n var pointType = this.pointsType.v;\n\n if (amplitude !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function linearOffset(p1, p2, amount) {\n var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]);\n return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)];\n }\n\n function offsetSegment(segment, amount) {\n var p0;\n var p1a;\n var p1b;\n var p2b;\n var p2a;\n var p3;\n var e;\n e = linearOffset(segment.points[0], segment.points[1], amount);\n p0 = e[0];\n p1a = e[1];\n e = linearOffset(segment.points[1], segment.points[2], amount);\n p1b = e[0];\n p2b = e[1];\n e = linearOffset(segment.points[2], segment.points[3], amount);\n p2a = e[0];\n p3 = e[1];\n var p1 = lineIntersection(p0, p1a, p1b, p2b);\n if (p1 === null) p1 = p1a;\n var p2 = lineIntersection(p2a, p3, p1b, p2b);\n if (p2 === null) p2 = p2a;\n return new PolynomialBezier(p0, p1, p2, p3);\n }\n\n function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) {\n var p0 = seg1.points[3];\n var p1 = seg2.points[0]; // Bevel\n\n if (lineJoin === 3) return p0; // Connected, they don't need a joint\n\n if (pointEqual(p0, p1)) return p0; // Round\n\n if (lineJoin === 2) {\n var angleOut = -seg1.tangentAngle(1);\n var angleIn = -seg2.tangentAngle(0) + Math.PI;\n var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100));\n var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2;\n var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner);\n outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1);\n tan = polarOffset(p1, angleIn, 2 * radius * roundCorner);\n outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length());\n return p1;\n } // Miter\n\n\n var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2];\n var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1];\n var intersection = lineIntersection(t0, p0, p1, t1);\n\n if (intersection && pointDistance(intersection, p0) < miterLimit) {\n outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length());\n return intersection;\n }\n\n return p0;\n }\n\n function getIntersection(a, b) {\n var intersect = a.intersections(b);\n if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift();\n if (intersect.length) return intersect[0];\n return null;\n }\n\n function pruneSegmentIntersection(a, b) {\n var outa = a.slice();\n var outb = b.slice();\n var intersect = getIntersection(a[a.length - 1], b[0]);\n\n if (intersect) {\n outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0];\n outb[0] = b[0].split(intersect[1])[1];\n }\n\n if (a.length > 1 && b.length > 1) {\n intersect = getIntersection(a[0], b[b.length - 1]);\n\n if (intersect) {\n return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]];\n }\n }\n\n return [outa, outb];\n }\n\n function pruneIntersections(segments) {\n var e;\n\n for (var i = 1; i < segments.length; i += 1) {\n e = pruneSegmentIntersection(segments[i - 1], segments[i]);\n segments[i - 1] = e[0];\n segments[i] = e[1];\n }\n\n if (segments.length > 1) {\n e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]);\n segments[segments.length - 1] = e[0];\n segments[0] = e[1];\n }\n\n return segments;\n }\n\n function offsetSegmentSplit(segment, amount) {\n /*\r\n We split each bezier segment into smaller pieces based\r\n on inflection points, this ensures the control point\r\n polygon is convex.\r\n (A cubic bezier can have none, one, or two inflection points)\r\n */\n var flex = segment.inflectionPoints();\n var left;\n var right;\n var split;\n var mid;\n\n if (flex.length === 0) {\n return [offsetSegment(segment, amount)];\n }\n\n if (flex.length === 1 || floatEqual(flex[1], 1)) {\n split = segment.split(flex[0]);\n left = split[0];\n right = split[1];\n return [offsetSegment(left, amount), offsetSegment(right, amount)];\n }\n\n split = segment.split(flex[0]);\n left = split[0];\n var t = (flex[1] - flex[0]) / (1 - flex[0]);\n split = split[1].split(t);\n mid = split[0];\n right = split[1];\n return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)];\n }\n\n function OffsetPathModifier() {}\n\n extendPrototype([ShapeModifier], OffsetPathModifier);\n\n OffsetPathModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this);\n this.lineJoin = data.lj;\n this._isAnimated = this.amount.effectsSequence.length !== 0;\n };\n\n OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) {\n var outputBezier = shapePool.newElement();\n outputBezier.c = inputBezier.c;\n var count = inputBezier.length();\n\n if (!inputBezier.c) {\n count -= 1;\n }\n\n var i;\n var j;\n var segment;\n var multiSegments = [];\n\n for (i = 0; i < count; i += 1) {\n segment = PolynomialBezier.shapeSegment(inputBezier, i);\n multiSegments.push(offsetSegmentSplit(segment, amount));\n }\n\n if (!inputBezier.c) {\n for (i = count - 1; i >= 0; i -= 1) {\n segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i);\n multiSegments.push(offsetSegmentSplit(segment, amount));\n }\n }\n\n multiSegments = pruneIntersections(multiSegments); // Add bezier segments to the output and apply line joints\n\n var lastPoint = null;\n var lastSeg = null;\n\n for (i = 0; i < multiSegments.length; i += 1) {\n var multiSegment = multiSegments[i];\n if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit);\n lastSeg = multiSegment[multiSegment.length - 1];\n\n for (j = 0; j < multiSegment.length; j += 1) {\n segment = multiSegment[j];\n\n if (lastPoint && pointEqual(segment.points[0], lastPoint)) {\n outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1);\n } else {\n outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length());\n }\n\n outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length());\n lastPoint = segment.points[3];\n }\n }\n\n if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit);\n return outputBezier;\n };\n\n OffsetPathModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n var miterLimit = this.miterLimit.v;\n var lineJoin = this.lineJoin;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function getFontProperties(fontData) {\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n var fWeight = 'normal';\n var fStyle = 'normal';\n var len = styles.length;\n var styleName;\n\n for (var i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n\n case 'bold':\n fWeight = '700';\n break;\n\n case 'black':\n fWeight = '900';\n break;\n\n case 'medium':\n fWeight = '500';\n break;\n\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n\n default:\n break;\n }\n }\n\n return {\n style: fStyle,\n weight: fontData.fWeight || fWeight\n };\n }\n\n var FontManager = function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: [],\n data: {\n shapes: []\n }\n };\n var combinedCharacters = []; // Hindi characters\n\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n var BLACK_FLAG_CODE_POINT = 127988;\n var CANCEL_TAG_CODE_POINT = 917631;\n var A_TAG_CODE_POINT = 917601;\n var Z_TAG_CODE_POINT = 917626;\n var VARIATION_SELECTOR_16_CODE_POINT = 65039;\n var ZERO_WIDTH_JOINER_CODE_POINT = 8205;\n var REGIONAL_CHARACTER_A_CODE_POINT = 127462;\n var REGIONAL_CHARACTER_Z_CODE_POINT = 127487;\n var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i;\n var len = familyArray.length;\n var enabledFamilies = [];\n\n for (i = 0; i < len; i += 1) {\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n enabledFamilies.push(familyArray[i]);\n }\n }\n\n return enabledFamilies.join(',');\n }\n\n function setUpNode(font, family) {\n var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n parentNode.setAttribute('aria-hidden', true);\n parentNode.style.fontFamily = family;\n var node = createTag('span'); // Characters that vary significantly among different fonts\n\n node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n parentNode.style.fontSize = '300px'; // Reset any font properties\n\n parentNode.style.fontVariant = 'normal';\n parentNode.style.fontStyle = 'normal';\n parentNode.style.fontWeight = 'normal';\n parentNode.style.letterSpacing = '0';\n parentNode.appendChild(node);\n document.body.appendChild(parentNode); // Remember width with no applied web font\n\n var width = node.offsetWidth;\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n return {\n node: node,\n w: width,\n parent: parentNode\n };\n }\n\n function checkLoadedFonts() {\n var i;\n var len = this.fonts.length;\n var node;\n var w;\n var loadedCount = len;\n\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].monoCase.node;\n w = this.fonts[i].monoCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].sansCase.node;\n w = this.fonts[i].sansCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\n }\n\n if (this.fonts[i].loaded) {\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n }\n }\n }\n\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n\n function createHelper(fontData, def) {\n var engine = document.body && def ? 'svg' : 'canvas';\n var helper;\n var fontProps = getFontProperties(fontData);\n\n if (engine === 'svg') {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n tHelper.setAttribute('font-family', fontData.fFamily);\n tHelper.setAttribute('font-style', fontProps.style);\n tHelper.setAttribute('font-weight', fontProps.weight);\n tHelper.textContent = '1';\n\n if (fontData.fClass) {\n tHelper.style.fontFamily = 'inherit';\n tHelper.setAttribute('class', fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\n }\n\n def.appendChild(tHelper);\n helper = tHelper;\n } else {\n var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n helper = tCanvasHelper;\n }\n\n function measure(text) {\n if (engine === 'svg') {\n helper.textContent = text;\n return helper.getComputedTextLength();\n }\n\n return helper.measureText(text).width;\n }\n\n return {\n measureText: measure\n };\n }\n\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n\n if (!document.body) {\n this.isLoaded = true;\n fontData.list.forEach(function (data) {\n data.helper = createHelper(data);\n data.cache = {};\n });\n this.fonts = fontData.list;\n return;\n }\n\n var fontArr = fontData.list;\n var i;\n var len = fontArr.length;\n var _pendingFonts = len;\n\n for (i = 0; i < len; i += 1) {\n var shouldLoadFont = true;\n var loadedSelector;\n var j;\n fontArr[i].loaded = false;\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n if (!fontArr[i].fPath) {\n fontArr[i].loaded = true;\n _pendingFonts -= 1;\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\n\n if (shouldLoadFont) {\n var s = createTag('style');\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\n s.setAttribute('f-origin', fontArr[i].origin);\n s.setAttribute('f-family', fontArr[i].fFamily);\n s.type = 'text/css';\n s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n defs.appendChild(s);\n }\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var l = createTag('link');\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\n l.setAttribute('f-origin', fontArr[i].origin);\n l.type = 'text/css';\n l.rel = 'stylesheet';\n l.href = fontArr[i].fPath;\n document.body.appendChild(l);\n }\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var sc = createTag('link');\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n sc.setAttribute('f-origin', fontArr[i].origin);\n sc.setAttribute('rel', 'stylesheet');\n sc.setAttribute('href', fontArr[i].fPath);\n defs.appendChild(sc);\n }\n }\n\n fontArr[i].helper = createHelper(fontArr[i], defs);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\n\n if (_pendingFonts === 0) {\n this.isLoaded = true;\n } else {\n // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n // Adding this timeout seems to fix it\n setTimeout(this.checkLoadedFonts.bind(this), 100);\n }\n }\n\n function addChars(chars) {\n if (!chars) {\n return;\n }\n\n if (!this.chars) {\n this.chars = [];\n }\n\n var i;\n var len = chars.length;\n var j;\n var jLen = this.chars.length;\n var found;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n\n j += 1;\n }\n\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n\n function getCharData(_char, style, font) {\n var i = 0;\n var len = this.chars.length;\n\n while (i < len) {\n if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n\n i += 1;\n }\n\n if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n && !this._warned) {\n this._warned = true;\n console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n }\n\n return emptyChar;\n }\n\n function measureText(_char2, fontName, size) {\n var fontData = this.getFontByName(fontName); // Using the char instead of char.charCodeAt(0)\n // to avoid collisions between equal chars\n\n var index = _char2;\n\n if (!fontData.cache[index]) {\n var tHelper = fontData.helper;\n\n if (_char2 === ' ') {\n var doubleSize = tHelper.measureText('|' + _char2 + '|');\n var singleSize = tHelper.measureText('||');\n fontData.cache[index] = (doubleSize - singleSize) / 100;\n } else {\n fontData.cache[index] = tHelper.measureText(_char2) / 100;\n }\n }\n\n return fontData.cache[index] * size;\n }\n\n function getFontByName(name) {\n var i = 0;\n var len = this.fonts.length;\n\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n\n i += 1;\n }\n\n return this.fonts[0];\n }\n\n function getCodePoint(string) {\n var codePoint = 0;\n var first = string.charCodeAt(0);\n\n if (first >= 0xD800 && first <= 0xDBFF) {\n var second = string.charCodeAt(1);\n\n if (second >= 0xDC00 && second <= 0xDFFF) {\n codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n\n return codePoint;\n } // Skin tone modifiers\n\n\n function isModifier(firstCharCode, secondCharCode) {\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n return surrogateModifiers.indexOf(sum) !== -1;\n }\n\n function isZeroWidthJoiner(charCode) {\n return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n } // This codepoint may change the appearance of the preceding character.\n // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered\n // as a colorful image as compared to a monochrome text variant.\n\n\n function isVariationSelector(charCode) {\n return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n } // The regional indicator symbols are a set of 26 alphabetic Unicode\n /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2\n // two-letter country codes in a way that allows optional special treatment.\n\n\n function isRegionalCode(string) {\n var codePoint = getCodePoint(string);\n\n if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n return true;\n }\n\n return false;\n } // Some Emoji implementations represent combinations of\n // two “regional indicator” letters as a single flag symbol.\n\n\n function isFlagEmoji(string) {\n return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n }\n\n function isCombinedCharacter(_char3) {\n return combinedCharacters.indexOf(_char3) !== -1;\n } // Regional flags start with a BLACK_FLAG_CODE_POINT\n // folowed by 5 chars in the TAG range\n // and end with a CANCEL_TAG_CODE_POINT\n\n\n function isRegionalFlag(text, index) {\n var codePoint = getCodePoint(text.substr(index, 2));\n\n if (codePoint !== BLACK_FLAG_CODE_POINT) {\n return false;\n }\n\n var count = 0;\n index += 2;\n\n while (count < 5) {\n codePoint = getCodePoint(text.substr(index, 2));\n\n if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n return false;\n }\n\n count += 1;\n index += 2;\n }\n\n return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\n }\n\n function setIsLoaded() {\n this.isLoaded = true;\n }\n\n var Font = function Font() {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this._warned = false;\n this.initTime = Date.now();\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n };\n\n Font.isModifier = isModifier;\n Font.isZeroWidthJoiner = isZeroWidthJoiner;\n Font.isFlagEmoji = isFlagEmoji;\n Font.isRegionalCode = isRegionalCode;\n Font.isCombinedCharacter = isCombinedCharacter;\n Font.isRegionalFlag = isRegionalFlag;\n Font.isVariationSelector = isVariationSelector;\n Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT;\n var fontPrototype = {\n addChars: addChars,\n addFonts: addFonts,\n getCharData: getCharData,\n getFontByName: getFontByName,\n measureText: measureText,\n checkLoadedFonts: checkLoadedFonts,\n setIsLoaded: setIsLoaded\n };\n Font.prototype = fontPrototype;\n return Font;\n }();\n\n function SlotManager(animationData) {\n this.animationData = animationData;\n }\n\n SlotManager.prototype.getProp = function (data) {\n if (this.animationData.slots && this.animationData.slots[data.sid]) {\n return Object.assign(data, this.animationData.slots[data.sid].p);\n }\n\n return data;\n };\n\n function slotFactory(animationData) {\n return new SlotManager(animationData);\n }\n\n function RenderableElement() {}\n\n RenderableElement.prototype = {\n initRenderable: function initRenderable() {\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false; // layer's display state\n\n this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n this.isTransparent = false; // list of animated components\n\n this.renderableComponents = [];\n },\n addRenderableComponent: function addRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) === -1) {\n this.renderableComponents.push(component);\n }\n },\n removeRenderableComponent: function removeRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) !== -1) {\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n }\n },\n prepareRenderableFrame: function prepareRenderableFrame(num) {\n this.checkLayerLimits(num);\n },\n checkTransparency: function checkTransparency() {\n if (this.finalTransform.mProp.o.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n },\n\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n *\r\n */\n checkLayerLimits: function checkLayerLimits(num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isInRange !== true) {\n this.globalData._mdf = true;\n this._mdf = true;\n this.isInRange = true;\n this.show();\n }\n } else if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n },\n renderRenderable: function renderRenderable() {\n var i;\n var len = this.renderableComponents.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n },\n sourceRectAtTime: function sourceRectAtTime() {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100\n };\n },\n getLayerSize: function getLayerSize() {\n if (this.data.ty === 5) {\n return {\n w: this.data.textData.width,\n h: this.data.textData.height\n };\n }\n\n return {\n w: this.data.width,\n h: this.data.height\n };\n }\n };\n\n var getBlendMode = function () {\n var blendModeEnums = {\n 0: 'source-over',\n 1: 'multiply',\n 2: 'screen',\n 3: 'overlay',\n 4: 'darken',\n 5: 'lighten',\n 6: 'color-dodge',\n 7: 'color-burn',\n 8: 'hard-light',\n 9: 'soft-light',\n 10: 'difference',\n 11: 'exclusion',\n 12: 'hue',\n 13: 'saturation',\n 14: 'color',\n 15: 'luminosity'\n };\n return function (mode) {\n return blendModeEnums[mode] || '';\n };\n }();\n\n function SliderEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function NoValueEffect() {\n this.p = {};\n }\n\n function EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i;\n var len = effects.length;\n var effectItem;\n\n for (i = 0; i < len; i += 1) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n }\n\n function GroupEffect(data, element) {\n this.init(data, element);\n }\n\n extendPrototype([DynamicPropertyContainer], GroupEffect);\n GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n GroupEffect.prototype.init = function (data, element) {\n this.data = data;\n this.effectElements = [];\n this.initDynamicPropertyContainer(element);\n var i;\n var len = this.data.ef.length;\n var eff;\n var effects = this.data.ef;\n\n for (i = 0; i < len; i += 1) {\n eff = null;\n\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n\n case 5:\n eff = new EffectsManager(effects[i], element, this);\n break;\n // case 6:\n\n default:\n eff = new NoValueEffect(effects[i], element, this);\n break;\n }\n\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n };\n\n function BaseElement() {}\n\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n\n var i = 0;\n var len = this.data.masksProperties.length;\n\n while (i < len) {\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n\n i += 1;\n }\n\n return false;\n },\n initExpressions: function initExpressions() {\n var expressionsInterfaces = getExpressionInterfaces();\n\n if (!expressionsInterfaces) {\n return;\n }\n\n var LayerExpressionInterface = expressionsInterfaces('layer');\n var EffectsExpressionInterface = expressionsInterfaces('effects');\n var ShapeExpressionInterface = expressionsInterfaces('shape');\n var TextExpressionInterface = expressionsInterfaces('text');\n var CompExpressionInterface = expressionsInterfaces('comp');\n this.layerInterface = LayerExpressionInterface(this);\n\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n this.layerInterface.content = this.layerInterface.shapeInterface;\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n this.layerInterface.text = this.layerInterface.textInterface;\n }\n },\n setBlendMode: function setBlendMode() {\n var blendModeValue = getBlendMode(this.data.bm);\n var elem = this.baseElement || this.layerElement;\n elem.style['mix-blend-mode'] = blendModeValue;\n },\n initBaseData: function initBaseData(data, globalData, comp) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n if (!this.data.sr) {\n this.data.sr = 1;\n } // effects manager\n\n\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n },\n getType: function getType() {\n return this.type;\n },\n sourceRectAtTime: function sourceRectAtTime() {}\n };\n\n /**\r\n * @file\r\n * Handles element's layer frame update.\r\n * Checks layer in point and out point\r\n *\r\n */\n function FrameElement() {}\n\n FrameElement.prototype = {\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n */\n initFrame: function initFrame() {\n // set to true when inpoint is rendered\n this._isFirstFrame = false; // list of animated properties\n\n this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n this._mdf = false;\n },\n\n /**\r\n * @function\r\n * Calculates all dynamic values\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n * @param {boolean} isVisible\r\n * if layers is currently in range\r\n *\r\n */\n prepareProperties: function prepareProperties(num, isVisible) {\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this.globalData._mdf = true;\n this._mdf = true;\n }\n }\n }\n },\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n }\n }\n };\n\n function FootageElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.footageData = globalData.imageLoader.getAsset(this.assetData);\n this.initBaseData(data, globalData, comp);\n }\n\n FootageElement.prototype.prepareFrame = function () {};\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n FootageElement.prototype.getBaseElement = function () {\n return null;\n };\n\n FootageElement.prototype.renderFrame = function () {};\n\n FootageElement.prototype.destroy = function () {};\n\n FootageElement.prototype.initExpressions = function () {\n var expressionsInterfaces = getExpressionInterfaces();\n\n if (!expressionsInterfaces) {\n return;\n }\n\n var FootageInterface = expressionsInterfaces('footage');\n this.layerInterface = FootageInterface(this);\n };\n\n FootageElement.prototype.getFootageData = function () {\n return this.footageData;\n };\n\n function AudioElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.initBaseData(data, globalData, comp);\n this._isPlaying = false;\n this._canPlay = false;\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.audio = this.globalData.audioController.createAudio(assetPath);\n this._currentTime = 0;\n this.globalData.audioController.addAudio(this);\n this._volumeMultiplier = 1;\n this._volume = 1;\n this._previousVolume = null;\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n k: [100]\n }, 1, 0.01, this);\n }\n\n AudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n this._currentTime = timeRemapped;\n } else {\n this._currentTime = num / this.data.sr;\n }\n\n this._volume = this.lv.v[0];\n var totalVolume = this._volume * this._volumeMultiplier;\n\n if (this._previousVolume !== totalVolume) {\n this._previousVolume = totalVolume;\n this.audio.volume(totalVolume);\n }\n };\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n AudioElement.prototype.renderFrame = function () {\n if (this.isInRange && this._canPlay) {\n if (!this._isPlaying) {\n this.audio.play();\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n this._isPlaying = true;\n } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n }\n }\n };\n\n AudioElement.prototype.show = function () {// this.audio.play()\n };\n\n AudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n };\n\n AudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n };\n\n AudioElement.prototype.resume = function () {\n this._canPlay = true;\n };\n\n AudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\n };\n\n AudioElement.prototype.volume = function (volumeValue) {\n this._volumeMultiplier = volumeValue;\n this._previousVolume = volumeValue * this._volume;\n this.audio.volume(this._previousVolume);\n };\n\n AudioElement.prototype.getBaseElement = function () {\n return null;\n };\n\n AudioElement.prototype.destroy = function () {};\n\n AudioElement.prototype.sourceRectAtTime = function () {};\n\n AudioElement.prototype.initExpressions = function () {};\n\n function BaseRenderer() {}\n\n BaseRenderer.prototype.checkLayers = function (num) {\n var i;\n var len = this.layers.length;\n var data;\n this.completeLayers = true;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (!this.elements[i]) {\n data = this.layers[i];\n\n if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n this.buildItem(i);\n }\n }\n\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n\n case 0:\n return this.createComp(layer);\n\n case 1:\n return this.createSolid(layer);\n\n case 3:\n return this.createNull(layer);\n\n case 4:\n return this.createShape(layer);\n\n case 5:\n return this.createText(layer);\n\n case 6:\n return this.createAudio(layer);\n\n case 13:\n return this.createCamera(layer);\n\n case 15:\n return this.createFootage(layer);\n\n default:\n return this.createNull(layer);\n }\n };\n\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n\n BaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.createFootage = function (data) {\n return new FootageElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.buildAllItems = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.includeLayers = function (newLayers) {\n this.completeLayers = false;\n var i;\n var len = newLayers.length;\n var j;\n var jLen = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n\n while (j < jLen) {\n if (this.layers[j].id === newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n\n j += 1;\n }\n }\n };\n\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n\n BaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n };\n\n BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0;\n var len = layers.length;\n\n while (i < len) {\n if (layers[i].ind == parentName) {\n // eslint-disable-line eqeqeq\n if (!elements[i] || elements[i] === true) {\n this.buildItem(i);\n this.addPendingElement(element);\n } else {\n hierarchy.push(elements[i]);\n elements[i].setAsParent();\n\n if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n\n i += 1;\n }\n };\n\n BaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n };\n\n BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i]);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n BaseRenderer.prototype.getElementById = function (ind) {\n var i;\n var len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.ind === ind) {\n return this.elements[i];\n }\n }\n\n return null;\n };\n\n BaseRenderer.prototype.getElementByPath = function (path) {\n var pathValue = path.shift();\n var element;\n\n if (typeof pathValue === 'number') {\n element = this.elements[pathValue];\n } else {\n var i;\n var len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.nm === pathValue) {\n element = this.elements[i];\n break;\n }\n }\n }\n\n if (path.length === 0) {\n return element;\n }\n\n return element.getElementByPath(path);\n };\n\n BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\n this.globalData.slotManager = slotFactory(animData);\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.imageLoader = this.animationItem.imagePreloader;\n this.globalData.audioController = this.animationItem.audioController;\n this.globalData.frameId = 0;\n this.globalData.frameRate = animData.fr;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n };\n\n var effectTypes = {\n TRANSFORM_EFFECT: 'transformEFfect'\n };\n\n function TransformElement() {}\n\n TransformElement.prototype = {\n initTransform: function initTransform() {\n var mat = new Matrix();\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n o: 0\n },\n _matMdf: false,\n _localMatMdf: false,\n _opMdf: false,\n mat: mat,\n localMat: mat,\n localOpacity: 1\n };\n\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n } // TODO: check TYPE 11: Guided elements\n\n\n if (this.data.ty !== 11) {// this.createElements();\n }\n },\n renderTransform: function renderTransform() {\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0;\n var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n if (!this.finalTransform._matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\n this.finalTransform._matMdf = true;\n break;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n\n for (i = 0; i < len; i += 1) {\n finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n }\n }\n }\n\n if (this.finalTransform._matMdf) {\n this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n }\n\n if (this.finalTransform._opMdf) {\n this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n }\n },\n renderLocalTransform: function renderLocalTransform() {\n if (this.localTransforms) {\n var i = 0;\n var len = this.localTransforms.length;\n this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n\n if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n while (i < len) {\n if (this.localTransforms[i]._mdf) {\n this.finalTransform._localMatMdf = true;\n }\n\n if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) {\n this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n this.finalTransform._opMdf = true;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._localMatMdf) {\n var localMat = this.finalTransform.localMat;\n this.localTransforms[0].matrix.clone(localMat);\n\n for (i = 1; i < len; i += 1) {\n var lmat = this.localTransforms[i].matrix;\n localMat.multiply(lmat);\n }\n\n localMat.multiply(this.finalTransform.mat);\n }\n\n if (this.finalTransform._opMdf) {\n var localOp = this.finalTransform.localOpacity;\n\n for (i = 0; i < len; i += 1) {\n localOp *= this.localTransforms[i].opacity * 0.01;\n }\n\n this.finalTransform.localOpacity = localOp;\n }\n }\n },\n searchEffectTransforms: function searchEffectTransforms() {\n if (this.renderableEffectsManager) {\n var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n\n if (transformEffects.length) {\n this.localTransforms = [];\n this.finalTransform.localMat = new Matrix();\n var i = 0;\n var len = transformEffects.length;\n\n for (i = 0; i < len; i += 1) {\n this.localTransforms.push(transformEffects[i]);\n }\n }\n }\n },\n globalToLocal: function globalToLocal(pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n\n var i;\n var len = transforms.length;\n var ptNew;\n\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n\n return pt;\n },\n mHelper: new Matrix()\n };\n\n function MaskElement(data, element, globalData) {\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties || [];\n this.maskElement = null;\n var defs = this.globalData.defs;\n var i;\n var len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n var path;\n var properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j;\n var jLen;\n var layerId = createElementID();\n var rect;\n var expansor;\n var feMorph;\n var x;\n var maskType = 'clipPath';\n var maskRef = 'clip-path';\n\n for (i = 0; i < len; i += 1) {\n if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n maskType = 'mask';\n maskRef = 'mask';\n }\n\n if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n rect = createNS('rect');\n rect.setAttribute('fill', '#ffffff');\n rect.setAttribute('width', this.element.comp.data.w || 0);\n rect.setAttribute('height', this.element.comp.data.h || 0);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n\n path = createNS('path');\n\n if (properties[i].mode === 'n') {\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n elem: path,\n lastPath: ''\n };\n defs.appendChild(path);\n } else {\n count += 1;\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n path.setAttribute('clip-rule', 'nonzero');\n var filterID;\n\n if (properties[i].x.k !== 0) {\n maskType = 'mask';\n maskRef = 'mask';\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n filterID = createElementID();\n expansor = createNS('filter');\n expansor.setAttribute('id', filterID);\n feMorph = createNS('feMorphology');\n feMorph.setAttribute('operator', 'erode');\n feMorph.setAttribute('in', 'SourceGraphic');\n feMorph.setAttribute('radius', '0');\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n } else {\n feMorph = null;\n x = null;\n } // TODO move this to a factory or to a constructor\n\n\n this.storedData[i] = {\n elem: path,\n x: x,\n expan: feMorph,\n lastPath: '',\n lastOperator: '',\n filterId: filterID,\n lastRadius: 0\n };\n\n if (properties[i].mode === 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n\n var mask = createNS('mask');\n mask.setAttribute('mask-type', 'alpha');\n mask.setAttribute('id', layerId + '_' + count);\n mask.appendChild(path);\n defs.appendChild(mask);\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n currentMasks.length = 0;\n currentMasks.push(g);\n } else {\n currentMasks.push(path);\n }\n\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n } // TODO move this to a factory or to a constructor\n\n\n this.viewData[i] = {\n elem: path,\n lastPath: '',\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n invRect: rect\n };\n\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n }\n\n this.maskElement = createNS(maskType);\n len = currentMasks.length;\n\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n\n if (count > 0) {\n this.maskElement.setAttribute('id', layerId);\n this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n defs.appendChild(this.maskElement);\n }\n\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n }\n\n MaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n };\n\n MaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i;\n var len = this.masksProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n }\n\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\n\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== 'erode') {\n this.storedData[i].lastOperator = 'erode';\n this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n }\n\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== 'dilate') {\n this.storedData[i].lastOperator = 'dilate';\n this.storedData[i].elem.setAttribute('filter', null);\n }\n\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n };\n\n MaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\n };\n\n MaskElement.prototype.createLayerSolidPath = function () {\n var path = 'M0,0 ';\n path += ' h' + this.globalData.compSize.w;\n path += ' v' + this.globalData.compSize.h;\n path += ' h-' + this.globalData.compSize.w;\n path += ' v-' + this.globalData.compSize.h + ' ';\n return path;\n };\n\n MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n var i;\n var len;\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n if (pathNodes.c && len > 1) {\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n } // pathNodes.__renderedString = pathString;\n\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n\n viewData.lastPath = pathString;\n }\n };\n\n MaskElement.prototype.destroy = function () {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n };\n\n var filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId, skipCoordinates) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\n\n if (skipCoordinates !== true) {\n fil.setAttribute('filterUnits', 'objectBoundingBox');\n fil.setAttribute('x', '0%');\n fil.setAttribute('y', '0%');\n fil.setAttribute('width', '100%');\n fil.setAttribute('height', '100%');\n }\n\n return fil;\n }\n\n function createAlphaToLuminanceFilter() {\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\n return feColorMatrix;\n }\n\n return ob;\n }();\n\n var featureSupport = function () {\n var ob = {\n maskType: true,\n svgLumaHidden: true,\n offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\n };\n\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n\n if (/firefox/i.test(navigator.userAgent)) {\n ob.svgLumaHidden = false;\n }\n\n return ob;\n }();\n\n var registeredEffects$1 = {};\n var idPrefix = 'filter_result_';\n\n function SVGEffects(elem) {\n var i;\n var source = 'SourceGraphic';\n var len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId, true);\n var count = 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n\n if (registeredEffects$1[type]) {\n var Effect = registeredEffects$1[type].effect;\n filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n source = idPrefix + count;\n\n if (registeredEffects$1[type].countsAsEffect) {\n count += 1;\n }\n }\n\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n\n SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n\n SVGEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n\n return effects;\n };\n\n function registerEffect$1(id, effect, countsAsEffect) {\n registeredEffects$1[id] = {\n effect: effect,\n countsAsEffect: countsAsEffect\n };\n }\n\n function SVGBaseElement() {}\n\n SVGBaseElement.prototype = {\n initRendererElement: function initRendererElement() {\n this.layerElement = createNS('g');\n },\n createContainerElements: function createContainerElements() {\n this.matteElement = createNS('g');\n this.transformedElement = this.layerElement;\n this.maskedElement = this.layerElement;\n this._sizeChanged = false;\n var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n if (this.data.td) {\n this.matteMasks = {};\n var gg = createNS('g');\n gg.setAttribute('id', this.layerId);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n this.globalData.defs.appendChild(gg);\n } else if (this.data.tt) {\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n if (this.data.ty === 0 && !this.data.hd) {\n var cp = createNS('clipPath');\n var pt = createNS('path');\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n var clipId = createElementID();\n cp.setAttribute('id', clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n\n if (this.checkMasks()) {\n var cpGroup = createNS('g');\n cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\n\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n }\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._localMatMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS());\n }\n\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity);\n }\n },\n destroyBaseElement: function destroyBaseElement() {\n this.layerElement = null;\n this.matteElement = null;\n this.maskManager.destroy();\n },\n getBaseElement: function getBaseElement() {\n if (this.data.hd) {\n return null;\n }\n\n return this.baseElement;\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n this.renderableEffectsManager = new SVGEffects(this);\n this.searchEffectTransforms();\n },\n getMatte: function getMatte(matteType) {\n // This should not be a common case. But for backward compatibility, we'll create the matte object.\n // It solves animations that have two consecutive layers marked as matte masks.\n // Which is an undefined behavior in AE.\n if (!this.matteMasks) {\n this.matteMasks = {};\n }\n\n if (!this.matteMasks[matteType]) {\n var id = this.layerId + '_' + matteType;\n var filId;\n var fil;\n var useElement;\n var gg;\n\n if (matteType === 1 || matteType === 3) {\n var masker = createNS('mask');\n masker.setAttribute('id', id);\n masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha');\n useElement = createNS('use');\n useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n masker.appendChild(useElement);\n this.globalData.defs.appendChild(masker);\n\n if (!featureSupport.maskType && matteType === 1) {\n masker.setAttribute('mask-type', 'luminance');\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n gg.appendChild(useElement);\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n } else if (matteType === 2) {\n var maskGroup = createNS('mask');\n maskGroup.setAttribute('id', id);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId); /// /\n\n var feCTr = createNS('feComponentTransfer');\n feCTr.setAttribute('in', 'SourceGraphic');\n fil.appendChild(feCTr);\n var feFunc = createNS('feFuncA');\n feFunc.setAttribute('type', 'table');\n feFunc.setAttribute('tableValues', '1.0 0.0');\n feCTr.appendChild(feFunc); /// /\n\n this.globalData.defs.appendChild(fil);\n var alphaRect = createNS('rect');\n alphaRect.setAttribute('width', this.comp.data.w);\n alphaRect.setAttribute('height', this.comp.data.h);\n alphaRect.setAttribute('x', '0');\n alphaRect.setAttribute('y', '0');\n alphaRect.setAttribute('fill', '#ffffff');\n alphaRect.setAttribute('opacity', '0');\n maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n maskGrouper.appendChild(alphaRect);\n useElement = createNS('use');\n useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n maskGrouper.appendChild(useElement);\n\n if (!featureSupport.maskType) {\n maskGroup.setAttribute('mask-type', 'luminance');\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n maskGrouper.appendChild(gg);\n }\n\n this.globalData.defs.appendChild(maskGroup);\n }\n\n this.matteMasks[matteType] = id;\n }\n\n return this.matteMasks[matteType];\n },\n setMatte: function setMatte(id) {\n if (!this.matteElement) {\n return;\n }\n\n this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n }\n };\n\n /**\r\n * @file\r\n * Handles AE's layer parenting property.\r\n *\r\n */\n function HierarchyElement() {}\n\n HierarchyElement.prototype = {\n /**\r\n * @function\r\n * Initializes hierarchy properties\r\n *\r\n */\n initHierarchy: function initHierarchy() {\n // element's parent list\n this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n this._isParent = false;\n this.checkParenting();\n },\n\n /**\r\n * @function\r\n * Sets layer's hierarchy.\r\n * @param {array} hierarch\r\n * layer's parent list\r\n *\r\n */\n setHierarchy: function setHierarchy(hierarchy) {\n this.hierarchy = hierarchy;\n },\n\n /**\r\n * @function\r\n * Sets layer as parent.\r\n *\r\n */\n setAsParent: function setAsParent() {\n this._isParent = true;\n },\n\n /**\r\n * @function\r\n * Searches layer's parenting chain\r\n *\r\n */\n checkParenting: function checkParenting() {\n if (this.data.parent !== undefined) {\n this.comp.buildElementParenting(this, this.data.parent, []);\n }\n }\n };\n\n function RenderableDOMElement() {}\n\n (function () {\n var _prototype = {\n initElement: function initElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n },\n hide: function hide() {\n // console.log('HIDE', this);\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'none';\n this.hidden = true;\n }\n },\n show: function show() {\n // console.log('SHOW', this);\n if (this.isInRange && !this.isTransparent) {\n if (!this.data.hd) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'block';\n }\n\n this.hidden = false;\n this._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderLocalTransform();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n renderInnerContent: function renderInnerContent() {},\n prepareFrame: function prepareFrame(num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n this.checkTransparency();\n },\n destroy: function destroy() {\n this.innerElem = null;\n this.destroyBaseElement();\n }\n };\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n })();\n\n function IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n\n if (this.assetData && this.assetData.sid) {\n this.assetData = globalData.slotManager.getProp(this.assetData);\n }\n\n this.initElement(data, globalData, comp);\n this.sourceRect = {\n top: 0,\n left: 0,\n width: this.assetData.w,\n height: this.assetData.h\n };\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n IImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.innerElem = createNS('image');\n this.innerElem.setAttribute('width', this.assetData.w + 'px');\n this.innerElem.setAttribute('height', this.assetData.h + 'px');\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.innerElem);\n };\n\n IImageElement.prototype.sourceRectAtTime = function () {\n return this.sourceRect;\n };\n\n function ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n }\n\n function IShapeElement() {}\n\n IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i;\n var len = this.shapeModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n },\n isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n var i = 0;\n var len = this.shapeModifiers.length;\n\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n\n return false;\n },\n renderModifiers: function renderModifiers() {\n if (!this.shapeModifiers.length) {\n return;\n }\n\n var i;\n var len = this.shapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n\n len = this.shapeModifiers.length;\n var shouldBreakProcess;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n // TODO: find a better solution for this\n\n if (shouldBreakProcess) {\n break;\n }\n }\n },\n searchProcessedElement: function searchProcessedElement(elem) {\n var elements = this.processedElements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n\n i += 1;\n }\n\n return 0;\n },\n addProcessedElement: function addProcessedElement(elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n\n while (i) {\n i -= 1;\n\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\n }\n\n elements.push(new ProcessedElement(elem, pos));\n },\n prepareFrame: function prepareFrame(num) {\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n }\n };\n\n var lineCapEnum = {\n 1: 'butt',\n 2: 'round',\n 3: 'square'\n };\n var lineJoinEnum = {\n 1: 'miter',\n 2: 'round',\n 3: 'bevel'\n };\n\n function SVGShapeData(transformers, level, shape) {\n this.caches = [];\n this.styles = [];\n this.transformers = transformers;\n this.lStr = '';\n this.sh = shape;\n this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n // For now, since shapes add up with other shapes. They have to be calculated every time.\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n var i = 0;\n var len = transformers.length;\n\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n\n i += 1;\n }\n }\n\n SVGShapeData.prototype.setAsAnimated = function () {\n this._isAnimated = true;\n };\n\n function SVGStyleData(data, level) {\n this.data = data;\n this.type = data.ty;\n this.d = '';\n this.lvl = level;\n this._mdf = false;\n this.closed = data.hd === true;\n this.pElem = createNS('path');\n this.msElem = null;\n }\n\n SVGStyleData.prototype.reset = function () {\n this.d = '';\n this._mdf = false;\n };\n\n function DashProperty(elem, data, renderer, container) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = createSizedArray(data.length);\n this.renderer = renderer;\n this.k = false;\n this.dashStr = '';\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n this.dashoffset = createTypedArray('float32', 1);\n this.initDynamicPropertyContainer(container);\n var i;\n var len = data.length || 0;\n var prop;\n\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n this.k = prop.k || this.k;\n this.dataProps[i] = {\n n: data[i].n,\n p: prop\n };\n }\n\n if (!this.k) {\n this.getValue(true);\n }\n\n this._isAnimated = this.k;\n }\n\n DashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n\n if (this._mdf) {\n var i = 0;\n var len = this.dataProps.length;\n\n if (this.renderer === 'svg') {\n this.dashStr = '';\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n !== 'o') {\n if (this.renderer === 'svg') {\n this.dashStr += ' ' + this.dataProps[i].p.v;\n } else {\n this.dashArray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset[0] = this.dataProps[i].p.v;\n }\n }\n }\n };\n\n extendPrototype([DynamicPropertyContainer], DashProperty);\n\n function SVGStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n function SVGFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n function SVGNoStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n function GradientProperty(elem, data, container) {\n this.data = data;\n this.c = createTypedArray('uint8c', data.p * 4);\n var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n this.o = createTypedArray('float32', cLength);\n this._cmdf = false;\n this._omdf = false;\n this._collapsable = this.checkCollapsable();\n this._hasOpacity = cLength;\n this.initDynamicPropertyContainer(container);\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n this.k = this.prop.k;\n this.getValue(true);\n }\n\n GradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0;\n var len = this.o.length / 2;\n var diff;\n\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n if (diff > 0.01) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n };\n\n GradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n\n if (this.data.k.k[0].s) {\n var i = 0;\n var len = this.data.k.k.length;\n\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n\n return true;\n };\n\n GradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n\n if (this.prop._mdf || forceRender) {\n var i;\n var len = this.data.p * 4;\n var mult;\n var val;\n\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n\n if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n\n if (this.o.length) {\n len = this.prop.v.length;\n\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n\n this._mdf = !forceRender;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n function SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n }\n\n SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n this.h = PropertyFactory.getProp(elem, data.h || {\n k: 0\n }, 0, 0.01, this);\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: 0\n }, 0, degToRads, this);\n this.g = new GradientProperty(elem, data.g, this);\n this.style = styleOb;\n this.stops = [];\n this.setGradientData(styleOb.pElem, data);\n this.setGradientOpacity(data, styleOb);\n this._isAnimated = !!this._isAnimated;\n };\n\n SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n var gradientId = createElementID();\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n gfill.setAttribute('id', gradientId);\n gfill.setAttribute('spreadMethod', 'pad');\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n var stops = [];\n var stop;\n var j;\n var jLen;\n jLen = data.g.p * 4;\n\n for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\n };\n\n SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop;\n var j;\n var jLen;\n var mask = createNS('mask');\n var maskElement = createNS('path');\n mask.appendChild(maskElement);\n var opacityId = createElementID();\n var maskId = createElementID();\n mask.setAttribute('id', maskId);\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n opFill.setAttribute('id', opacityId);\n opFill.setAttribute('spreadMethod', 'pad');\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n var stops = this.stops;\n\n for (j = data.g.p * 4; j < jLen; j += 2) {\n stop = createNS('stop');\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\n opFill.appendChild(stop);\n stops.push(stop);\n }\n\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n if (data.ty === 'gs') {\n maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n if (data.lj === 1) {\n maskElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n function SVGGradientStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.initGradientData(elem, data, styleOb);\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n function ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS('g');\n }\n\n function SVGTransformData(mProps, op, container) {\n this.transform = {\n mProps: mProps,\n op: op,\n container: container\n };\n this.elements = [];\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n }\n\n var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n if (length === 0) {\n return '';\n }\n\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i;\n var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n for (i = 1; i < length; i += 1) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n }\n\n if (closed && length) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n shapeString += 'z';\n }\n\n return shapeString;\n };\n\n var SVGElementsRenderer = function () {\n var _identityMatrix = new Matrix();\n\n var _matrixHelper = new Matrix();\n\n var ob = {\n createRenderFunction: createRenderFunction\n };\n\n function createRenderFunction(data) {\n switch (data.ty) {\n case 'fl':\n return renderFill;\n\n case 'gf':\n return renderGradient;\n\n case 'gs':\n return renderGradientStroke;\n\n case 'st':\n return renderStroke;\n\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n\n case 'tr':\n return renderContentTransform;\n\n case 'no':\n return renderNoop;\n\n default:\n return null;\n }\n }\n\n function renderContentTransform(styleData, itemData, isFirstFrame) {\n if (isFirstFrame || itemData.transform.op._mdf) {\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n }\n\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n\n function renderNoop() {}\n\n function renderPath(styleData, itemData, isFirstFrame) {\n var j;\n var jLen;\n var pathStringTransformed;\n var redraw;\n var pathNodes;\n var l;\n var lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths;\n var mat;\n var iterations;\n var k;\n\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n\n if (itemData.styles[l].lvl < lvl) {\n mat = _matrixHelper.reset();\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations -= 1;\n k -= 1;\n }\n\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (iterations > 0) {\n mat.multiply(itemData.transformers[k].mProps.v);\n iterations -= 1;\n k -= 1;\n }\n }\n } else {\n mat = _identityMatrix;\n }\n\n paths = itemData.sh.paths;\n jLen = paths._length;\n\n if (redraw) {\n pathStringTransformed = '';\n\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n }\n\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\n }\n\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (itemData.o._mdf || isFirstFrame) {\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\n }\n\n if (itemData.s._mdf || isFirstFrame) {\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n gfill.setAttribute(attr1, pt1[0]);\n gfill.setAttribute(attr2, pt1[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n\n var stops;\n var i;\n var len;\n var stop;\n\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', cValues[i * 4] + '%');\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n }\n }\n\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\n }\n\n if (styleData.t === 1) {\n if (itemData.e._mdf || isFirstFrame) {\n gfill.setAttribute('x2', pt2[0]);\n gfill.setAttribute('y2', pt2[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('x2', pt2[0]);\n itemData.of.setAttribute('y2', pt2[1]);\n }\n }\n } else {\n var rad;\n\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute('r', rad);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\n }\n\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n }\n\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute('fx', x);\n gfill.setAttribute('fy', y);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\n }\n } // gfill.setAttribute('fy','200');\n\n }\n }\n\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n }\n\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n\n return ob;\n }();\n\n function SVGShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n SVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n };\n /*\r\n This method searches for multiple shapes that affect a single element and one of them is animated\r\n */\n\n\n SVGShapeElement.prototype.filterUniqueShapes = function () {\n var i;\n var len = this.shapes.length;\n var shape;\n var j;\n var jLen = this.stylesList.length;\n var style;\n var tempShapes = [];\n var areAnimated = false;\n\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n };\n\n SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i;\n var len = shapes.length;\n\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\n };\n\n SVGShapeElement.prototype.createStyleElement = function (data, level) {\n // TODO: prevent drawing of hidden styles\n var elementData;\n var styleOb = new SVGStyleData(data, level);\n var pathElement = styleOb.pElem;\n\n if (data.ty === 'st') {\n elementData = new SVGStrokeStyleData(this, data, styleOb);\n } else if (data.ty === 'fl') {\n elementData = new SVGFillStyleData(this, data, styleOb);\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n elementData = new GradientConstructor(this, data, styleOb);\n this.globalData.defs.appendChild(elementData.gf);\n\n if (elementData.maskId) {\n this.globalData.defs.appendChild(elementData.ms);\n this.globalData.defs.appendChild(elementData.of);\n pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n }\n } else if (data.ty === 'no') {\n elementData = new SVGNoStyleData(this, data, styleOb);\n }\n\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n pathElement.setAttribute('fill-opacity', '0');\n\n if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n return elementData;\n };\n\n SVGShapeElement.prototype.createTransformElement = function (data, container) {\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0;\n var len = this.animatedContents.length;\n\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n\n i += 1;\n }\n\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data\n });\n };\n\n SVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j;\n var jLen = this.stylesList.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n };\n\n SVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n };\n\n SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var currentTransform;\n var modifier;\n var processedPos;\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level);\n } else {\n itemsData[i].style.closed = false;\n }\n\n if (arr[i]._render) {\n if (itemsData[i].style.pElem.parentNode !== container) {\n container.appendChild(itemsData[i].style.pElem);\n }\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n if (arr[i]._render) {\n if (itemsData[i].gr.parentNode !== container) {\n container.appendChild(itemsData[i].gr);\n }\n }\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], container);\n }\n\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n }\n\n this.setElementStyles(itemsData[i]);\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n len = ownStyles.length;\n\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n SVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n\n this.renderShape();\n\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n };\n\n SVGShapeElement.prototype.renderShape = function () {\n var i;\n var len = this.animatedContents.length;\n var animatedContent;\n\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n };\n\n SVGShapeElement.prototype.destroy = function () {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n };\n\n function LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this._mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true\n };\n }\n\n LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n this._mdf.o = false;\n this._mdf.sw = false;\n this._mdf.sc = false;\n this._mdf.fc = false;\n this._mdf.m = false;\n this._mdf.p = false;\n var updated = false;\n\n if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\n }\n\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this._mdf.p = true;\n updated = true;\n }\n\n return updated;\n };\n\n function TextProperty(elem, data) {\n this._frameId = initialDefaultFrame;\n this.pv = '';\n this.v = '';\n this.kf = false;\n this._isFirstFrame = true;\n this._mdf = false;\n\n if (data.d && data.d.sid) {\n data.d = elem.globalData.slotManager.getProp(data.d);\n }\n\n this.data = data;\n this.elem = elem;\n this.comp = this.elem.comp;\n this.keysIndex = 0;\n this.canResize = false;\n this.minimumFontSize = 1;\n this.effectsSequence = [];\n this.currentData = {\n ascent: 0,\n boxWidth: this.defaultBoxWidth,\n f: '',\n fStyle: '',\n fWeight: '',\n fc: '',\n j: '',\n justifyOffset: '',\n l: [],\n lh: 0,\n lineWidths: [],\n ls: '',\n of: '',\n s: '',\n sc: '',\n sw: 0,\n t: 0,\n tr: 0,\n sz: 0,\n ps: null,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n finalSize: 0,\n finalText: [],\n finalLineHeight: 0,\n __complete: false\n };\n this.copyData(this.currentData, this.data.d.k[0].s);\n\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n }\n\n TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n TextProperty.prototype.copyData = function (obj, data) {\n for (var s in data) {\n if (Object.prototype.hasOwnProperty.call(data, s)) {\n obj[s] = data[s];\n }\n }\n\n return obj;\n };\n\n TextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n };\n\n TextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n };\n\n TextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n\n return this.kf;\n };\n\n TextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n for (i = 0; i < len; i += 1) {\n // Checking if index changed to prevent creating a new object every time the expression updates.\n if (currentIndex !== this.keysIndex) {\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n } else {\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n }\n }\n\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n\n this.v = this.currentData;\n this.pv = this.v;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n };\n\n TextProperty.prototype.getKeyframeValue = function () {\n var textKeys = this.data.d.k;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0;\n var len = textKeys.length;\n\n while (i <= len - 1) {\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n\n i += 1;\n }\n\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n\n return this.data.d.k[this.keysIndex].s;\n };\n\n TextProperty.prototype.buildFinalText = function (text) {\n var charactersArray = [];\n var i = 0;\n var len = text.length;\n var charCode;\n var secondCharCode;\n var shouldCombine = false;\n var shouldCombineNext = false;\n var currentChars = '';\n\n while (i < len) {\n shouldCombine = shouldCombineNext;\n shouldCombineNext = false;\n charCode = text.charCodeAt(i);\n currentChars = text.charAt(i);\n\n if (FontManager.isCombinedCharacter(charCode)) {\n shouldCombine = true; // It's a potential surrogate pair (this is the High surrogate)\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n if (FontManager.isRegionalFlag(text, i)) {\n currentChars = text.substr(i, 14);\n } else {\n secondCharCode = text.charCodeAt(i + 1); // It's a surrogate pair (this is the Low surrogate)\n\n if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n if (FontManager.isModifier(charCode, secondCharCode)) {\n currentChars = text.substr(i, 2);\n shouldCombine = true;\n } else if (FontManager.isFlagEmoji(text.substr(i, 4))) {\n currentChars = text.substr(i, 4);\n } else {\n currentChars = text.substr(i, 2);\n }\n }\n }\n } else if (charCode > 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n\n if (FontManager.isVariationSelector(charCode)) {\n shouldCombine = true;\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n shouldCombine = true;\n shouldCombineNext = true;\n }\n\n if (shouldCombine) {\n charactersArray[charactersArray.length - 1] += currentChars;\n shouldCombine = false;\n } else {\n charactersArray.push(currentChars);\n }\n\n i += currentChars.length;\n }\n\n return charactersArray;\n };\n\n TextProperty.prototype.completeTextData = function (documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i;\n var len;\n var newLineFlag;\n var index = 0;\n var val;\n var anchorGrouping = data.m.g;\n var currentSize = 0;\n var currentPos = 0;\n var currentLine = 0;\n var lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j;\n var jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData;\n var cLength = 0;\n var fontProps = getFontProperties(fontData);\n documentData.fWeight = fontProps.weight;\n documentData.fStyle = fontProps.style;\n documentData.finalSize = documentData.s;\n documentData.finalText = this.buildFinalText(documentData.t);\n len = documentData.finalText.length;\n documentData.finalLineHeight = documentData.lh;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var charCode;\n\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight;\n var finalText;\n\n while (flag) {\n finalText = this.buildFinalText(documentData.t);\n currentHeight = 0;\n lineWidth = 0;\n len = finalText.length;\n trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var lastSpaceIndex = -1;\n\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n\n if (finalText[i] === ' ') {\n lastSpaceIndex = i;\n } else if (charCode === 13 || charCode === 3) {\n lineWidth = 0;\n newLineFlag = true;\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n }\n\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n\n currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n documentData.finalSize -= 1;\n documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n } else {\n documentData.finalText = finalText;\n len = documentData.finalText.length;\n flag = false;\n }\n }\n }\n\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n\n if (charCode === 13 || charCode === 3) {\n uncollapsedSpaces = 0;\n lineWidths.push(lineWidth);\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidth = -2 * trackingOffset;\n val = '';\n newLineFlag = true;\n currentLine += 1;\n } else {\n val = currentChar;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n } //\n\n\n if (currentChar === ' ') {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\n }\n\n letters.push({\n l: cLength,\n an: cLength,\n add: currentSize,\n n: newLineFlag,\n anIndexes: [],\n val: val,\n line: currentLine,\n animatorJustifyOffset: 0\n });\n\n if (anchorGrouping == 2) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n\n default:\n documentData.justifyOffset = 0;\n }\n }\n\n documentData.lineWidths = lineWidths;\n var animators = data.a;\n var animatorData;\n var letterData;\n jLen = animators.length;\n var based;\n var ind;\n var indexes = [];\n\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n\n ind = 0;\n based = animatorData.s.b;\n\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n\n if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n // eslint-disable-line eqeqeq\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n\n ind += 1;\n }\n }\n\n data.a[j].s.totalChars = ind;\n var currentInd = -1;\n var newInd;\n\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n\n if (currentInd != letterData.anIndexes[j]) {\n // eslint-disable-line eqeqeq\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n };\n\n TextProperty.prototype.updateDocumentData = function (newData, index) {\n index = index === undefined ? this.keysIndex : index;\n var dData = this.copyData({}, this.data.d.k[index].s);\n dData = this.copyData(dData, newData);\n this.data.d.k[index].s = dData;\n this.recalculate(index);\n this.setCurrentData(dData);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.recalculate = function (index) {\n var dData = this.data.d.k[index].s;\n dData.__complete = false;\n this.keysIndex = 0;\n this._isFirstFrame = true;\n this.getValue(dData);\n };\n\n TextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n this.minimumFontSize = Math.floor(_fontValue) || 1;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n var TextSelectorProp = function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n\n function TextSelectorPropFactory(elem, data) {\n this._currentTextLength = -1;\n this.k = false;\n this.data = data;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.initDynamicPropertyContainer(elem);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: 0\n }, 0, 0, this);\n\n if ('e' in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n } else {\n this.e = {\n v: 100\n };\n }\n\n this.o = PropertyFactory.getProp(elem, data.o || {\n k: 0\n }, 0, 0, this);\n this.xe = PropertyFactory.getProp(elem, data.xe || {\n k: 0\n }, 0, 0, this);\n this.ne = PropertyFactory.getProp(elem, data.ne || {\n k: 0\n }, 0, 0, this);\n this.sm = PropertyFactory.getProp(elem, data.sm || {\n k: 100\n }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n\n TextSelectorPropFactory.prototype = {\n getMult: function getMult(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n }\n\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\n }\n\n if (this.xe.v > 0) {\n x2 = 1.0 - this.xe.v / 100.0;\n } else {\n y2 = 1.0 + this.xe.v / 100.0;\n }\n\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\n\n if (type === 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n\n mult = easer(mult);\n } else if (type === 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n /* ind += 0.5;\r\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - x * x / (a * a));\n }\n\n mult = easer(mult);\n } else if (type === 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n }\n\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = max(0, min(min(e, 1) - (s - ind), 1));\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n\n mult = easer(mult);\n } // Smoothness implementation.\n // The smoothness represents a reduced range of the original [0; 1] range.\n // if smoothness is 25%, the new range will be [0.375; 0.625]\n // Steps are:\n // - find the lower value of the new range (threshold)\n // - if multiplier is smaller than that value, floor it to 0\n // - if it is larger,\n // - subtract the threshold\n // - divide it by the smoothness (this will return the range to [0; 1])\n // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n if (this.sm.v !== 100) {\n var smoothness = this.sm.v * 0.01;\n\n if (smoothness === 0) {\n smoothness = 0.00000001;\n }\n\n var threshold = 0.5 - smoothness * 0.5;\n\n if (mult < threshold) {\n mult = 0;\n } else {\n mult = (mult - threshold) / smoothness;\n\n if (mult > 1) {\n mult = 1;\n }\n }\n }\n\n return mult * this.a.v;\n },\n getValue: function getValue(newCharsFlag) {\n this.iterateDynamicProperties();\n this._mdf = newCharsFlag || this._mdf;\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\n\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n var o = this.o.v / divisor;\n var s = this.s.v / divisor + o;\n var e = this.e.v / divisor + o;\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n this.finalS = s;\n this.finalE = e;\n }\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorPropFactory(elem, data, arr);\n }\n\n return {\n getTextSelectorProp: getTextSelectorProp\n };\n }();\n\n function TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = {\n propType: false\n };\n var getProp = PropertyFactory.getProp;\n var textAnimatorAnimatables = animatorProps.a;\n this.a = {\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n };\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\n }\n\n function TextAnimatorProperty(textData, renderType, elem) {\n this._isFirstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = createSizedArray(this._textData.a.length);\n this._pathData = {};\n this._moreOptions = {\n alignment: {}\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n this.initDynamicPropertyContainer(elem);\n }\n\n TextAnimatorProperty.prototype.searchProperties = function () {\n var i;\n var len = this._textData.a.length;\n var animatorProps;\n var getProp = PropertyFactory.getProp;\n\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n }\n\n if (this._textData.p && 'm' in this._textData.p) {\n this._pathData = {\n a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n };\n\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\n\n this._isFirstFrame = false;\n var alignment = this._moreOptions.alignment.v;\n var animators = this._animatorsData;\n var textData = this._textData;\n var matrixHelper = this.mHelper;\n var renderType = this._renderType;\n var renderedLettersCount = this.renderedLetters.length;\n var xPos;\n var yPos;\n var i;\n var len;\n var letters = documentData.l;\n var pathInfo;\n var currentLength;\n var currentPoint;\n var segmentLength;\n var flag;\n var pointInd;\n var segmentInd;\n var prevPoint;\n var points;\n var segments;\n var partialLength;\n var totalLength;\n var perc;\n var tanAngle;\n var mask;\n\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n\n if (this._pathData.r.v) {\n paths = paths.reverse();\n } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n\n for (i = 0; i < len; i += 1) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n i = len;\n\n if (mask.v.c) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n this._pathData.pi = pathInfo;\n }\n\n pathInfo = this._pathData.pi;\n currentLength = this._pathData.f.v;\n segmentInd = 0;\n pointInd = 1;\n segmentLength = 0;\n flag = true;\n segments = pathInfo.segments;\n\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.finalSize * 1.2 * 0.714;\n var firstLine = true;\n var animatorProps;\n var animatorSelector;\n var j;\n var jLen;\n var letterValue;\n jLen = animators.length;\n var mult;\n var ind = -1;\n var offf;\n var xPathPos;\n var yPathPos;\n var initPathPos = currentLength;\n var initSegmentInd = segmentInd;\n var initPointInd = pointInd;\n var currentLine = -1;\n var elemOpacity;\n var sc;\n var sw;\n var fc;\n var k;\n var letterSw;\n var letterSc;\n var letterFc;\n var letterM = '';\n var letterP = this.defaultPropsArray;\n var letterO; //\n\n if (documentData.j === 2 || documentData.j === 1) {\n var animatorJustifyOffset = 0;\n var animatorFirstCharOffset = 0;\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n var lastIndex = 0;\n var isNewLine = true;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n } else {\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n }\n }\n }\n\n isNewLine = false;\n }\n }\n\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n } //\n\n\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\n\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n\n if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\n }\n\n letterM = '';\n letterFc = '';\n letterSw = '';\n letterO = '';\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n\n default:\n break;\n }\n\n currentLine = letters[i].line;\n }\n\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n\n currentLength += alignment[0] * letters[i].an * 0.005;\n var animatorOffset = 0;\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n\n flag = true; // Force alignment only works with a single line for now\n\n if (this._pathData.a.v) {\n currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n currentLength += this._pathData.f.v;\n }\n\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n if (xPos !== 0 || documentData.j !== 0) {\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t.v * mult[0];\n } else {\n currentLength += animatorProps.t.v * mult;\n }\n } else if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n } else {\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n } else {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (animatorProps.sk.propType) {\n if (mult.length) {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n } else {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n }\n }\n\n if (animatorProps.r.propType) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n\n if (animatorProps.ry.propType) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n\n if (animatorProps.rx.propType) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n\n if (animatorProps.o.propType) {\n if (mult.length) {\n elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n } else {\n elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n }\n }\n\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n }\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n if (animatorProps.fc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n }\n }\n }\n\n if (animatorProps.fh.propType) {\n if (mult.length) {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n } else {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n }\n }\n\n if (animatorProps.fs.propType) {\n if (mult.length) {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n } else {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n }\n }\n\n if (animatorProps.fb.propType) {\n if (mult.length) {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n } else {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n }\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else if (mult.length) {\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n } else {\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\n }\n\n if (documentData.strokeColorAnim) {\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n }\n\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n if (this._pathData.p.v) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an * 0.005;\n\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr * 0.001 * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n\n if (documentData.ps) {\n // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n }\n\n if (renderType === 'html') {\n letterM = matrixHelper.toCSS();\n } else if (renderType === 'svg') {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n }\n\n letterO = elemOpacity;\n }\n\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n };\n\n TextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n function ITextElement() {}\n\n ITextElement.prototype.initElement = function (data, globalData, comp) {\n this.lettersChangedFlag = true;\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n this.textAnimator.searchProperties(this.dynamicProperties);\n };\n\n ITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n };\n\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j;\n var jLen = shapes.length;\n var pathNodes;\n var shapeStr = '';\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n }\n\n return shapeStr;\n };\n\n ITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n };\n\n ITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n };\n\n ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\n };\n\n ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n matrixHelper.translate(0, -documentData.ls, 0);\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(xPos, yPos, 0);\n };\n\n ITextElement.prototype.buildColor = function (colorData) {\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n };\n\n ITextElement.prototype.emptyProp = new LetterProps();\n\n ITextElement.prototype.destroy = function () {};\n\n ITextElement.prototype.validateText = function () {\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n };\n\n var emptyShapeData = {\n shapes: []\n };\n\n function SVGTextLottieElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n SVGTextLottieElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n\n SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n var i = 0;\n var len = textArray.length;\n var textContents = [];\n var currentTextContent = '';\n\n while (i < len) {\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n textContents.push(currentTextContent);\n currentTextContent = '';\n } else {\n currentTextContent += textArray[i];\n }\n\n i += 1;\n }\n\n textContents.push(currentTextContent);\n return textContents;\n };\n\n SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n // data should probably be cloned to apply scale separately to each instance of a text on different layers\n // but since text internal content gets only rendered once and then it's never rerendered,\n // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n // Avoiding cloning is preferred since cloning each character shape data is expensive\n if (data.shapes && data.shapes.length) {\n var shape = data.shapes[0];\n\n if (shape.it) {\n var shapeItem = shape.it[shape.it.length - 1];\n\n if (shapeItem.s) {\n shapeItem.s.k[0] = scale;\n shapeItem.s.k[1] = scale;\n }\n }\n }\n\n return data;\n };\n\n SVGTextLottieElement.prototype.buildNewText = function () {\n this.addDynamicProperty(this);\n var i;\n var len;\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n if (documentData.fc) {\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n }\n\n if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (fontData.fClass) {\n this.layerElement.setAttribute('class', fontData.fClass);\n } else {\n this.layerElement.setAttribute('font-family', fontData.fFamily);\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n this.layerElement.setAttribute('font-style', fStyle);\n this.layerElement.setAttribute('font-weight', fWeight);\n }\n\n this.layerElement.setAttribute('aria-label', documentData.t);\n var letters = documentData.l || [];\n var usesGlyphs = !!this.globalData.fontManager.chars;\n len = letters.length;\n var tSpan;\n var matrixHelper = this.mHelper;\n var shapeStr = '';\n var singleShape = this.data.singleShape;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n\n case 2:\n justify = 'middle';\n break;\n\n default:\n justify = 'start';\n break;\n }\n\n tElement.setAttribute('text-anchor', justify);\n tElement.setAttribute('letter-spacing', trackingOffset);\n var textContent = this.buildTextContents(documentData.finalText);\n len = textContent.length;\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i].span || createNS('tspan');\n tSpan.textContent = textContent[i];\n tSpan.setAttribute('x', 0);\n tSpan.setAttribute('y', yPos);\n tSpan.style.display = 'inherit';\n tElement.appendChild(tSpan);\n\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n glyph: null\n };\n }\n\n this.textSpans[i].span = tSpan;\n yPos += documentData.finalLineHeight;\n }\n\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var charData;\n\n for (i = 0; i < len; i += 1) {\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n childSpan: null,\n glyph: null\n };\n }\n\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n if (cachedSpansLength <= i) {\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n this.textSpans[i].span = tSpan;\n\n if (usesGlyphs) {\n var childSpan = createNS('g');\n tSpan.appendChild(childSpan);\n this.textSpans[i].childSpan = childSpan;\n }\n\n this.textSpans[i].span = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n xPos += trackingOffset;\n }\n\n if (usesGlyphs) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n if (charData.t === 1) {\n glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n } else {\n var data = emptyShapeData;\n\n if (charData.data && charData.data.shapes) {\n data = this.buildShapeData(charData.data, documentData.finalSize);\n }\n\n glyphElement = new SVGShapeElement(data, this.globalData, this);\n }\n\n if (this.textSpans[i].glyph) {\n var glyph = this.textSpans[i].glyph;\n this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n glyph.destroy();\n }\n\n this.textSpans[i].glyph = glyphElement;\n glyphElement._debug = true;\n glyphElement.prepareFrame(0);\n glyphElement.renderFrame();\n this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n // this might have issues with strokes and might need a different solution\n\n if (charData.t === 1) {\n this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n }\n } else {\n if (singleShape) {\n tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n }\n\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n } //\n\n }\n\n if (singleShape && tSpan) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n\n while (i < this.textSpans.length) {\n this.textSpans[i].span.style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n };\n\n SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\n\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height\n };\n }\n\n return this.bbox;\n };\n\n SVGTextLottieElement.prototype.getValue = function () {\n var i;\n var len = this.textSpans.length;\n var glyphElement;\n this.renderedFrame = this.comp.renderedFrame;\n\n for (i = 0; i < len; i += 1) {\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n if (glyphElement._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n SVGTextLottieElement.prototype.renderInnerContent = function () {\n this.validateText();\n\n if (!this.data.singleShape || this._mdf) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i;\n var len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var glyphElement;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i].span;\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.renderFrame();\n }\n\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n }\n };\n\n function ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([IImageElement], ISolidElement);\n\n ISolidElement.prototype.createContent = function () {\n var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n /// /rect.style.height = this.data.sh;\n /// /rect.style.fill = this.data.sc;\n\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.layerElement.appendChild(rect);\n };\n\n function NullElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initFrame();\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n }\n\n NullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n NullElement.prototype.renderFrame = function () {};\n\n NullElement.prototype.getBaseElement = function () {\n return null;\n };\n\n NullElement.prototype.destroy = function () {};\n\n NullElement.prototype.sourceRectAtTime = function () {};\n\n NullElement.prototype.hide = function () {};\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n function SVGRendererBase() {}\n\n extendPrototype([BaseRenderer], SVGRendererBase);\n\n SVGRendererBase.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createText = function (data) {\n return new SVGTextLottieElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n if (this.renderConfig.viewBoxSize) {\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n } else {\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n }\n\n if (!this.renderConfig.viewBoxOnly) {\n this.svgElement.setAttribute('width', animData.w);\n this.svgElement.setAttribute('height', animData.h);\n this.svgElement.style.width = '100%';\n this.svgElement.style.height = '100%';\n this.svgElement.style.transform = 'translate3d(0,0,0)';\n this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n }\n\n if (this.renderConfig.width) {\n this.svgElement.setAttribute('width', this.renderConfig.width);\n }\n\n if (this.renderConfig.height) {\n this.svgElement.setAttribute('height', this.renderConfig.height);\n }\n\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n var defs = this.globalData.defs;\n this.setupGlobalData(animData, defs);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.data = animData;\n var maskElement = createNS('clipPath');\n var rect = createNS('rect');\n rect.setAttribute('width', animData.w);\n rect.setAttribute('height', animData.h);\n rect.setAttribute('x', 0);\n rect.setAttribute('y', 0);\n var maskId = createElementID();\n maskElement.setAttribute('id', maskId);\n maskElement.appendChild(rect);\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n };\n\n SVGRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.layerElement = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n SVGRendererBase.prototype.updateContainerSize = function () {};\n\n SVGRendererBase.prototype.findIndexByInd = function (ind) {\n var i = 0;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ind === ind) {\n return i;\n }\n }\n\n return -1;\n };\n\n SVGRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n\n if (getExpressionsPlugin()) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n\n element.initExpressions();\n }\n\n this.appendElementInPos(element, pos);\n\n if (this.layers[pos].tt) {\n var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n\n if (elementIndex === -1) {\n return;\n }\n\n if (!this.elements[elementIndex] || this.elements[elementIndex] === true) {\n this.buildItem(elementIndex);\n this.addPendingElement(element);\n } else {\n var matteElement = elements[elementIndex];\n var matteMask = matteElement.getMatte(this.layers[pos].tt);\n element.setMatte(matteMask);\n }\n }\n };\n\n SVGRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n\n if (element.data.tt) {\n var i = 0;\n var len = this.elements.length;\n\n while (i < len) {\n if (this.elements[i] === element) {\n var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1;\n var matteElement = this.elements[elementIndex];\n var matteMask = matteElement.getMatte(this.layers[i].tt);\n element.setMatte(matteMask);\n break;\n }\n\n i += 1;\n }\n }\n }\n };\n\n SVGRendererBase.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n } // console.log('-------');\n // console.log('FRAME ',num);\n\n\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n this.globalData._mdf = false;\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n }\n };\n\n SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n\n if (!newElement) {\n return;\n }\n\n var i = 0;\n var nextElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n\n i += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n\n SVGRendererBase.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n\n SVGRendererBase.prototype.show = function () {\n this.layerElement.style.display = 'block';\n };\n\n function ICompElement() {}\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n ICompElement.prototype.initElement = function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initRenderable();\n this.initHierarchy();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n\n this.hide();\n };\n /* ICompElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this.hideElement();\r\n var i,len = this.elements.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i]){\r\n this.elements[i].hide();\r\n }\r\n }\r\n }\r\n }; */\n\n\n ICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n\n var i;\n var len = this.elements.length;\n\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n ICompElement.prototype.renderInnerContent = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n ICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n\n ICompElement.prototype.getElements = function () {\n return this.elements;\n };\n\n ICompElement.prototype.destroyElements = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n };\n\n ICompElement.prototype.destroy = function () {\n this.destroyElements();\n this.destroyBaseElement();\n };\n\n function SVGCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n SVGCompElement.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.svgElement = createNS('svg');\n var ariaLabel = '';\n\n if (config && config.title) {\n var titleElement = createNS('title');\n var titleId = createElementID();\n titleElement.setAttribute('id', titleId);\n titleElement.textContent = config.title;\n this.svgElement.appendChild(titleElement);\n ariaLabel += titleId;\n }\n\n if (config && config.description) {\n var descElement = createNS('desc');\n var descId = createElementID();\n descElement.setAttribute('id', descId);\n descElement.textContent = config.description;\n this.svgElement.appendChild(descElement);\n ariaLabel += ' ' + descId;\n }\n\n if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n }\n\n var defs = createNS('defs');\n this.svgElement.appendChild(defs);\n var maskElement = createNS('g');\n this.svgElement.appendChild(maskElement);\n this.layerElement = maskElement;\n this.renderConfig = {\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n viewBoxOnly: config && config.viewBoxOnly || false,\n viewBoxSize: config && config.viewBoxSize || false,\n className: config && config.className || '',\n id: config && config.id || '',\n focusable: config && config.focusable,\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '100%',\n height: config && config.filterSize && config.filterSize.height || '100%',\n x: config && config.filterSize && config.filterSize.x || '0%',\n y: config && config.filterSize && config.filterSize.y || '0%'\n },\n width: config && config.width,\n height: config && config.height,\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n defs: defs,\n renderConfig: this.renderConfig\n };\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n this.rendererType = 'svg';\n }\n\n extendPrototype([SVGRendererBase], SVGRenderer);\n\n SVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n }\n\n ShapeTransformManager.prototype = {\n addTransformSequence: function addTransformSequence(transforms) {\n var i;\n var len = transforms.length;\n var key = '_';\n\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n\n var sequence = this.sequences[key];\n\n if (!sequence) {\n sequence = {\n transforms: [].concat(transforms),\n finalTransform: new Matrix(),\n _mdf: false\n };\n this.sequences[key] = sequence;\n this.sequenceList.push(sequence);\n }\n\n return sequence;\n },\n processSequence: function processSequence(sequence, isFirstFrame) {\n var i = 0;\n var len = sequence.transforms.length;\n var _mdf = isFirstFrame;\n\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n\n i += 1;\n }\n\n if (_mdf) {\n sequence.finalTransform.reset();\n\n for (i = len - 1; i >= 0; i -= 1) {\n sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);\n }\n }\n\n sequence._mdf = _mdf;\n },\n processSequences: function processSequences(isFirstFrame) {\n var i;\n var len = this.sequenceList.length;\n\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function getNewKey() {\n this.transform_key_count += 1;\n return '_' + this.transform_key_count;\n }\n };\n\n var lumaLoader = function lumaLoader() {\n var id = '__lottie_element_luma_buffer';\n var lumaBuffer = null;\n var lumaBufferCtx = null;\n var svg = null; // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame.\n // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used.\n // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask.\n // Naming it solution 2 to mark the extra comment lines.\n\n /*\r\n var svgString = [\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ].join('');\r\n var blob = new Blob([svgString], { type: 'image/svg+xml' });\r\n var url = URL.createObjectURL(blob);\r\n */\n\n function createLumaSvgFilter() {\n var _svg = createNS('svg');\n\n var fil = createNS('filter');\n var matrix = createNS('feColorMatrix');\n fil.setAttribute('id', id);\n matrix.setAttribute('type', 'matrix');\n matrix.setAttribute('color-interpolation-filters', 'sRGB');\n matrix.setAttribute('values', '0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0');\n fil.appendChild(matrix);\n\n _svg.appendChild(fil);\n\n _svg.setAttribute('id', id + '_svg');\n\n if (featureSupport.svgLumaHidden) {\n _svg.style.display = 'none';\n }\n\n return _svg;\n }\n\n function loadLuma() {\n if (!lumaBuffer) {\n svg = createLumaSvgFilter();\n document.body.appendChild(svg);\n lumaBuffer = createTag('canvas');\n lumaBufferCtx = lumaBuffer.getContext('2d'); // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n lumaBufferCtx.filter = 'url(#' + id + ')';\n lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)';\n lumaBufferCtx.fillRect(0, 0, 1, 1);\n }\n }\n\n function getLuma(canvas) {\n if (!lumaBuffer) {\n loadLuma();\n }\n\n lumaBuffer.width = canvas.width;\n lumaBuffer.height = canvas.height; // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n lumaBufferCtx.filter = 'url(#' + id + ')';\n return lumaBuffer;\n }\n\n return {\n load: loadLuma,\n get: getLuma\n };\n };\n\n function createCanvas(width, height) {\n if (featureSupport.offscreenCanvas) {\n return new OffscreenCanvas(width, height);\n }\n\n var canvas = createTag('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n\n var assetLoader = function () {\n return {\n loadLumaCanvas: lumaLoader.load,\n getLumaCanvas: lumaLoader.get,\n createCanvas: createCanvas\n };\n }();\n\n var registeredEffects = {};\n\n function CVEffects(elem) {\n var i;\n var len = elem.data.ef ? elem.data.ef.length : 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n\n if (registeredEffects[type]) {\n var Effect = registeredEffects[type].effect;\n filterManager = new Effect(elem.effectsManager.effectElements[i], elem);\n }\n\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n\n CVEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n\n CVEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n\n return effects;\n };\n\n function registerEffect(id, effect) {\n registeredEffects[id] = {\n effect: effect\n };\n }\n\n function CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.masksProperties = this.data.masksProperties || [];\n this.viewData = createSizedArray(this.masksProperties.length);\n var i;\n var len = this.masksProperties.length;\n var hasMasks = false;\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n hasMasks = true;\n }\n\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n\n this.hasMasks = hasMasks;\n\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n }\n\n CVMaskElement.prototype.renderFrame = function () {\n if (!this.hasMasks) {\n return;\n }\n\n var transform = this.element.finalTransform.mat;\n var ctx = this.element.canvasContext;\n var i;\n var len = this.masksProperties.length;\n var pt;\n var pts;\n var data;\n ctx.beginPath();\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compSize.w, 0);\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n ctx.lineTo(0, this.element.globalData.compSize.h);\n ctx.lineTo(0, 0);\n }\n\n data = this.viewData[i].v;\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n ctx.moveTo(pt[0], pt[1]);\n var j;\n var jLen = data._length;\n\n for (j = 1; j < jLen; j += 1) {\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n }\n\n this.element.globalData.renderer.save(true);\n ctx.clip();\n };\n\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n CVMaskElement.prototype.destroy = function () {\n this.element = null;\n };\n\n function CVBaseElement() {}\n\n var operationsMap = {\n 1: 'source-in',\n 2: 'source-out',\n 3: 'source-in',\n 4: 'source-out'\n };\n CVBaseElement.prototype = {\n createElements: function createElements() {},\n initRendererElement: function initRendererElement() {},\n createContainerElements: function createContainerElements() {\n // If the layer is masked we will use two buffers to store each different states of the drawing\n // This solution is not ideal for several reason. But unfortunately, because of the recursive\n // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask.\n // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer\n // It might be challenging because the layer most likely is transformed in some way\n if (this.data.tt >= 1) {\n this.buffers = [];\n var canvasContext = this.globalData.canvasContext;\n var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n this.buffers.push(bufferCanvas);\n var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n this.buffers.push(bufferCanvas2);\n\n if (this.data.tt >= 3 && !document._isProxy) {\n assetLoader.loadLumaCanvas();\n }\n }\n\n this.canvasContext = this.globalData.canvasContext;\n this.transformCanvas = this.globalData.transformCanvas;\n this.renderableEffectsManager = new CVEffects(this);\n this.searchEffectTransforms();\n },\n createContent: function createContent() {},\n setBlendMode: function setBlendMode() {\n var globalData = this.globalData;\n\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = getBlendMode(this.data.bm);\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new CVMaskElement(this.data, this);\n this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n },\n hideElement: function hideElement() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n this.hidden = true;\n }\n },\n showElement: function showElement() {\n if (this.isInRange && !this.isTransparent) {\n this.hidden = false;\n this._isFirstFrame = true;\n this.maskManager._isFirstFrame = true;\n }\n },\n clearCanvas: function clearCanvas(canvasContext) {\n canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy);\n },\n prepareLayer: function prepareLayer() {\n if (this.data.tt >= 1) {\n var buffer = this.buffers[0];\n var bufferCtx = buffer.getContext('2d');\n this.clearCanvas(bufferCtx); // on the first buffer we store the current state of the global drawing\n\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // The next four lines are to clear the canvas\n // TODO: Check if there is a way to clear the canvas without resetting the transform\n\n this.currentTransform = this.canvasContext.getTransform();\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n this.clearCanvas(this.canvasContext);\n this.canvasContext.setTransform(this.currentTransform);\n }\n },\n exitLayer: function exitLayer() {\n if (this.data.tt >= 1) {\n var buffer = this.buffers[1]; // On the second buffer we store the current state of the global drawing\n // that only contains the content of this layer\n // (if it is a composition, it also includes the nested layers)\n\n var bufferCtx = buffer.getContext('2d');\n this.clearCanvas(bufferCtx);\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // We clear the canvas again\n\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n this.clearCanvas(this.canvasContext);\n this.canvasContext.setTransform(this.currentTransform); // We draw the mask\n\n var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1);\n mask.renderFrame(true); // We draw the second buffer (that contains the content of this layer)\n\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); // If the mask is a Luma matte, we need to do two extra painting operations\n // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error\n\n if (this.data.tt >= 3 && !document._isProxy) {\n // We copy the painted mask to a buffer that has a color matrix filter applied to it\n // that applies the rgb values to the alpha channel\n var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas);\n var lumaBufferCtx = lumaBuffer.getContext('2d');\n lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n this.clearCanvas(this.canvasContext); // we repaint the context with the mask applied to it\n\n this.canvasContext.drawImage(lumaBuffer, 0, 0);\n }\n\n this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt];\n this.canvasContext.drawImage(buffer, 0, 0); // We finally draw the first buffer (that contains the content of the global drawing)\n // We use destination-over to draw the global drawing below the current layer\n\n this.canvasContext.globalCompositeOperation = 'destination-over';\n this.canvasContext.drawImage(this.buffers[0], 0, 0);\n this.canvasContext.setTransform(this.currentTransform); // We reset the globalCompositeOperation to source-over, the standard type of operation\n\n this.canvasContext.globalCompositeOperation = 'source-over';\n }\n },\n renderFrame: function renderFrame(forceRender) {\n if (this.hidden || this.data.hd) {\n return;\n }\n\n if (this.data.td === 1 && !forceRender) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderLocalTransform();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.prepareLayer();\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n this.exitLayer();\n\n if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\n }\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n this.maskManager.destroy();\n },\n mHelper: new Matrix()\n };\n CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n function CVShapeData(element, data, styles, transformsManager) {\n this.styledShapes = [];\n this.tr = [0, 0, 0, 0, 0, 0];\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i;\n var len = styles.length;\n var styledShape;\n\n for (i = 0; i < len; i += 1) {\n if (!styles[i].closed) {\n styledShape = {\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\n trNodes: []\n };\n this.styledShapes.push(styledShape);\n styles[i].elements.push(styledShape);\n }\n }\n }\n\n CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n function CVShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n this.transformsManager = new ShapeTransformManager();\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n CVShapeElement.prototype.transformHelper = {\n opacity: 1,\n _opMdf: false\n };\n CVShapeElement.prototype.dashResetter = [];\n\n CVShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n };\n\n CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n var styleElem = {\n data: data,\n type: data.ty,\n preTransforms: this.transformsManager.addTransformSequence(transforms),\n transforms: [],\n elements: [],\n closed: data.hd === true\n };\n var elementData = {};\n\n if (data.ty === 'fl' || data.ty === 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n if (!elementData.c.k) {\n styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n }\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n elementData.h = PropertyFactory.getProp(this, data.h || {\n k: 0\n }, 0, 0.01, this);\n elementData.a = PropertyFactory.getProp(this, data.a || {\n k: 0\n }, 0, degToRads, this);\n elementData.g = new GradientProperty(this, data.g, this);\n }\n\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n if (data.ty === 'st' || data.ty === 'gs') {\n styleElem.lc = lineCapEnum[data.lc || 2];\n styleElem.lj = lineJoinEnum[data.lj || 2];\n\n if (data.lj == 1) {\n // eslint-disable-line eqeqeq\n styleElem.ml = data.ml;\n }\n\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n\n if (data.d) {\n var d = new DashProperty(this, data.d, 'canvas', this);\n elementData.d = d;\n\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dashArray;\n styleElem[\"do\"] = elementData.d.dashoffset[0];\n }\n }\n } else {\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n }\n\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n };\n\n CVShapeElement.prototype.createGroupElement = function () {\n var elementData = {\n it: [],\n prevViewData: []\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createTransformElement = function (data) {\n var elementData = {\n transform: {\n opacity: 1,\n _opMdf: false,\n key: this.transformsManager.getNewKey(),\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n }\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createShapeElement = function (data) {\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n return elementData;\n };\n\n CVShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n };\n\n CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.push(transform);\n }\n }\n };\n\n CVShapeElement.prototype.removeTransformFromStyleList = function () {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n };\n\n CVShapeElement.prototype.closeStyles = function (styles) {\n var i;\n var len = styles.length;\n\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var processedPos;\n var modifier;\n var currentTransform;\n var ownTransforms = [].concat(transforms);\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n } else {\n itemsData[i].style.closed = false;\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n currentTransform = this.createTransformElement(arr[i]);\n itemsData[i] = currentTransform;\n }\n\n ownTransforms.push(itemsData[i]);\n this.addTransformToStyleList(itemsData[i]);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i]);\n }\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n shouldRender = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.renderInnerContent = function () {\n this.transformHelper.opacity = 1;\n this.transformHelper._opMdf = false;\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n };\n\n CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= groupTransform.op.v;\n groupTransform._opMdf = true;\n }\n };\n\n CVShapeElement.prototype.drawLayer = function () {\n var i;\n var len = this.stylesList.length;\n var j;\n var jLen;\n var k;\n var kLen;\n var elems;\n var nodes;\n var renderer = this.globalData.renderer;\n var ctx = this.globalData.canvasContext;\n var type;\n var currentStyle;\n\n for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type; // Skipping style when\n // Stroke width equals 0\n // style should not be rendered (extra unused repeaters)\n // current opacity equals 0\n // global opacity equals 0\n\n if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n renderer.save();\n elems = currentStyle.elements;\n\n if (type === 'st' || type === 'gs') {\n renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd); // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n\n renderer.ctxLineWidth(currentStyle.wi); // ctx.lineWidth = currentStyle.wi;\n\n renderer.ctxLineCap(currentStyle.lc); // ctx.lineCap = currentStyle.lc;\n\n renderer.ctxLineJoin(currentStyle.lj); // ctx.lineJoin = currentStyle.lj;\n\n renderer.ctxMiterLimit(currentStyle.ml || 0); // ctx.miterLimit = currentStyle.ml || 0;\n } else {\n renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd); // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n }\n\n renderer.ctxOpacity(currentStyle.coOp);\n\n if (type !== 'st' && type !== 'gs') {\n ctx.beginPath();\n }\n\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st' || type === 'gs') {\n ctx.beginPath();\n\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle[\"do\"];\n }\n }\n\n nodes = elems[j].trNodes;\n kLen = nodes.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (nodes[k].t === 'm') {\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n } else if (nodes[k].t === 'c') {\n ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n } else {\n ctx.closePath();\n }\n }\n\n if (type === 'st' || type === 'gs') {\n // ctx.stroke();\n renderer.ctxStroke();\n\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n\n if (type !== 'st' && type !== 'gs') {\n // ctx.fill(currentStyle.r);\n this.globalData.renderer.ctxFill(currentStyle.r);\n }\n\n renderer.restore();\n }\n }\n };\n\n CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i;\n var len = items.length - 1;\n var groupTransform;\n groupTransform = parentTransform;\n\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty === 'tr') {\n groupTransform = data[i].transform;\n this.renderShapeTransform(parentTransform, groupTransform);\n } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n this.renderPath(items[i], data[i]);\n } else if (items[i].ty === 'fl') {\n this.renderFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'st') {\n this.renderStroke(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n this.renderGradientFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gr') {\n this.renderShape(groupTransform, items[i].it, data[i].it);\n } else if (items[i].ty === 'tm') {//\n }\n }\n\n if (isMain) {\n this.drawLayer();\n }\n };\n\n CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n var shapeNodes = styledShape.trNodes;\n var paths = shape.paths;\n var i;\n var len;\n var j;\n var jLen = paths._length;\n shapeNodes.length = 0;\n var groupTransformMat = styledShape.transforms.finalTransform;\n\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n if (i === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n });\n }\n\n if (len === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n if (pathNodes.c && len) {\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n });\n shapeNodes.push({\n t: 'z'\n });\n }\n }\n }\n\n styledShape.trNodes = shapeNodes;\n }\n };\n\n CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n if (pathData.hd !== true && pathData._shouldRender) {\n var i;\n var len = itemData.styledShapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n };\n\n CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n };\n\n CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var grd;\n\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n var ctx = this.globalData.canvasContext;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (styleData.t === 1) {\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n } else {\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n\n var i;\n var len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\n\n for (i = 0; i < len; i += 1) {\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\n opacity = itemData.g.o[i * 2 + 1];\n }\n\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n }\n\n styleElem.grd = grd;\n }\n\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n };\n\n CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem[\"do\"] = d.dashoffset[0];\n }\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\n }\n };\n\n CVShapeElement.prototype.destroy = function () {\n this.shapesData = null;\n this.globalData = null;\n this.canvasContext = null;\n this.stylesList.length = 0;\n this.itemsData.length = 0;\n };\n\n function CVTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.yOffset = 0;\n this.fillColorAnim = false;\n this.strokeColorAnim = false;\n this.strokeWidthAnim = false;\n this.stroke = false;\n this.fill = false;\n this.justifyOffset = 0;\n this.currentRender = null;\n this.renderType = 'canvas';\n this.values = {\n fill: 'rgba(0,0,0,0)',\n stroke: 'rgba(0,0,0,0)',\n sWidth: 0,\n fValue: ''\n };\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n CVTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var hasFill = false;\n\n if (documentData.fc) {\n hasFill = true;\n this.values.fill = this.buildColor(documentData.fc);\n } else {\n this.values.fill = 'rgba(0,0,0,0)';\n }\n\n this.fill = hasFill;\n var hasStroke = false;\n\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n var i;\n var len;\n var letters = documentData.l;\n var matrixHelper = this.mHelper;\n this.stroke = hasStroke;\n this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n var charData;\n var shapeData;\n var k;\n var kLen;\n var shapes;\n var j;\n var jLen;\n var pathNodes;\n var commands;\n var pathArr;\n var singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n matrixHelper.reset();\n\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n\n commands = createSizedArray(jLen - 1);\n var commandsCounter = 0;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n kLen = shapes[j].ks.k.i.length;\n pathNodes = shapes[j].ks.k;\n pathArr = [];\n\n for (k = 1; k < kLen; k += 1) {\n if (k === 1) {\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n commands[commandsCounter] = pathArr;\n commandsCounter += 1;\n }\n }\n\n if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = {\n elem: commands\n };\n }\n\n cnt += 1;\n }\n };\n\n CVTextElement.prototype.renderInnerContent = function () {\n this.validateText();\n var ctx = this.canvasContext;\n ctx.font = this.values.fValue;\n this.globalData.renderer.ctxLineCap('butt'); // ctx.lineCap = 'butt';\n\n this.globalData.renderer.ctxLineJoin('miter'); // ctx.lineJoin = 'miter';\n\n this.globalData.renderer.ctxMiterLimit(4); // ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n\n var i;\n var len;\n var j;\n var jLen;\n var k;\n var kLen;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var lastFill = null;\n var lastStroke = null;\n var lastStrokeW = null;\n var commands;\n var pathArr;\n var renderer = this.globalData.renderer;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n\n if (renderedLetter) {\n renderer.save();\n renderer.ctxTransform(renderedLetter.p);\n renderer.ctxOpacity(renderedLetter.o);\n }\n\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n renderer.ctxFillStyle(renderedLetter.fc);\n lastFill = renderedLetter.fc; // ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n renderer.ctxFillStyle(this.values.fill); // ctx.fillStyle = this.values.fill;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n renderer.ctxFill(); // this.globalData.canvasContext.fill();\n /// ctx.fillText(this.textSpans[i].val,0,0);\n }\n\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n renderer.ctxLineWidth(renderedLetter.sw); // ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n renderer.ctxLineWidth(this.values.sWidth); // ctx.lineWidth = this.values.sWidth;\n }\n\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n renderer.ctxStrokeStyle(renderedLetter.sc); // ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n renderer.ctxStrokeStyle(this.values.stroke); // ctx.strokeStyle = this.values.stroke;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n renderer.ctxStroke(); // this.globalData.canvasContext.stroke();\n /// ctx.strokeText(letters[i].val,0,0);\n }\n\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n }\n };\n\n function CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getAsset(this.assetData);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVImageElement.prototype.createContent = function () {\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n var canvas = createTag('canvas');\n canvas.width = this.assetData.w;\n canvas.height = this.assetData.h;\n var ctx = canvas.getContext('2d');\n var imgW = this.img.width;\n var imgH = this.img.height;\n var imgRel = imgW / imgH;\n var canvasRel = this.assetData.w / this.assetData.h;\n var widthCrop;\n var heightCrop;\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\n }\n\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n this.img = canvas;\n }\n };\n\n CVImageElement.prototype.renderInnerContent = function () {\n this.canvasContext.drawImage(this.img, 0, 0);\n };\n\n CVImageElement.prototype.destroy = function () {\n this.img = null;\n };\n\n function CVSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVSolidElement.prototype.renderInnerContent = function () {\n // var ctx = this.canvasContext;\n this.globalData.renderer.ctxFillStyle(this.data.sc); // ctx.fillStyle = this.data.sc;\n\n this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh); // ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n //\n };\n\n function CanvasRendererBase() {}\n\n extendPrototype([BaseRenderer], CanvasRendererBase);\n\n CanvasRendererBase.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n CanvasRendererBase.prototype.ctxTransform = function (props) {\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n return;\n }\n\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n };\n\n CanvasRendererBase.prototype.ctxOpacity = function (op) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n };\n\n CanvasRendererBase.prototype.ctxFillStyle = function (value) {\n this.canvasContext.fillStyle = value;\n };\n\n CanvasRendererBase.prototype.ctxStrokeStyle = function (value) {\n this.canvasContext.strokeStyle = value;\n };\n\n CanvasRendererBase.prototype.ctxLineWidth = function (value) {\n this.canvasContext.lineWidth = value;\n };\n\n CanvasRendererBase.prototype.ctxLineCap = function (value) {\n this.canvasContext.lineCap = value;\n };\n\n CanvasRendererBase.prototype.ctxLineJoin = function (value) {\n this.canvasContext.lineJoin = value;\n };\n\n CanvasRendererBase.prototype.ctxMiterLimit = function (value) {\n this.canvasContext.miterLimit = value;\n };\n\n CanvasRendererBase.prototype.ctxFill = function (rule) {\n this.canvasContext.fill(rule);\n };\n\n CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) {\n this.canvasContext.fillRect(x, y, w, h);\n };\n\n CanvasRendererBase.prototype.ctxStroke = function () {\n this.canvasContext.stroke();\n };\n\n CanvasRendererBase.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n this.contextData.reset();\n };\n\n CanvasRendererBase.prototype.save = function () {\n this.canvasContext.save();\n };\n\n CanvasRendererBase.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n if (actionFlag) {\n this.globalData.blendMode = 'source-over';\n }\n\n this.contextData.restore(actionFlag);\n };\n\n CanvasRendererBase.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n var containerStyle = this.animationItem.container.style;\n containerStyle.width = '100%';\n containerStyle.height = '100%';\n var origin = '0px 0px 0px';\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n containerStyle['-webkit-transform'] = origin;\n containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n this.animationItem.wrapper.appendChild(this.animationItem.container);\n this.canvasContext = this.animationItem.container.getContext('2d');\n\n if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n\n this.contextData.setContext(this.canvasContext);\n this.data = animData;\n this.layers = animData.layers;\n this.transformCanvas = {\n w: animData.w,\n h: animData.h,\n sx: 0,\n sy: 0,\n tx: 0,\n ty: 0\n };\n this.setupGlobalData(animData, document.body);\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = createSizedArray(animData.layers.length);\n this.updateContainerSize();\n };\n\n CanvasRendererBase.prototype.updateContainerSize = function (width, height) {\n this.reset();\n var elementWidth;\n var elementHeight;\n\n if (width) {\n elementWidth = width;\n elementHeight = height;\n this.canvasContext.canvas.width = elementWidth;\n this.canvasContext.canvas.height = elementHeight;\n } else {\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n } else {\n elementWidth = this.canvasContext.canvas.width;\n elementHeight = this.canvasContext.canvas.height;\n }\n\n this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr;\n this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr;\n }\n\n var elementRel;\n var animationRel;\n\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(' ');\n var fillType = par[1] || 'meet';\n var pos = par[0] || 'xMidYMid';\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n\n if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n\n if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio === 'none') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n /* var i, len = this.elements.length;\r\n for(i=0;i= 0; i -= 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n };\n\n CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n return;\n }\n\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n this.globalData.frameId += 1;\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n // console.log('NEW: ',num);\n\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n if (this.renderConfig.clearCanvas === true) {\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n } else {\n this.save();\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n };\n\n CanvasRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n /* if(this.layers[pos].ty === 0){\r\n element.resize(this.globalData.transformCanvas);\r\n } */\n };\n\n CanvasRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n CanvasRendererBase.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n };\n\n CanvasRendererBase.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\n };\n\n function CanvasContext() {\n this.opacity = -1;\n this.transform = createTypedArray('float32', 16);\n this.fillStyle = '';\n this.strokeStyle = '';\n this.lineWidth = '';\n this.lineCap = '';\n this.lineJoin = '';\n this.miterLimit = '';\n this.id = Math.random();\n }\n\n function CVContextData() {\n this.stack = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n var i;\n var len = 15;\n\n for (i = 0; i < len; i += 1) {\n var canvasContext = new CanvasContext();\n this.stack[i] = canvasContext;\n }\n\n this._length = len;\n this.nativeContext = null;\n this.transformMat = new Matrix();\n this.currentOpacity = 1; //\n\n this.currentFillStyle = '';\n this.appliedFillStyle = ''; //\n\n this.currentStrokeStyle = '';\n this.appliedStrokeStyle = ''; //\n\n this.currentLineWidth = '';\n this.appliedLineWidth = ''; //\n\n this.currentLineCap = '';\n this.appliedLineCap = ''; //\n\n this.currentLineJoin = '';\n this.appliedLineJoin = ''; //\n\n this.appliedMiterLimit = '';\n this.currentMiterLimit = '';\n }\n\n CVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var i = 0;\n\n for (i = this._length; i < newLength; i += 1) {\n this.stack[i] = new CanvasContext();\n }\n\n this._length = newLength;\n };\n\n CVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.stack[this.cArrPos].opacity = 1;\n };\n\n CVContextData.prototype.restore = function (forceRestore) {\n this.cArrPos -= 1;\n var currentContext = this.stack[this.cArrPos];\n var transform = currentContext.transform;\n var i;\n var arr = this.cTr.props;\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = transform[i];\n }\n\n if (forceRestore) {\n this.nativeContext.restore();\n var prevStack = this.stack[this.cArrPos + 1];\n this.appliedFillStyle = prevStack.fillStyle;\n this.appliedStrokeStyle = prevStack.strokeStyle;\n this.appliedLineWidth = prevStack.lineWidth;\n this.appliedLineCap = prevStack.lineCap;\n this.appliedLineJoin = prevStack.lineJoin;\n this.appliedMiterLimit = prevStack.miterLimit;\n }\n\n this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]);\n\n if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) {\n this.nativeContext.globalAlpha = currentContext.opacity;\n this.currentOpacity = currentContext.opacity;\n }\n\n this.currentFillStyle = currentContext.fillStyle;\n this.currentStrokeStyle = currentContext.strokeStyle;\n this.currentLineWidth = currentContext.lineWidth;\n this.currentLineCap = currentContext.lineCap;\n this.currentLineJoin = currentContext.lineJoin;\n this.currentMiterLimit = currentContext.miterLimit;\n };\n\n CVContextData.prototype.save = function (saveOnNativeFlag) {\n if (saveOnNativeFlag) {\n this.nativeContext.save();\n }\n\n var props = this.cTr.props;\n\n if (this._length <= this.cArrPos) {\n this.duplicate();\n }\n\n var currentStack = this.stack[this.cArrPos];\n var i;\n\n for (i = 0; i < 16; i += 1) {\n currentStack.transform[i] = props[i];\n }\n\n this.cArrPos += 1;\n var newStack = this.stack[this.cArrPos];\n newStack.opacity = currentStack.opacity;\n newStack.fillStyle = currentStack.fillStyle;\n newStack.strokeStyle = currentStack.strokeStyle;\n newStack.lineWidth = currentStack.lineWidth;\n newStack.lineCap = currentStack.lineCap;\n newStack.lineJoin = currentStack.lineJoin;\n newStack.miterLimit = currentStack.miterLimit;\n };\n\n CVContextData.prototype.setOpacity = function (value) {\n this.stack[this.cArrPos].opacity = value;\n };\n\n CVContextData.prototype.setContext = function (value) {\n this.nativeContext = value;\n };\n\n CVContextData.prototype.fillStyle = function (value) {\n if (this.stack[this.cArrPos].fillStyle !== value) {\n this.currentFillStyle = value;\n this.stack[this.cArrPos].fillStyle = value;\n }\n };\n\n CVContextData.prototype.strokeStyle = function (value) {\n if (this.stack[this.cArrPos].strokeStyle !== value) {\n this.currentStrokeStyle = value;\n this.stack[this.cArrPos].strokeStyle = value;\n }\n };\n\n CVContextData.prototype.lineWidth = function (value) {\n if (this.stack[this.cArrPos].lineWidth !== value) {\n this.currentLineWidth = value;\n this.stack[this.cArrPos].lineWidth = value;\n }\n };\n\n CVContextData.prototype.lineCap = function (value) {\n if (this.stack[this.cArrPos].lineCap !== value) {\n this.currentLineCap = value;\n this.stack[this.cArrPos].lineCap = value;\n }\n };\n\n CVContextData.prototype.lineJoin = function (value) {\n if (this.stack[this.cArrPos].lineJoin !== value) {\n this.currentLineJoin = value;\n this.stack[this.cArrPos].lineJoin = value;\n }\n };\n\n CVContextData.prototype.miterLimit = function (value) {\n if (this.stack[this.cArrPos].miterLimit !== value) {\n this.currentMiterLimit = value;\n this.stack[this.cArrPos].miterLimit = value;\n }\n };\n\n CVContextData.prototype.transform = function (props) {\n this.transformMat.cloneFromProps(props); // Taking the last transform value from the stored stack of transforms\n\n var currentTransform = this.cTr; // Applying the last transform value after the new transform to respect the order of transformations\n\n this.transformMat.multiply(currentTransform); // Storing the new transformed value in the stored transform\n\n currentTransform.cloneFromProps(this.transformMat.props);\n var trProps = currentTransform.props; // Applying the new transform to the canvas\n\n this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n\n CVContextData.prototype.opacity = function (op) {\n var currentOpacity = this.stack[this.cArrPos].opacity;\n currentOpacity *= op < 0 ? 0 : op;\n\n if (this.stack[this.cArrPos].opacity !== currentOpacity) {\n if (this.currentOpacity !== op) {\n this.nativeContext.globalAlpha = op;\n this.currentOpacity = op;\n }\n\n this.stack[this.cArrPos].opacity = currentOpacity;\n }\n };\n\n CVContextData.prototype.fill = function (rule) {\n if (this.appliedFillStyle !== this.currentFillStyle) {\n this.appliedFillStyle = this.currentFillStyle;\n this.nativeContext.fillStyle = this.appliedFillStyle;\n }\n\n this.nativeContext.fill(rule);\n };\n\n CVContextData.prototype.fillRect = function (x, y, w, h) {\n if (this.appliedFillStyle !== this.currentFillStyle) {\n this.appliedFillStyle = this.currentFillStyle;\n this.nativeContext.fillStyle = this.appliedFillStyle;\n }\n\n this.nativeContext.fillRect(x, y, w, h);\n };\n\n CVContextData.prototype.stroke = function () {\n if (this.appliedStrokeStyle !== this.currentStrokeStyle) {\n this.appliedStrokeStyle = this.currentStrokeStyle;\n this.nativeContext.strokeStyle = this.appliedStrokeStyle;\n }\n\n if (this.appliedLineWidth !== this.currentLineWidth) {\n this.appliedLineWidth = this.currentLineWidth;\n this.nativeContext.lineWidth = this.appliedLineWidth;\n }\n\n if (this.appliedLineCap !== this.currentLineCap) {\n this.appliedLineCap = this.currentLineCap;\n this.nativeContext.lineCap = this.appliedLineCap;\n }\n\n if (this.appliedLineJoin !== this.currentLineJoin) {\n this.appliedLineJoin = this.currentLineJoin;\n this.nativeContext.lineJoin = this.appliedLineJoin;\n }\n\n if (this.appliedMiterLimit !== this.currentMiterLimit) {\n this.appliedMiterLimit = this.currentMiterLimit;\n this.nativeContext.miterLimit = this.appliedMiterLimit;\n }\n\n this.nativeContext.stroke();\n };\n\n function CVCompElement(data, globalData, comp) {\n this.completeLayers = false;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = createSizedArray(this.layers.length);\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n CVCompElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.data.w, 0);\n ctx.lineTo(this.data.w, this.data.h);\n ctx.lineTo(0, this.data.h);\n ctx.lineTo(0, 0);\n ctx.clip();\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n CVCompElement.prototype.destroy = function () {\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.layers = null;\n this.elements = null;\n };\n\n CVCompElement.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function CanvasRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n className: config && config.className || '',\n id: config && config.id || '',\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n\n if (this.renderConfig.clearCanvas) {\n this.ctxTransform = this.contextData.transform.bind(this.contextData);\n this.ctxOpacity = this.contextData.opacity.bind(this.contextData);\n this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData);\n this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData);\n this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData);\n this.ctxLineCap = this.contextData.lineCap.bind(this.contextData);\n this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData);\n this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData);\n this.ctxFill = this.contextData.fill.bind(this.contextData);\n this.ctxFillRect = this.contextData.fillRect.bind(this.contextData);\n this.ctxStroke = this.contextData.stroke.bind(this.contextData);\n this.save = this.contextData.save.bind(this.contextData);\n }\n }\n\n extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function HBaseElement() {}\n\n HBaseElement.prototype = {\n checkBlendMode: function checkBlendMode() {},\n initRendererElement: function initRendererElement() {\n this.baseElement = createTag(this.data.tg || 'div');\n\n if (this.data.hasMask) {\n this.svgElement = createNS('svg');\n this.layerElement = createNS('g');\n this.maskedElement = this.layerElement;\n this.svgElement.appendChild(this.layerElement);\n this.baseElement.appendChild(this.svgElement);\n } else {\n this.layerElement = this.baseElement;\n }\n\n styleDiv(this.baseElement);\n },\n createContainerElements: function createContainerElements() {\n this.renderableEffectsManager = new CVEffects(this);\n this.transformedElement = this.baseElement;\n this.maskedElement = this.layerElement;\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n if (this.finalTransform._matMdf) {\n var matrixValue = this.finalTransform.mat.toCSS();\n transformedElementStyle.transform = matrixValue;\n transformedElementStyle.webkitTransform = matrixValue;\n }\n\n if (this.finalTransform._opMdf) {\n transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.layerElement = null;\n this.transformedElement = null;\n\n if (this.matteElement) {\n this.matteElement = null;\n }\n\n if (this.maskManager) {\n this.maskManager.destroy();\n this.maskManager = null;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n },\n addEffects: function addEffects() {},\n setMatte: function setMatte() {}\n };\n HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n function HSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n HSolidElement.prototype.createContent = function () {\n var rect;\n\n if (this.data.hasMask) {\n rect = createNS('rect');\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.svgElement.setAttribute('width', this.data.sw);\n this.svgElement.setAttribute('height', this.data.sh);\n } else {\n rect = createTag('div');\n rect.style.width = this.data.sw + 'px';\n rect.style.height = this.data.sh + 'px';\n rect.style.backgroundColor = this.data.sc;\n }\n\n this.layerElement.appendChild(rect);\n };\n\n function HShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.shapesContainer = createNS('g');\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n }\n\n extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n HShapeElement.prototype.createContent = function () {\n var cont;\n this.baseElement.style.fontSize = 0;\n\n if (this.data.hasMask) {\n this.layerElement.appendChild(this.shapesContainer);\n cont = this.svgElement;\n } else {\n cont = createNS('svg');\n var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n cont.setAttribute('width', size.w);\n cont.setAttribute('height', size.h);\n cont.appendChild(this.shapesContainer);\n this.layerElement.appendChild(cont);\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n this.filterUniqueShapes();\n this.shapeCont = cont;\n };\n\n HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n var i;\n var len = transformers.length;\n\n for (i = 0; i < len; i += 1) {\n point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n }\n\n return point;\n };\n\n HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n var shape = item.sh.v;\n var transformers = item.transformers;\n var i;\n var len = shape._length;\n var vPoint;\n var oPoint;\n var nextIPoint;\n var nextVPoint;\n\n if (len <= 1) {\n return;\n }\n\n for (i = 0; i < len - 1; i += 1) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n\n if (shape.c) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n };\n\n HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n var bounds = this.shapeBoundingBox;\n boundingBox.x = bmMin(bounds.left, boundingBox.x);\n boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n boundingBox.y = bmMin(bounds.top, boundingBox.y);\n boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n };\n\n HShapeElement.prototype.shapeBoundingBox = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n HShapeElement.prototype.tempBoundingBox = {\n x: 0,\n xMax: 0,\n y: 0,\n yMax: 0,\n width: 0,\n height: 0\n };\n\n HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n // eslint-disable-line no-plusplus\n b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n b |= 0; // eslint-disable-line no-bitwise\n\n a |= 0; // eslint-disable-line no-bitwise\n\n c |= 0; // eslint-disable-line no-bitwise\n\n if (a === 0 && b === 0) {//\n } else if (a === 0) {\n t = -c / b;\n\n if (t > 0 && t < 1) {\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n }\n } else {\n b2ac = b * b - 4 * c * a;\n\n if (b2ac >= 0) {\n t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n }\n }\n }\n\n this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n };\n\n HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n };\n\n HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n var i;\n var len = itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n if (itemsData[i] && itemsData[i].sh) {\n this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n } else if (itemsData[i] && itemsData[i].it) {\n this.calculateBoundingBox(itemsData[i].it, boundingBox);\n } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {\n this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);\n }\n }\n };\n\n HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n var width = 0;\n\n if (widthProperty.keyframes) {\n for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n var kfw = widthProperty.keyframes[i].s;\n\n if (kfw > width) {\n width = kfw;\n }\n }\n\n width *= widthProperty.mult;\n } else {\n width = widthProperty.v * widthProperty.mult;\n }\n\n boundingBox.x -= width;\n boundingBox.xMax += width;\n boundingBox.y -= width;\n boundingBox.yMax += width;\n };\n\n HShapeElement.prototype.currentBoxContains = function (box) {\n return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n };\n\n HShapeElement.prototype.renderInnerContent = function () {\n this._renderShapeFrame();\n\n if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n var tempBoundingBox = this.tempBoundingBox;\n var max = 999999;\n tempBoundingBox.x = max;\n tempBoundingBox.xMax = -max;\n tempBoundingBox.y = max;\n tempBoundingBox.yMax = -max;\n this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\n\n if (this.currentBoxContains(tempBoundingBox)) {\n return;\n }\n\n var changed = false;\n\n if (this.currentBBox.w !== tempBoundingBox.width) {\n this.currentBBox.w = tempBoundingBox.width;\n this.shapeCont.setAttribute('width', tempBoundingBox.width);\n changed = true;\n }\n\n if (this.currentBBox.h !== tempBoundingBox.height) {\n this.currentBBox.h = tempBoundingBox.height;\n this.shapeCont.setAttribute('height', tempBoundingBox.height);\n changed = true;\n }\n\n if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n this.currentBBox.w = tempBoundingBox.width;\n this.currentBBox.h = tempBoundingBox.height;\n this.currentBBox.x = tempBoundingBox.x;\n this.currentBBox.y = tempBoundingBox.y;\n this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n var shapeStyle = this.shapeCont.style;\n var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n shapeStyle.transform = shapeTransform;\n shapeStyle.webkitTransform = shapeTransform;\n }\n }\n };\n\n function HTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.textPaths = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n this.renderType = 'svg';\n this.isMasked = false;\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n HTextElement.prototype.createContent = function () {\n this.isMasked = this.checkMasks();\n\n if (this.isMasked) {\n this.renderType = 'svg';\n this.compW = this.comp.data.w;\n this.compH = this.comp.data.h;\n this.svgElement.setAttribute('width', this.compW);\n this.svgElement.setAttribute('height', this.compH);\n var g = createNS('g');\n this.maskedElement.appendChild(g);\n this.innerElem = g;\n } else {\n this.renderType = 'html';\n this.innerElem = this.layerElement;\n }\n\n this.checkParenting();\n };\n\n HTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var innerElemStyle = this.innerElem.style;\n var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n innerElemStyle.fill = textColor;\n innerElemStyle.color = textColor;\n\n if (documentData.sc) {\n innerElemStyle.stroke = this.buildColor(documentData.sc);\n innerElemStyle.strokeWidth = documentData.sw + 'px';\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (!this.globalData.fontManager.chars) {\n innerElemStyle.fontSize = documentData.finalSize + 'px';\n innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n if (fontData.fClass) {\n this.innerElem.className = fontData.fClass;\n } else {\n innerElemStyle.fontFamily = fontData.fFamily;\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n innerElemStyle.fontStyle = fStyle;\n innerElemStyle.fontWeight = fWeight;\n }\n }\n\n var i;\n var len;\n var letters = documentData.l;\n len = letters.length;\n var tSpan;\n var tParent;\n var tCont;\n var matrixHelper = this.mHelper;\n var shapes;\n var shapeStr = '';\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.globalData.fontManager.chars) {\n if (!this.textPaths[cnt]) {\n tSpan = createNS('path');\n tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n tSpan.setAttribute('stroke-miterlimit', '4');\n } else {\n tSpan = this.textPaths[cnt];\n }\n\n if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tCont = tParent.children[0];\n } else {\n tParent = createTag('div');\n tParent.style.lineHeight = 0;\n tCont = createNS('svg');\n tCont.appendChild(tSpan);\n styleDiv(tParent);\n }\n }\n } else if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tSpan = this.textPaths[cnt];\n } else {\n tParent = createTag('span');\n styleDiv(tParent);\n tSpan = createTag('span');\n styleDiv(tSpan);\n tParent.appendChild(tSpan);\n }\n } else {\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n } // tSpan.setAttribute('visibility', 'hidden');\n\n\n if (this.globalData.fontManager.chars) {\n var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var shapeData;\n\n if (charData) {\n shapeData = charData.data;\n } else {\n shapeData = null;\n }\n\n matrixHelper.reset();\n\n if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n shapes = shapeData.shapes[0].it;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n shapeStr = this.createPathShape(matrixHelper, shapes);\n tSpan.setAttribute('d', shapeStr);\n }\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent);\n\n if (shapeData && shapeData.shapes) {\n // document.body.appendChild is needed to get exact measure of shape\n document.body.appendChild(tCont);\n var boundingBox = tCont.getBBox();\n tCont.setAttribute('width', boundingBox.width + 2);\n tCont.setAttribute('height', boundingBox.height + 2);\n tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n var tContStyle = tCont.style;\n var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n tContStyle.transform = tContTranslation;\n tContStyle.webkitTransform = tContTranslation;\n letters[i].yOffset = boundingBox.y - 1;\n } else {\n tCont.setAttribute('width', 1);\n tCont.setAttribute('height', 1);\n }\n\n tParent.appendChild(tCont);\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } else {\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent); //\n\n var tStyle = tSpan.style;\n var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n tStyle.transform = tSpanTranslation;\n tStyle.webkitTransform = tSpanTranslation;\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } //\n\n\n if (!this.isMasked) {\n this.textSpans[cnt] = tParent;\n } else {\n this.textSpans[cnt] = tSpan;\n }\n\n this.textSpans[cnt].style.display = 'block';\n this.textPaths[cnt] = tSpan;\n cnt += 1;\n }\n\n while (cnt < this.textSpans.length) {\n this.textSpans[cnt].style.display = 'none';\n cnt += 1;\n }\n };\n\n HTextElement.prototype.renderInnerContent = function () {\n this.validateText();\n var svgStyle;\n\n if (this.data.singleShape) {\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\n return;\n }\n\n if (this.isMasked && this.finalTransform._matMdf) {\n // Todo Benchmark if using this is better than getBBox\n this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n svgStyle = this.svgElement.style;\n var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n svgStyle.transform = translation;\n svgStyle.webkitTransform = translation;\n }\n }\n\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n return;\n }\n\n var i;\n var len;\n var count = 0;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var textPath;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n count += 1;\n } else {\n textSpan = this.textSpans[i];\n textPath = this.textPaths[i];\n renderedLetter = renderedLetters[count];\n count += 1;\n\n if (renderedLetter._mdf.m) {\n if (!this.isMasked) {\n textSpan.style.webkitTransform = renderedLetter.m;\n textSpan.style.transform = renderedLetter.m;\n } else {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n textSpan.style.opacity = renderedLetter.o;\n\n if (renderedLetter.sw && renderedLetter._mdf.sw) {\n textPath.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter.sc && renderedLetter._mdf.sc) {\n textPath.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter.fc && renderedLetter._mdf.fc) {\n textPath.setAttribute('fill', renderedLetter.fc);\n textPath.style.color = renderedLetter.fc;\n }\n }\n }\n\n if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n var boundingBox = this.innerElem.getBBox();\n\n if (this.currentBBox.w !== boundingBox.width) {\n this.currentBBox.w = boundingBox.width;\n this.svgElement.setAttribute('width', boundingBox.width);\n }\n\n if (this.currentBBox.h !== boundingBox.height) {\n this.currentBBox.h = boundingBox.height;\n this.svgElement.setAttribute('height', boundingBox.height);\n }\n\n var margin = 1;\n\n if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n this.currentBBox.w = boundingBox.width + margin * 2;\n this.currentBBox.h = boundingBox.height + margin * 2;\n this.currentBBox.x = boundingBox.x - margin;\n this.currentBBox.y = boundingBox.y - margin;\n this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n svgStyle = this.svgElement.style;\n var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n svgStyle.transform = svgTransform;\n svgStyle.webkitTransform = svgTransform;\n }\n }\n };\n\n function HCameraElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initHierarchy();\n var getProp = PropertyFactory.getProp;\n this.pe = getProp(this, data.pe, 0, 0, this);\n\n if (data.ks.p.s) {\n this.px = getProp(this, data.ks.p.x, 1, 0, this);\n this.py = getProp(this, data.ks.p.y, 1, 0, this);\n this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n } else {\n this.p = getProp(this, data.ks.p, 1, 0, this);\n }\n\n if (data.ks.a) {\n this.a = getProp(this, data.ks.a, 1, 0, this);\n }\n\n if (data.ks.or.k.length && data.ks.or.k[0].to) {\n var i;\n var len = data.ks.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.ks.or.k[i].to = null;\n data.ks.or.k[i].ti = null;\n }\n }\n\n this.or = getProp(this, data.ks.or, 1, degToRads, this);\n this.or.sh = true;\n this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n this.mat = new Matrix();\n this._prevMat = new Matrix();\n this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n this.finalTransform = {\n mProp: this\n };\n }\n\n extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n HCameraElement.prototype.setup = function () {\n var i;\n var len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n // [perspectiveElem,container]\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n perspectiveStyle = comp.perspectiveElem.style;\n containerStyle = comp.container.style;\n var perspective = this.pe.v + 'px';\n var origin = '0px 0px 0px';\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n perspectiveStyle.perspective = perspective;\n perspectiveStyle.webkitPerspective = perspective;\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n perspectiveStyle.transform = matrix;\n perspectiveStyle.webkitTransform = matrix;\n }\n }\n };\n\n HCameraElement.prototype.createElements = function () {};\n\n HCameraElement.prototype.hide = function () {};\n\n HCameraElement.prototype.renderFrame = function () {\n var _mdf = this._isFirstFrame;\n var i;\n var len;\n\n if (this.hierarchy) {\n len = this.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n }\n }\n\n if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n this.mat.reset();\n\n if (this.hierarchy) {\n len = this.hierarchy.length - 1;\n\n for (i = len; i >= 0; i -= 1) {\n var mTransf = this.hierarchy[i].finalTransform.mProp;\n this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n }\n }\n\n if (this.p) {\n this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n } else {\n this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n }\n\n if (this.a) {\n var diffVector;\n\n if (this.p) {\n diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n } else {\n diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n }\n\n var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n }\n\n this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n this.mat.translate(0, 0, this.pe.v);\n var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n if (hasMatrixChanged) {\n var matValue = this.mat.toCSS();\n containerStyle = comp.container.style;\n containerStyle.transform = matValue;\n containerStyle.webkitTransform = matValue;\n }\n\n if (this.pe._mdf) {\n perspectiveStyle = comp.perspectiveElem.style;\n perspectiveStyle.perspective = this.pe.v + 'px';\n perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n }\n }\n }\n\n this.mat.clone(this._prevMat);\n }\n }\n\n this._isFirstFrame = false;\n };\n\n HCameraElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n HCameraElement.prototype.destroy = function () {};\n\n HCameraElement.prototype.getBaseElement = function () {\n return null;\n };\n\n function HImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n HImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n var img = new Image();\n\n if (this.data.hasMask) {\n this.imageElem = createNS('image');\n this.imageElem.setAttribute('width', this.assetData.w + 'px');\n this.imageElem.setAttribute('height', this.assetData.h + 'px');\n this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.imageElem);\n this.baseElement.setAttribute('width', this.assetData.w);\n this.baseElement.setAttribute('height', this.assetData.h);\n } else {\n this.layerElement.appendChild(img);\n }\n\n img.crossOrigin = 'anonymous';\n img.src = assetPath;\n\n if (this.data.ln) {\n this.baseElement.setAttribute('id', this.data.ln);\n }\n };\n\n function HybridRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([BaseRenderer], HybridRendererBase);\n HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n HybridRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newDOMElement = element.getBaseElement();\n\n if (!newDOMElement) {\n return;\n }\n\n var layer = this.layers[pos];\n\n if (!layer.ddd || !this.supports3d) {\n if (this.threeDElements) {\n this.addTo3dContainer(newDOMElement, pos);\n } else {\n var i = 0;\n var nextDOMElement;\n var nextLayer;\n var tmpDOMElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n nextLayer = this.elements[i];\n tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n nextDOMElement = tmpDOMElement || nextDOMElement;\n }\n\n i += 1;\n }\n\n if (nextDOMElement) {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n }\n } else if (!layer.ddd || !this.supports3d) {\n this.layerElement.appendChild(newDOMElement);\n }\n }\n } else {\n this.addTo3dContainer(newDOMElement, pos);\n }\n };\n\n HybridRendererBase.prototype.createShape = function (data) {\n if (!this.supports3d) {\n return new SVGShapeElement(data, this.globalData, this);\n }\n\n return new HShapeElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextLottieElement(data, this.globalData, this);\n }\n\n return new HTextElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.globalData, this);\n return this.camera;\n };\n\n HybridRendererBase.prototype.createImage = function (data) {\n if (!this.supports3d) {\n return new IImageElement(data, this.globalData, this);\n }\n\n return new HImageElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createSolid = function (data) {\n if (!this.supports3d) {\n return new ISolidElement(data, this.globalData, this);\n }\n\n return new HSolidElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n return this.threeDElements[i].perspectiveElem;\n }\n\n i += 1;\n }\n\n return null;\n };\n\n HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n var perspectiveElem = createTag('div');\n var style;\n var containerStyle;\n styleDiv(perspectiveElem);\n var container = createTag('div');\n styleDiv(container);\n\n if (type === '3d') {\n style = perspectiveElem.style;\n style.width = this.globalData.compSize.w + 'px';\n style.height = this.globalData.compSize.h + 'px';\n var center = '50% 50%';\n style.webkitTransformOrigin = center;\n style.mozTransformOrigin = center;\n style.transformOrigin = center;\n containerStyle = container.style;\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n containerStyle.transform = matrix;\n containerStyle.webkitTransform = matrix;\n }\n\n perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n var threeDContainerData = {\n container: container,\n perspectiveElem: perspectiveElem,\n startPos: pos,\n endPos: pos,\n type: type\n };\n this.threeDElements.push(threeDContainerData);\n return threeDContainerData;\n };\n\n HybridRendererBase.prototype.build3dContainers = function () {\n var i;\n var len = this.layers.length;\n var lastThreeDContainerData;\n var currentContainer = '';\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n if (currentContainer !== '3d') {\n currentContainer = '3d';\n lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n } else {\n if (currentContainer !== '2d') {\n currentContainer = '2d';\n lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n }\n }\n\n len = this.threeDElements.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n }\n };\n\n HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (pos <= this.threeDElements[i].endPos) {\n var j = this.threeDElements[i].startPos;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.threeDElements[i].container.insertBefore(elem, nextElement);\n } else {\n this.threeDElements[i].container.appendChild(elem);\n }\n\n break;\n }\n\n i += 1;\n }\n };\n\n HybridRendererBase.prototype.configAnimation = function (animData) {\n var resizerElem = createTag('div');\n var wrapper = this.animationItem.wrapper;\n var style = resizerElem.style;\n style.width = animData.w + 'px';\n style.height = animData.h + 'px';\n this.resizerElem = resizerElem;\n styleDiv(resizerElem);\n style.transformStyle = 'flat';\n style.mozTransformStyle = 'flat';\n style.webkitTransformStyle = 'flat';\n\n if (this.renderConfig.className) {\n resizerElem.setAttribute('class', this.renderConfig.className);\n }\n\n wrapper.appendChild(resizerElem);\n style.overflow = 'hidden';\n var svg = createNS('svg');\n svg.setAttribute('width', '1');\n svg.setAttribute('height', '1');\n styleDiv(svg);\n this.resizerElem.appendChild(svg);\n var defs = createNS('defs');\n svg.appendChild(defs);\n this.data = animData; // Mask animation\n\n this.setupGlobalData(animData, svg);\n this.globalData.defs = defs;\n this.layers = animData.layers;\n this.layerElement = this.resizerElem;\n this.build3dContainers();\n this.updateContainerSize();\n };\n\n HybridRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.animationItem.container = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n HybridRendererBase.prototype.updateContainerSize = function () {\n var elementWidth = this.animationItem.wrapper.offsetWidth;\n var elementHeight = this.animationItem.wrapper.offsetHeight;\n var elementRel = elementWidth / elementHeight;\n var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n var sx;\n var sy;\n var tx;\n var ty;\n\n if (animationRel > elementRel) {\n sx = elementWidth / this.globalData.compSize.w;\n sy = elementWidth / this.globalData.compSize.w;\n tx = 0;\n ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n } else {\n sx = elementHeight / this.globalData.compSize.h;\n sy = elementHeight / this.globalData.compSize.h;\n tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n ty = 0;\n }\n\n var style = this.resizerElem.style;\n style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n style.transform = style.webkitTransform;\n };\n\n HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n HybridRendererBase.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n\n HybridRendererBase.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n\n HybridRendererBase.prototype.initItems = function () {\n this.buildAllItems();\n\n if (this.camera) {\n this.camera.setup();\n } else {\n var cWidth = this.globalData.compSize.w;\n var cHeight = this.globalData.compSize.h;\n var i;\n var len = this.threeDElements.length;\n\n for (i = 0; i < len; i += 1) {\n var style = this.threeDElements[i].perspectiveElem.style;\n style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n style.perspective = style.webkitPerspective;\n }\n }\n };\n\n HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n var floatingContainer = createTag('div');\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n function HCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = !data.hasMask;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n HCompElement.prototype.createContainerElements = function () {\n this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n if (this.data.hasMask) {\n this.svgElement.setAttribute('width', this.data.w);\n this.svgElement.setAttribute('height', this.data.h);\n this.transformedElement = this.baseElement;\n } else {\n this.transformedElement = this.layerElement;\n }\n };\n\n HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n var j = 0;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(elem, nextElement);\n } else {\n this.layerElement.appendChild(elem);\n }\n };\n\n HCompElement.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n function HybridRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n },\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([HybridRendererBase], HybridRenderer);\n\n HybridRenderer.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n var CompExpressionInterface = function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0;\n var len = comp.layers.length;\n\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n\n i += 1;\n }\n\n return null; // return {active:false};\n }\n\n Object.defineProperty(_thisLayerFunction, '_name', {\n value: comp.data.nm\n });\n _thisLayerFunction.layer = _thisLayerFunction;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n _thisLayerFunction.displayStartTime = 0;\n _thisLayerFunction.numLayers = comp.layers.length;\n return _thisLayerFunction;\n };\n }();\n\n function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n /* eslint-disable */\n\n /*\r\n Copyright 2014 David Bau.\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining\r\n a copy of this software and associated documentation files (the\r\n \"Software\"), to deal in the Software without restriction, including\r\n without limitation the rights to use, copy, modify, merge, publish,\r\n distribute, sublicense, and/or sell copies of the Software, and to\r\n permit persons to whom the Software is furnished to do so, subject to\r\n the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be\r\n included in all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n */\n function seedRandom(pool, math) {\n //\n // The following constants are related to IEEE 754 limits.\n //\n var global = this,\n width = 256,\n // each RC4 output is 0 <= x < 256\n chunks = 6,\n // at least six RC4 outputs for each double\n digits = 52,\n // there are 52 significant digits in a double\n rngname = 'random',\n // 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 // seedrandom()\n // This is the seedrandom function described above.\n //\n\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options === true ? {\n entropy: true\n } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n var arc4 = new ARC4(key); // 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\n var prng = function prng() {\n var n = arc4.g(chunks),\n // Start with a numerator n < 2 ^ 48\n d = startdenom,\n // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n\n while (n < significance) {\n // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n\n d *= width; // denominator and generating a\n\n x = arc4.g(1); // new least-significant-byte.\n }\n\n while (n >= overflow) {\n // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n\n d /= 2; // right using integer math until\n\n x >>>= 1; // we have exactly the desired bits.\n }\n\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function () {\n return arc4.g(4) | 0;\n };\n\n prng.quick = function () {\n return arc4.g(4) / 0x100000000;\n };\n\n prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n return (options.pass || callback || 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) {\n copy(state, arc4);\n } // Only provide the .state method if requested via options.state.\n\n\n prng.state = function () {\n return copy(arc4, {});\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\n\n if (is_math_call) {\n math[rngname] = prng;\n return seed;\n } // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n }\n\n math['seed' + rngname] = seedrandom; //\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 //\n\n function ARC4(key) {\n var t,\n keylen = key.length,\n me = this,\n i = 0,\n j = me.i = me.j = 0,\n s = me.S = []; // The empty key [] is treated as [0].\n\n if (!keylen) {\n key = [keylen++];\n } // Set up S using the standard key scheduling algorithm.\n\n\n while (i < width) {\n s[i] = i++;\n }\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 } // The \"g\" method returns the next (count) outputs as one number.\n\n\n me.g = function (count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t,\n r = 0,\n i = me.i,\n j = me.j,\n s = me.S;\n\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\n me.i = i;\n me.j = j;\n return r; // 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 };\n } //\n // copy()\n // Copies internal state of ARC4 to or from a plain object.\n //\n\n\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n } //\n // flatten()\n // Converts an object tree to nested arrays of strings.\n //\n\n\n function flatten(obj, depth) {\n var result = [],\n typ = _typeof$2(obj),\n prop;\n\n if (depth && typ == 'object') {\n for (prop in obj) {\n try {\n result.push(flatten(obj[prop], depth - 1));\n } catch (e) {}\n }\n }\n\n return result.length ? result : typ == 'string' ? obj : obj + '\\0';\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 //\n\n\n function mixkey(seed, key) {\n var stringseed = seed + '',\n smear,\n j = 0;\n\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n\n return tostring(key);\n } //\n // autoseed()\n // Returns an object for autoseeding, using window.crypto and Node crypto\n // module if available.\n //\n\n\n function autoseed() {\n try {\n if (nodecrypto) {\n return tostring(nodecrypto.randomBytes(width));\n }\n\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\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 // tostring()\n // Converts an array of charcodes to a string\n //\n\n\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\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 //\n\n\n mixkey(math.random(), pool); //\n // Nodejs and AMD support: export the implementation as a module using\n // either convention.\n //\n // End anonymous scope, and pass initial values.\n }\n\n ;\n\n function initialize$2(BMMath) {\n seedRandom([], BMMath);\n }\n\n var propTypes = {\n SHAPE: 'shape'\n };\n\n function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n var ExpressionManager = function () {\n 'use strict';\n\n var ob = {};\n var Math = BMMath;\n var window = null;\n var document = null;\n var XMLHttpRequest = null;\n var fetch = null;\n var frames = null;\n var _lottieGlobal = {};\n initialize$2(BMMath);\n\n function resetFrame() {\n _lottieGlobal = {};\n }\n\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';\n }\n\n function $bm_neg(a) {\n var tOfA = _typeof$1(a);\n\n if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {\n return -a;\n }\n\n if ($bm_isInstanceOfArray(a)) {\n var i;\n var lenA = a.length;\n var retArr = [];\n\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n\n return retArr;\n }\n\n if (a.propType) {\n return a.v;\n }\n\n return -a;\n }\n\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n function sum(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] += b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a + b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] + b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n var add = sum;\n\n function sub(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a, 10);\n }\n\n if (tOfB === 'string') {\n b = parseInt(b, 10);\n }\n\n return a - b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] -= b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a - b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] - b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n function mul(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function div(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a, 10);\n }\n\n if (typeof b === 'string') {\n b = parseInt(b, 10);\n }\n\n return a % b;\n }\n\n var $bm_sum = sum;\n var $bm_sub = sub;\n var $bm_mul = mul;\n var $bm_div = div;\n var $bm_mod = mod;\n\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n\n return Math.min(Math.max(num, min), max);\n }\n\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n\n var radians_to_degrees = radiansToDegrees;\n\n function degreesToRadians(val) {\n return val * degToRads;\n }\n\n var degrees_to_radians = radiansToDegrees;\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n function length(arr1, arr2) {\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\n arr2 = arr2 || 0;\n return Math.abs(arr1 - arr2);\n }\n\n if (!arr2) {\n arr2 = helperLengthArray;\n }\n\n var i;\n var len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n\n return Math.sqrt(addedLength);\n }\n\n function normalize(vec) {\n return div(vec, length(vec));\n }\n\n function rgbToHsl(val) {\n var r = val[0];\n var g = val[1];\n var b = val[2];\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n\n if (max === min) {\n h = 0; // achromatic\n\n s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n\n case g:\n h = (b - r) / d + 2;\n break;\n\n case b:\n h = (r - g) / d + 4;\n break;\n\n default:\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, val[3]];\n }\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n var r;\n var g;\n var b;\n\n if (s === 0) {\n r = l; // achromatic\n\n b = l; // achromatic\n\n g = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r, g, b, val[3]];\n }\n\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === undefined || value2 === undefined) {\n value1 = tMin;\n value2 = tMax;\n tMin = 0;\n tMax = 1;\n }\n\n if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n\n if (t <= tMin) {\n return value1;\n }\n\n if (t >= tMax) {\n return value2;\n }\n\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n\n var i;\n var len = value1.length;\n var arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n\n return arr;\n }\n\n function random(min, max) {\n if (max === undefined) {\n if (min === undefined) {\n min = 0;\n max = 1;\n } else {\n max = min;\n min = undefined;\n }\n }\n\n if (max.length) {\n var i;\n var len = max.length;\n\n if (!min) {\n min = createTypedArray('float32', len);\n }\n\n var arr = createTypedArray('float32', len);\n var rnd = BMMath.random();\n\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n\n return arr;\n }\n\n if (min === undefined) {\n min = 0;\n }\n\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n\n function createPath(points, inTangents, outTangents, closed) {\n var i;\n var len = points.length;\n var path = shapePool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0];\n var inVertexPoint;\n var outVertexPoint;\n\n for (i = 0; i < len; i += 1) {\n inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n }\n\n return path;\n }\n\n function initiateExpression(elem, data, property) {\n // Bail out if we don't want expressions\n function noOp(_value) {\n return _value;\n }\n\n if (!elem.globalData.renderConfig.runExpressions) {\n return noOp;\n }\n\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n var _needsRandom = val.indexOf('random') !== -1;\n\n var elemType = elem.data.ty;\n var transform;\n var $bm_transform;\n var content;\n var effect;\n var thisProperty = property;\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\n Object.defineProperty(thisProperty, 'value', {\n get: function get() {\n return thisProperty.v;\n }\n });\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n elem.comp.displayStartTime = 0;\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n var width = elem.data.sw ? elem.data.sw : 0;\n var height = elem.data.sh ? elem.data.sh : 0;\n var name = elem.data.nm;\n var loopIn;\n var loop_in;\n var loopOut;\n var loop_out;\n var smooth;\n var toWorld;\n var fromWorld;\n var fromComp;\n var toComp;\n var fromCompToSurface;\n var position;\n var rotation;\n var anchorPoint;\n var scale;\n var thisLayer;\n var thisComp;\n var mask;\n var valueAtTime;\n var velocityAtTime;\n var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n var numKeys = property.kf ? data.k.length : 0;\n var active = !this.data || this.data.hd !== true;\n\n var wiggle = function wiggle(freq, amp) {\n var iWiggle;\n var j;\n var lenWiggle = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', lenWiggle);\n freq = 5;\n var iterations = Math.floor(time * freq);\n iWiggle = 0;\n j = 0;\n\n while (iWiggle < iterations) {\n // var rnd = BMMath.random();\n for (j = 0; j < lenWiggle; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n }\n\n iWiggle += 1;\n } // var rnd2 = BMMath.random();\n\n\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = createTypedArray('float32', lenWiggle);\n\n if (lenWiggle > 1) {\n for (j = 0; j < lenWiggle; j += 1) {\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n }\n\n return arr;\n }\n\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }.bind(this);\n\n if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n\n if (thisProperty.smooth) {\n smooth = thisProperty.smooth.bind(thisProperty);\n }\n\n function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }\n\n function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }\n\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n function lookAt(elem1, elem2) {\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n return [yaw, pitch, 0];\n }\n\n function easeOut(t, tMin, tMax, val1, val2) {\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n }\n\n function easeIn(t, tMin, tMax, val1, val2) {\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n }\n\n function ease(t, tMin, tMax, val1, val2) {\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n }\n\n function applyEase(fn, t, tMin, tMax, val1, val2) {\n if (val1 === undefined) {\n val1 = tMin;\n val2 = tMax;\n } else {\n t = (t - tMin) / (tMax - tMin);\n }\n\n if (t > 1) {\n t = 1;\n } else if (t < 0) {\n t = 0;\n }\n\n var mult = fn(t);\n\n if ($bm_isInstanceOfArray(val1)) {\n var iKey;\n var lenKey = val1.length;\n var arr = createTypedArray('float32', lenKey);\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n }\n\n return arr;\n }\n\n return (val2 - val1) * mult + val1;\n }\n\n function nearestKey(time) {\n var iKey;\n var lenKey = data.k.length;\n var index;\n var keyTime;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n index = 0;\n keyTime = 0;\n } else {\n index = -1;\n time *= elem.comp.globalData.frameRate;\n\n if (time < data.k[0].t) {\n index = 1;\n keyTime = data.k[0].t;\n } else {\n for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n if (time === data.k[iKey].t) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n break;\n } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n index = iKey + 2;\n keyTime = data.k[iKey + 1].t;\n } else {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n\n break;\n }\n }\n\n if (index === -1) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n }\n }\n\n var obKey = {};\n obKey.index = index;\n obKey.time = keyTime / elem.comp.globalData.frameRate;\n return obKey;\n }\n\n function key(ind) {\n var obKey;\n var iKey;\n var lenKey;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\n }\n\n ind -= 1;\n obKey = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: []\n };\n var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n lenKey = arr.length;\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n obKey[iKey] = arr[iKey];\n obKey.value[iKey] = arr[iKey];\n }\n\n return obKey;\n }\n\n function framesToTime(fr, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return fr / fps;\n }\n\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return t * fps;\n }\n\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n\n function substring(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substring(init);\n }\n\n return value.substring(init, end);\n }\n\n return '';\n }\n\n function substr(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substr(init);\n }\n\n return value.substr(init, end);\n }\n\n return '';\n }\n\n function posterizeTime(framesPerSecond) {\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n value = valueAtTime(time);\n }\n\n var time;\n var velocity;\n var value;\n var text;\n var textIndex;\n var textTotal;\n var selectorValue;\n var index = elem.data.ind;\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n var parent;\n var randSeed = Math.floor(Math.random() * 1000000);\n var globalData = elem.globalData;\n\n function executeExpression(_value) {\n // globalData.pushExpression();\n value = _value;\n\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n return value;\n }\n\n if (this.propType === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\n }\n\n if (!thisLayer) {\n text = elem.layerInterface.text;\n thisLayer = elem.layerInterface;\n thisComp = elem.comp.compInterface;\n toWorld = thisLayer.toWorld.bind(thisLayer);\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\n fromComp = thisLayer.fromComp.bind(thisLayer);\n toComp = thisLayer.toComp.bind(thisLayer);\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n fromCompToSurface = fromComp;\n }\n\n if (!transform) {\n transform = elem.layerInterface('ADBE Transform Group');\n $bm_transform = transform;\n\n if (transform) {\n anchorPoint = transform.anchorPoint;\n /* position = transform.position;\r\n rotation = transform.rotation;\r\n scale = transform.scale; */\n }\n }\n\n if (elemType === 4 && !content) {\n content = thisLayer('ADBE Root Vectors Group');\n }\n\n if (!effect) {\n effect = thisLayer(4);\n }\n\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n if (_needsRandom) {\n seedRandom(randSeed + time);\n }\n\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n\n expression_function();\n this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n return scoped_bm_rt;\n } // Bundlers will see these as dead code and unless we reference them\n\n\n executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n return executeExpression;\n }\n\n ob.initiateExpression = initiateExpression;\n ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath, _lottieGlobal];\n ob.resetFrame = resetFrame;\n return ob;\n }();\n\n var Expressions = function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n ob.resetFrame = ExpressionManager.resetFrame;\n\n function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n\n function pushExpression() {\n stackCount += 1;\n }\n\n function popExpression() {\n stackCount -= 1;\n\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n\n function releaseInstances() {\n var i;\n var len = registers.length;\n\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n\n registers.length = 0;\n }\n\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n animation.renderer.globalData.pushExpression = pushExpression;\n animation.renderer.globalData.popExpression = popExpression;\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n }\n\n return ob;\n }();\n\n var MaskManagerInterface = function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function get() {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n\n return this._mask.prop;\n }\n });\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n get: function get() {\n if (this._mask.op.k) {\n this._mask.op.getValue();\n }\n\n return this._mask.op.v * 100;\n }\n });\n\n var MaskManager = function MaskManager(maskManager) {\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n var i;\n var len = maskManager.viewData.length;\n\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n\n var maskFunction = function maskFunction(name) {\n i = 0;\n\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n return maskFunction;\n };\n\n return MaskManager;\n }();\n\n var ExpressionPropertyInterface = function () {\n var defaultUnidimensionalValue = {\n pv: 0,\n v: 0,\n mult: 1\n };\n var defaultMultidimensionalValue = {\n pv: [0, 0, 0],\n v: [0, 0, 0],\n mult: 1\n };\n\n function completeProperty(expressionValue, property, type) {\n Object.defineProperty(expressionValue, 'velocity', {\n get: function get() {\n return property.getVelocityAtTime(property.comp.currentFrame);\n }\n });\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n }\n\n var value = '';\n\n if ('s' in property.keyframes[pos - 1]) {\n value = property.keyframes[pos - 1].s;\n } else if ('e' in property.keyframes[pos - 2]) {\n value = property.keyframes[pos - 2].e;\n } else {\n value = property.keyframes[pos - 2].s;\n }\n\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n valueProp.value = type === 'unidimensional' ? value[0] : value;\n return valueProp;\n };\n\n expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n\n function UnidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultUnidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var val = property.pv * mult;\n var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n val = property.v * mult;\n\n if (expressionValue.value !== val) {\n expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n }\n\n return expressionValue;\n };\n }\n\n function MultidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultMultidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var len = property.data && property.data.l || property.pv.length;\n var expressionValue = createTypedArray('float32', len);\n var arrValue = createTypedArray('float32', len);\n expressionValue.value = arrValue;\n completeProperty(expressionValue, property, 'multidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n for (var i = 0; i < len; i += 1) {\n arrValue[i] = property.v[i] * mult;\n expressionValue[i] = arrValue[i];\n }\n\n return expressionValue;\n };\n } // TODO: try to avoid using this getter\n\n\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n\n return function (property) {\n if (!property) {\n return defaultGetter;\n }\n\n if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n }\n\n return MultidimensionalPropertyInterface(property);\n };\n }();\n\n var TransformExpressionInterface = function () {\n return function (transform) {\n function _thisFunction(name) {\n switch (name) {\n case 'scale':\n case 'Scale':\n case 'ADBE Scale':\n case 6:\n return _thisFunction.scale;\n\n case 'rotation':\n case 'Rotation':\n case 'ADBE Rotation':\n case 'ADBE Rotate Z':\n case 10:\n return _thisFunction.rotation;\n\n case 'ADBE Rotate X':\n return _thisFunction.xRotation;\n\n case 'ADBE Rotate Y':\n return _thisFunction.yRotation;\n\n case 'position':\n case 'Position':\n case 'ADBE Position':\n case 2:\n return _thisFunction.position;\n\n case 'ADBE Position_0':\n return _thisFunction.xPosition;\n\n case 'ADBE Position_1':\n return _thisFunction.yPosition;\n\n case 'ADBE Position_2':\n return _thisFunction.zPosition;\n\n case 'anchorPoint':\n case 'AnchorPoint':\n case 'Anchor Point':\n case 'ADBE AnchorPoint':\n case 1:\n return _thisFunction.anchorPoint;\n\n case 'opacity':\n case 'Opacity':\n case 11:\n return _thisFunction.opacity;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisFunction, 'rotation', {\n get: ExpressionPropertyInterface(transform.r || transform.rz)\n });\n Object.defineProperty(_thisFunction, 'zRotation', {\n get: ExpressionPropertyInterface(transform.rz || transform.r)\n });\n Object.defineProperty(_thisFunction, 'xRotation', {\n get: ExpressionPropertyInterface(transform.rx)\n });\n Object.defineProperty(_thisFunction, 'yRotation', {\n get: ExpressionPropertyInterface(transform.ry)\n });\n Object.defineProperty(_thisFunction, 'scale', {\n get: ExpressionPropertyInterface(transform.s)\n });\n\n var _px;\n\n var _py;\n\n var _pz;\n\n var _transformFactory;\n\n if (transform.p) {\n _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n _px = ExpressionPropertyInterface(transform.px);\n _py = ExpressionPropertyInterface(transform.py);\n\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n\n Object.defineProperty(_thisFunction, 'position', {\n get: function get() {\n if (transform.p) {\n return _transformFactory();\n }\n\n return [_px(), _py(), _pz ? _pz() : 0];\n }\n });\n Object.defineProperty(_thisFunction, 'xPosition', {\n get: ExpressionPropertyInterface(transform.px)\n });\n Object.defineProperty(_thisFunction, 'yPosition', {\n get: ExpressionPropertyInterface(transform.py)\n });\n Object.defineProperty(_thisFunction, 'zPosition', {\n get: ExpressionPropertyInterface(transform.pz)\n });\n Object.defineProperty(_thisFunction, 'anchorPoint', {\n get: ExpressionPropertyInterface(transform.a)\n });\n Object.defineProperty(_thisFunction, 'opacity', {\n get: ExpressionPropertyInterface(transform.o)\n });\n Object.defineProperty(_thisFunction, 'skew', {\n get: ExpressionPropertyInterface(transform.sk)\n });\n Object.defineProperty(_thisFunction, 'skewAxis', {\n get: ExpressionPropertyInterface(transform.sa)\n });\n Object.defineProperty(_thisFunction, 'orientation', {\n get: ExpressionPropertyInterface(transform.or)\n });\n return _thisFunction;\n };\n }();\n\n var LayerExpressionInterface = function () {\n function getMatrix(time) {\n var toWorldMat = new Matrix();\n\n if (time !== undefined) {\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n propMatrix.clone(toWorldMat);\n } else {\n var transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat;\n }\n\n function toWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.applyPoint(toWorldMat, arr);\n }\n\n function toWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.applyPoint(toWorldMat, arr);\n }\n\n function fromWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.invertPoint(toWorldMat, arr);\n }\n\n function fromWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.invertPoint(toWorldMat, arr);\n }\n\n function applyPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n function invertPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.inversePoint(arr);\n }\n\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n\n return function (elem) {\n var transformInterface;\n\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\n }\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Root Vectors Group':\n case 'Contents':\n case 2:\n return _thisLayerFunction.shapeInterface;\n\n case 1:\n case 6:\n case 'Transform':\n case 'transform':\n case 'ADBE Transform Group':\n return transformInterface;\n\n case 4:\n case 'ADBE Effect Parade':\n case 'effects':\n case 'Effects':\n return _thisLayerFunction.effect;\n\n case 'ADBE Text Properties':\n return _thisLayerFunction.textInterface;\n\n default:\n return null;\n }\n }\n\n _thisLayerFunction.getMatrix = getMatrix;\n _thisLayerFunction.invertPoint = invertPoint;\n _thisLayerFunction.applyPoint = applyPoint;\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.toWorldVec = toWorldVec;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.fromWorldVec = fromWorldVec;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sampleImage = sampleImage;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n Object.defineProperties(_thisLayerFunction, {\n hasParent: {\n get: function get() {\n return elem.hierarchy.length;\n }\n },\n parent: {\n get: function get() {\n return elem.hierarchy[0].layerInterface;\n }\n },\n rotation: getDescriptor(transformInterface, 'rotation'),\n scale: getDescriptor(transformInterface, 'scale'),\n position: getDescriptor(transformInterface, 'position'),\n opacity: getDescriptor(transformInterface, 'opacity'),\n anchorPoint: anchorPointDescriptor,\n anchor_point: anchorPointDescriptor,\n transform: {\n get: function get() {\n return transformInterface;\n }\n },\n active: {\n get: function get() {\n return elem.isInRange;\n }\n }\n });\n _thisLayerFunction.startTime = elem.data.st;\n _thisLayerFunction.index = elem.data.ind;\n _thisLayerFunction.source = elem.data.refId;\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n _thisLayerFunction._name = elem.data.nm;\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n }();\n\n var propertyGroupFactory = function () {\n return function (interfaceFunction, parentPropertyGroup) {\n return function (val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return parentPropertyGroup(val - 1);\n };\n };\n }();\n\n var PropertyInterface = function () {\n return function (propertyName, propertyGroup) {\n var interfaceFunction = {\n _name: propertyName\n };\n\n function _propertyGroup(val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return propertyGroup(val - 1);\n }\n\n return _propertyGroup;\n };\n }();\n\n var EffectsExpressionInterface = function () {\n var ob = {\n createEffectsInterface: createEffectsInterface\n };\n\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effectsManager) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i;\n var len = elem.effectsManager.effectElements.length;\n\n for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n }\n\n var effects = elem.data.ef || [];\n\n var groupInterface = function groupInterface(name) {\n i = 0;\n len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return effects.length;\n }\n });\n return groupInterface;\n }\n\n return null;\n }\n\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef;\n var i = 0;\n var len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n if (effects[i].ty === 5) {\n return effectElements[i];\n }\n\n return effectElements[i]();\n }\n\n i += 1;\n }\n\n throw new Error();\n }\n\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n var effectElements = [];\n var i;\n var len = data.ef.length;\n\n for (i = 0; i < len; i += 1) {\n if (data.ef[i].ty === 5) {\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n } else {\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n }\n }\n\n if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function get() {\n return effectElements[0]();\n }\n });\n }\n\n Object.defineProperties(groupInterface, {\n numProperties: {\n get: function get() {\n return data.np;\n }\n },\n _name: {\n value: data.nm\n },\n propertyGroup: {\n value: _propertyGroup\n }\n });\n groupInterface.enabled = data.en !== 0;\n groupInterface.active = groupInterface.enabled;\n return groupInterface;\n }\n\n function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n\n return expressionProperty();\n }\n\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n }\n\n return interfaceFunction;\n }\n\n return ob;\n }();\n\n var ShapePathInterface = function () {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\n\n function interfaceFunction(val) {\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n return interfaceFunction.path;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n path: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n shape: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n _name: {\n value: shape.nm\n },\n ix: {\n value: shape.ix\n },\n propertyIndex: {\n value: shape.ix\n },\n mn: {\n value: shape.mn\n },\n propertyGroup: {\n value: propertyGroup\n }\n });\n return interfaceFunction;\n };\n }();\n\n var ShapeExpressionInterface = function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i;\n var len = shapes ? shapes.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'fl') {\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'st') {\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tm') {\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n } else if (shapes[i].ty === 'el') {\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sr') {\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sh') {\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rc') {\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rd') {\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rp') {\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'gf') {\n arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else {\n arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n }\n }\n\n return arr;\n }\n\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n\n return null;\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.transform = transformInterface;\n interfaceFunction.propertyIndex = shape.cix;\n interfaceFunction._name = shape.nm;\n return interfaceFunction;\n }\n\n function groupInterfaceFactory(shape, view, propertyGroup) {\n var interfaceFunction = function _interfaceFunction(value) {\n switch (value) {\n case 'ADBE Vectors Group':\n case 'Contents':\n case 2:\n return interfaceFunction.content;\n // Not necessary for now. Keeping them here in case a new case appears\n // case 'ADBE Vector Transform Group':\n // case 3:\n\n default:\n return interfaceFunction.transform;\n }\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.content = content;\n interfaceFunction.transform = transformInterface;\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n }); // interfaceFunction.content = interfaceFunction;\n\n interfaceFunction.numProperties = shape.np;\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.nm = shape.nm;\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function fillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Start Point' || val === 'start point') {\n return interfaceFunction.startPoint;\n }\n\n if (val === 'End Point' || val === 'end point') {\n return interfaceFunction.endPoint;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n startPoint: {\n get: ExpressionPropertyInterface(view.s)\n },\n endPoint: {\n get: ExpressionPropertyInterface(view.e)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n type: {\n get: function get() {\n return 'a';\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function defaultInterfaceFactory() {\n function interfaceFunction() {\n return null;\n }\n\n return interfaceFunction;\n }\n\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n });\n }\n\n var i;\n var len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n strokeWidth: {\n get: ExpressionPropertyInterface(view.w)\n },\n dash: {\n get: function get() {\n return dashOb;\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n return interfaceFunction;\n }\n\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === 'End' || val === 'end') {\n return interfaceFunction.end;\n }\n\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.propertyGroup = propertyGroup;\n Object.defineProperties(interfaceFunction, {\n start: {\n get: ExpressionPropertyInterface(view.s)\n },\n end: {\n get: ExpressionPropertyInterface(view.e)\n },\n offset: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n\n if (shape.o.ix === value || value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n\n if (shape.p.ix === value || value === 'Position') {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n\n if (shape.s.ix === value || value === 'Scale') {\n return interfaceFunction.scale;\n }\n\n if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n return interfaceFunction.skew;\n }\n\n if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n }\n\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n opacity: {\n get: ExpressionPropertyInterface(view.transform.mProps.o)\n },\n position: {\n get: ExpressionPropertyInterface(view.transform.mProps.p)\n },\n anchorPoint: {\n get: ExpressionPropertyInterface(view.transform.mProps.a)\n },\n scale: {\n get: ExpressionPropertyInterface(view.transform.mProps.s)\n },\n rotation: {\n get: ExpressionPropertyInterface(view.transform.mProps.r)\n },\n skew: {\n get: ExpressionPropertyInterface(view.transform.mProps.sk)\n },\n skewAxis: {\n get: ExpressionPropertyInterface(view.transform.mProps.sa)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.ty = 'tr';\n interfaceFunction.mn = shape.mn;\n interfaceFunction.propertyGroup = propertyGroup;\n return interfaceFunction;\n }\n\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n\n if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n return interfaceFunction.outerRadius;\n }\n\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n\n if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n return interfaceFunction.innerRadius;\n }\n\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n }\n\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n rotation: {\n get: ExpressionPropertyInterface(prop.r)\n },\n points: {\n get: ExpressionPropertyInterface(prop.pt)\n },\n outerRadius: {\n get: ExpressionPropertyInterface(prop.or)\n },\n outerRoundness: {\n get: ExpressionPropertyInterface(prop.os)\n },\n innerRadius: {\n get: ExpressionPropertyInterface(prop.ir)\n },\n innerRoundness: {\n get: ExpressionPropertyInterface(prop.is)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n roundness: {\n get: ExpressionPropertyInterface(prop.r)\n },\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function roundedInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.r.ix === value || value === 'Round Corners 1') {\n return interfaceFunction.radius;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n radius: {\n get: ExpressionPropertyInterface(prop.rd)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.c.ix === value || value === 'Copies') {\n return interfaceFunction.copies;\n }\n\n if (shape.o.ix === value || value === 'Offset') {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n copies: {\n get: ExpressionPropertyInterface(prop.c)\n },\n offset: {\n get: ExpressionPropertyInterface(prop.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n return function (shapes, view, propertyGroup) {\n var interfaces;\n\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n value = value === undefined ? 1 : value;\n\n if (value === 0) {\n return propertyGroup;\n }\n\n return interfaces[value - 1];\n }\n\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function parentGroupWrapper() {\n return propertyGroup;\n }\n\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n _interfaceFunction.numProperties = interfaces.length;\n _interfaceFunction._name = 'Contents';\n return _interfaceFunction;\n };\n }();\n\n var TextExpressionInterface = function () {\n return function (elem) {\n var _sourceText;\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Text Document':\n return _thisLayerFunction.sourceText;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisLayerFunction, 'sourceText', {\n get: function get() {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\n\n if (!_sourceText || stringValue !== _sourceText.value) {\n _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n\n Object.defineProperty(_sourceText, 'style', {\n get: function get() {\n return {\n fillColor: elem.textProperty.currentData.fc\n };\n }\n });\n }\n\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n\n function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n var FootageInterface = function () {\n var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n var currentPropertyName = '';\n var currentProperty = elem.getFootageData();\n\n function init() {\n currentPropertyName = '';\n currentProperty = elem.getFootageData();\n return searchProperty;\n }\n\n function searchProperty(value) {\n if (currentProperty[value]) {\n currentPropertyName = value;\n currentProperty = currentProperty[value];\n\n if (_typeof(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n var propertyNameIndex = value.indexOf(currentPropertyName);\n\n if (propertyNameIndex !== -1) {\n var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n currentProperty = currentProperty[index];\n\n if (_typeof(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n return '';\n }\n\n return init;\n };\n\n var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n function interfaceFunction(value) {\n if (value === 'Outline') {\n return interfaceFunction.outlineInterface();\n }\n\n return null;\n }\n\n interfaceFunction._name = 'Outline';\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n return interfaceFunction;\n };\n\n return function (elem) {\n function _interfaceFunction(value) {\n if (value === 'Data') {\n return _interfaceFunction.dataInterface;\n }\n\n return null;\n }\n\n _interfaceFunction._name = 'Data';\n _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n return _interfaceFunction;\n };\n }();\n\n var interfaces = {\n layer: LayerExpressionInterface,\n effects: EffectsExpressionInterface,\n comp: CompExpressionInterface,\n shape: ShapeExpressionInterface,\n text: TextExpressionInterface,\n footage: FootageInterface\n };\n\n function getInterface(type) {\n return interfaces[type] || null;\n }\n\n var expressionHelpers = function () {\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n prop.initiateExpression = ExpressionManager.initiateExpression;\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n }\n }\n\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n\n return this._cachingAtTime.value;\n }\n\n function getSpeedAtTime(frameNum) {\n var delta = -0.01;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var speed = 0;\n\n if (v1.length) {\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n\n return speed;\n }\n\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n\n var delta = -0.001; // frameNum += this.elem.data.st;\n\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n\n if (v1.length) {\n velocity = createTypedArray('float32', v1.length);\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n // removing frameRate\n // if needed, don't add it here\n // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n velocity[i] = (v2[i] - v1[i]) / delta;\n }\n } else {\n velocity = (v2 - v1) / delta;\n }\n\n return velocity;\n }\n\n function getStaticValueAtTime() {\n return this.pv;\n }\n\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n\n return {\n searchExpressions: searchExpressions,\n getSpeedAtTime: getSpeedAtTime,\n getVelocityAtTime: getVelocityAtTime,\n getValueAtTime: getValueAtTime,\n getStaticValueAtTime: getStaticValueAtTime,\n setGroupProperty: setGroupProperty\n };\n }();\n\n function addPropertyDecorator() {\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var firstKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n } else {\n cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n }\n\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (iterations % 2 !== 0) {\n return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n\n return ret;\n }\n\n return (endV - initV) * repeats + current;\n } else if (type === 'continue') {\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n }\n\n return ret;\n }\n\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n }\n\n return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var lastKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n lastKeyFrame = keyframes[duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n } else {\n cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n }\n\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n if (iterations % 2 === 0) {\n return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n\n return ret;\n }\n\n return current - (endV - initV) * repeats;\n } else if (type === 'continue') {\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return ret;\n }\n\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n\n if (samples <= 1) {\n return this.pv;\n }\n\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n var initFrame = currentTime - width;\n var endFrame = currentTime + width;\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n var i = 0;\n var j = 0;\n var value;\n\n if (this.pv.length) {\n value = createTypedArray('float32', this.pv.length);\n } else {\n value = 0;\n }\n\n var sampleValue;\n\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] += sampleValue[j];\n }\n } else {\n value += sampleValue;\n }\n\n i += 1;\n }\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] /= samples;\n }\n } else {\n value /= samples;\n }\n\n return value;\n }\n\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix()\n };\n } /// /\n\n\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n var anchor = this.a.getValueAtTime(time);\n matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n }\n\n if (this.appliedTransformations < 2) {\n var scale = this.s.getValueAtTime(time);\n matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n var skew = this.sk.getValueAtTime(time);\n var skewAxis = this.sa.getValueAtTime(time);\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n var rotation = this.r.getValueAtTime(time);\n matrix.rotate(-rotation * this.r.mult);\n } else if (!this.r && this.appliedTransformations < 4) {\n var rotationZ = this.rz.getValueAtTime(time);\n var rotationY = this.ry.getValueAtTime(time);\n var rotationX = this.rx.getValueAtTime(time);\n var orientation = this.or.getValueAtTime(time);\n matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n }\n\n if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\n\n if (this.data.p.z) {\n var positionZ = this.pz.getValueAtTime(time);\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n } else {\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n }\n } else {\n var position = this.p.getValueAtTime(time);\n matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n }\n\n return matrix; /// /\n }\n\n function getTransformStaticValueAtTime() {\n return this.v.clone(new Matrix());\n }\n\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n\n var propertyGetProp = PropertyFactory.getProp;\n\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n // prop.loopOut = loopOut;\n // prop.loopIn = loopIn;\n\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.smooth = smooth;\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n prop.propertyIndex = data.ix;\n var value = 0;\n\n if (type !== 0) {\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value: value\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n\n return prop;\n };\n\n function getShapeValueAtTime(frameNum) {\n // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n shapeValue: shapePool.clone(this.pv),\n lastIndex: 0,\n lastTime: initialDefaultFrame\n };\n }\n\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastTime) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n this._cachingAtTime.lastTime = frameNum;\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n }\n\n return this._cachingAtTime.shapeValue;\n }\n\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n function ShapeExpressions() {}\n\n ShapeExpressions.prototype = {\n vertices: function vertices(prop, time) {\n if (this.k) {\n this.getValue();\n }\n\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n var i;\n var len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = createSizedArray(len);\n\n for (i = 0; i < len; i += 1) {\n if (prop === 'i' || prop === 'o') {\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n } else {\n arr[i] = [vertices[i][0], vertices[i][1]];\n }\n }\n\n return arr;\n },\n points: function points(time) {\n return this.vertices('v', time);\n },\n inTangents: function inTangents(time) {\n return this.vertices('i', time);\n },\n outTangents: function outTangents(time) {\n return this.vertices('o', time);\n },\n isClosed: function isClosed() {\n return this.v.c;\n },\n pointOnPath: function pointOnPath(perc, time) {\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\n }\n\n var segmentsLength = this._segmentsLength;\n var lengths = segmentsLength.lengths;\n var lengthPos = segmentsLength.totalLength * perc;\n var i = 0;\n var len = lengths.length;\n var accumulatedLength = 0;\n var pt;\n\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n var initIndex = i;\n var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n break;\n } else {\n accumulatedLength += lengths[i].addedLength;\n }\n\n i += 1;\n }\n\n if (!pt) {\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n }\n\n return pt;\n },\n vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n if (perc == 1) {\n // eslint-disable-line eqeqeq\n perc = this.v.c;\n } else if (perc == 0) {\n // eslint-disable-line eqeqeq\n perc = 0.999;\n }\n\n var pt1 = this.pointOnPath(perc, time);\n var pt2 = this.pointOnPath(perc + 0.001, time);\n var xLength = pt2[0] - pt1[0];\n var yLength = pt2[1] - pt1[1];\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n if (magnitude === 0) {\n return [0, 0];\n }\n\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n },\n tangentOnPath: function tangentOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'tangent');\n },\n normalOnPath: function normalOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'normal');\n },\n setGroupProperty: expressionHelpers.setGroupProperty,\n getValueAtTime: expressionHelpers.getStaticValueAtTime\n };\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n prop.propertyIndex = data.ix;\n prop.lock = false;\n\n if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n };\n }\n\n function initialize$1() {\n addPropertyDecorator();\n }\n\n function addDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.addEffect(this.getExpressionValue.bind(this));\n return true;\n }\n\n return null;\n }\n\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n var newValue = this.calculateExpression(text);\n\n if (currentValue.t !== newValue) {\n var newData = {};\n this.copyData(newData, currentValue);\n newData.t = newValue.toString();\n newData.__complete = false;\n return newData;\n }\n\n return currentValue;\n };\n\n TextProperty.prototype.searchProperty = function () {\n var isKeyframed = this.searchKeyframes();\n var hasExpressions = this.searchExpressions();\n this.kf = isKeyframed || hasExpressions;\n return this.kf;\n };\n\n TextProperty.prototype.searchExpressions = searchExpressions;\n }\n\n function initialize() {\n addDecorator();\n }\n\n function SVGComposableEffect() {}\n\n SVGComposableEffect.prototype = {\n createMergeNode: function createMergeNode(resultId, ins) {\n var feMerge = createNS('feMerge');\n feMerge.setAttribute('result', resultId);\n var feMergeNode;\n var i;\n\n for (i = 0; i < ins.length; i += 1) {\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', ins[i]);\n feMerge.appendChild(feMergeNode);\n feMerge.appendChild(feMergeNode);\n }\n\n return feMerge;\n }\n };\n\n var linearFilterValue = '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0';\n\n function SVGTintFilter(filter, filterManager, elem, id, source) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', linearFilterValue + ' 1 0');\n this.linearFilter = feColorMatrix;\n feColorMatrix.setAttribute('result', id + '_tint_1');\n filter.appendChild(feColorMatrix);\n feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id + '_tint_2');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n filter.appendChild(feMerge);\n }\n\n extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n SVGTintFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var colorBlack = this.filterManager.effectElements[0].p.v;\n var colorWhite = this.filterManager.effectElements[1].p.v;\n var opacity = this.filterManager.effectElements[2].p.v / 100;\n this.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0');\n this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 1 0');\n }\n };\n\n function SVGFillFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id);\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n }\n\n SVGFillFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color = this.filterManager.effectElements[2].p.v;\n var opacity = this.filterManager.effectElements[6].p.v;\n this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGStrokeEffect(fil, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.elem = elem;\n this.paths = [];\n }\n\n SVGStrokeEffect.prototype.initialize = function () {\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n var path;\n var groupPath;\n var i;\n var len;\n\n if (this.filterManager.effectElements[1].p.v === 1) {\n len = this.elem.maskManager.masksProperties.length;\n i = 0;\n } else {\n i = this.filterManager.effectElements[0].p.v - 1;\n len = i + 1;\n }\n\n groupPath = createNS('g');\n groupPath.setAttribute('fill', 'none');\n groupPath.setAttribute('stroke-linecap', 'round');\n groupPath.setAttribute('stroke-dashoffset', 1);\n\n for (i; i < len; i += 1) {\n path = createNS('path');\n groupPath.appendChild(path);\n this.paths.push({\n p: path,\n m: i\n });\n }\n\n if (this.filterManager.effectElements[10].p.v === 3) {\n var mask = createNS('mask');\n var id = createElementID();\n mask.setAttribute('id', id);\n mask.setAttribute('mask-type', 'alpha');\n mask.appendChild(groupPath);\n this.elem.globalData.defs.appendChild(mask);\n var g = createNS('g');\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n while (elemChildren[0]) {\n g.appendChild(elemChildren[0]);\n }\n\n this.elem.layerElement.appendChild(g);\n this.masker = mask;\n groupPath.setAttribute('stroke', '#fff');\n } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (this.filterManager.effectElements[10].p.v === 2) {\n elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n while (elemChildren.length) {\n this.elem.layerElement.removeChild(elemChildren[0]);\n }\n }\n\n this.elem.layerElement.appendChild(groupPath);\n this.elem.layerElement.removeAttribute('mask');\n groupPath.setAttribute('stroke', '#fff');\n }\n\n this.initialized = true;\n this.pathMasker = groupPath;\n };\n\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n if (!this.initialized) {\n this.initialize();\n }\n\n var i;\n var len = this.paths.length;\n var mask;\n var path;\n\n for (i = 0; i < len; i += 1) {\n if (this.paths[i].m !== -1) {\n mask = this.elem.maskManager.viewData[this.paths[i].m];\n path = this.paths[i].p;\n\n if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n path.setAttribute('d', mask.lastPath);\n }\n\n if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n var dasharrayValue;\n\n if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var l = path.getTotalLength();\n dasharrayValue = '0 0 0 ' + l * s + ' ';\n var lineLength = l * (e - s);\n var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n var units = Math.floor(lineLength / segment);\n var j;\n\n for (j = 0; j < units; j += 1) {\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n }\n\n dasharrayValue += '0 ' + l * 10 + ' 0 0';\n } else {\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n }\n\n path.setAttribute('stroke-dasharray', dasharrayValue);\n }\n }\n }\n\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n }\n\n if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n }\n\n if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n var color = this.filterManager.effectElements[3].p.v;\n this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n }\n }\n };\n\n function SVGTritoneFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n filter.appendChild(feColorMatrix);\n var feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n this.matrixFilter = feComponentTransfer;\n var feFuncR = createNS('feFuncR');\n feFuncR.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncR);\n this.feFuncR = feFuncR;\n var feFuncG = createNS('feFuncG');\n feFuncG.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncG);\n this.feFuncG = feFuncG;\n var feFuncB = createNS('feFuncB');\n feFuncB.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncB);\n this.feFuncB = feFuncB;\n filter.appendChild(feComponentTransfer);\n }\n\n SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color1 = this.filterManager.effectElements[0].p.v;\n var color2 = this.filterManager.effectElements[1].p.v;\n var color3 = this.filterManager.effectElements[2].p.v;\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n this.feFuncR.setAttribute('tableValues', tableR);\n this.feFuncG.setAttribute('tableValues', tableG);\n this.feFuncB.setAttribute('tableValues', tableB);\n }\n };\n\n function SVGProLevelsFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n } // Green\n\n\n if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n } // Blue\n\n\n if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n } // Alpha\n\n\n if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n } // RGB\n\n\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n }\n\n if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n filter.appendChild(feComponentTransfer);\n this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n }\n\n SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n var feFunc = createNS(type);\n feFunc.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFunc);\n return feFunc;\n };\n\n SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n var cnt = 0;\n var segments = 256;\n var perc;\n var min = Math.min(inputBlack, inputWhite);\n var max = Math.max(inputBlack, inputWhite);\n var table = Array.call(null, {\n length: segments\n });\n var colorValue;\n var pos = 0;\n var outputDelta = outputWhite - outputBlack;\n var inputDelta = inputWhite - inputBlack;\n\n while (cnt <= 256) {\n perc = cnt / 256;\n\n if (perc <= min) {\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n } else if (perc >= max) {\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n } else {\n colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n }\n\n table[pos] = colorValue;\n pos += 1;\n cnt += 256 / (segments - 1);\n }\n\n return table.join(' ');\n };\n\n SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var val;\n var effectElements = this.filterManager.effectElements;\n\n if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n this.feFuncRComposed.setAttribute('tableValues', val);\n this.feFuncGComposed.setAttribute('tableValues', val);\n this.feFuncBComposed.setAttribute('tableValues', val);\n }\n\n if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n this.feFuncR.setAttribute('tableValues', val);\n }\n\n if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n this.feFuncG.setAttribute('tableValues', val);\n }\n\n if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n this.feFuncB.setAttribute('tableValues', val);\n }\n\n if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n this.feFuncA.setAttribute('tableValues', val);\n }\n }\n };\n\n function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n var filterSize = filterManager.data.fs || globalFilterSize;\n filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('in', 'SourceAlpha');\n feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n feGaussianBlur.setAttribute('stdDeviation', '0');\n this.feGaussianBlur = feGaussianBlur;\n filter.appendChild(feGaussianBlur);\n var feOffset = createNS('feOffset');\n feOffset.setAttribute('dx', '25');\n feOffset.setAttribute('dy', '0');\n feOffset.setAttribute('in', id + '_drop_shadow_1');\n feOffset.setAttribute('result', id + '_drop_shadow_2');\n this.feOffset = feOffset;\n filter.appendChild(feOffset);\n var feFlood = createNS('feFlood');\n feFlood.setAttribute('flood-color', '#00ff00');\n feFlood.setAttribute('flood-opacity', '1');\n feFlood.setAttribute('result', id + '_drop_shadow_3');\n this.feFlood = feFlood;\n filter.appendChild(feFlood);\n var feComposite = createNS('feComposite');\n feComposite.setAttribute('in', id + '_drop_shadow_3');\n feComposite.setAttribute('in2', id + '_drop_shadow_2');\n feComposite.setAttribute('operator', 'in');\n feComposite.setAttribute('result', id + '_drop_shadow_4');\n filter.appendChild(feComposite);\n var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n filter.appendChild(feMerge); //\n }\n\n extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n\n SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n }\n\n if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n var col = this.filterManager.effectElements[0].p.v;\n this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n }\n\n if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n }\n\n if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n var distance = this.filterManager.effectElements[3].p.v;\n var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n var x = distance * Math.cos(angle);\n var y = distance * Math.sin(angle);\n this.feOffset.setAttribute('dx', x);\n this.feOffset.setAttribute('dy', y);\n }\n }\n };\n\n var _svgMatteSymbols = [];\n\n function SVGMatte3Effect(filterElem, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.filterElem = filterElem;\n this.elem = elem;\n elem.matteElement = createNS('g');\n elem.matteElement.appendChild(elem.layerElement);\n elem.matteElement.appendChild(elem.transformedElement);\n elem.baseElement = elem.matteElement;\n }\n\n SVGMatte3Effect.prototype.findSymbol = function (mask) {\n var i = 0;\n var len = _svgMatteSymbols.length;\n\n while (i < len) {\n if (_svgMatteSymbols[i] === mask) {\n return _svgMatteSymbols[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n var parentNode = mask.layerElement.parentNode;\n\n if (!parentNode) {\n return;\n }\n\n var children = parentNode.children;\n var i = 0;\n var len = children.length;\n\n while (i < len) {\n if (children[i] === mask.layerElement) {\n break;\n }\n\n i += 1;\n }\n\n var nextChild;\n\n if (i <= len - 2) {\n nextChild = children[i + 1];\n }\n\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n\n if (nextChild) {\n parentNode.insertBefore(useElem, nextChild);\n } else {\n parentNode.appendChild(useElem);\n }\n };\n\n SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n if (!this.findSymbol(mask)) {\n var symbolId = createElementID();\n var masker = createNS('mask');\n masker.setAttribute('id', mask.layerId);\n masker.setAttribute('mask-type', 'alpha');\n\n _svgMatteSymbols.push(mask);\n\n var defs = elem.globalData.defs;\n defs.appendChild(masker);\n var symbol = createNS('symbol');\n symbol.setAttribute('id', symbolId);\n this.replaceInParent(mask, symbolId);\n symbol.appendChild(mask.layerElement);\n defs.appendChild(symbol);\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n masker.appendChild(useElem);\n mask.data.hd = false;\n mask.show();\n }\n\n elem.setMatte(mask.layerId);\n };\n\n SVGMatte3Effect.prototype.initialize = function () {\n var ind = this.filterManager.effectElements[0].p.v;\n var elements = this.elem.comp.elements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i] && elements[i].data.ind === ind) {\n this.setElementAsMask(this.elem, elements[i]);\n }\n\n i += 1;\n }\n\n this.initialized = true;\n };\n\n SVGMatte3Effect.prototype.renderFrame = function () {\n if (!this.initialized) {\n this.initialize();\n }\n };\n\n function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n // Outset the filter region by 100% on all sides to accommodate blur expansion.\n filter.setAttribute('x', '-100%');\n filter.setAttribute('y', '-100%');\n filter.setAttribute('width', '300%');\n filter.setAttribute('height', '300%');\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('result', id);\n filter.appendChild(feGaussianBlur);\n this.feGaussianBlur = feGaussianBlur;\n }\n\n SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n // Empirical value, matching AE's blur appearance.\n var kBlurrinessToSigma = 0.3;\n var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n //\n // 1 -> horizontal & vertical\n // 2 -> horizontal only\n // 3 -> vertical only\n //\n\n var dimensions = this.filterManager.effectElements[1].p.v;\n var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n //\n // 0 -> off -> duplicate\n // 1 -> on -> wrap\n\n var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n }\n };\n\n function TransformEffect() {}\n\n TransformEffect.prototype.init = function (effectsManager) {\n this.effectsManager = effectsManager;\n this.type = effectTypes.TRANSFORM_EFFECT;\n this.matrix = new Matrix();\n this.opacity = -1;\n this._mdf = false;\n this._opMdf = false;\n };\n\n TransformEffect.prototype.renderFrame = function (forceFrame) {\n this._opMdf = false;\n this._mdf = false;\n\n if (forceFrame || this.effectsManager._mdf) {\n var effectElements = this.effectsManager.effectElements;\n var anchor = effectElements[0].p.v;\n var position = effectElements[1].p.v;\n var isUniformScale = effectElements[2].p.v === 1;\n var scaleHeight = effectElements[3].p.v;\n var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v;\n var skew = effectElements[5].p.v;\n var skewAxis = effectElements[6].p.v;\n var rotation = effectElements[7].p.v;\n this.matrix.reset();\n this.matrix.translate(-anchor[0], -anchor[1], anchor[2]);\n this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1);\n this.matrix.rotate(-rotation * degToRads);\n this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads);\n this.matrix.translate(position[0], position[1], 0);\n this._mdf = true;\n\n if (this.opacity !== effectElements[8].p.v) {\n this.opacity = effectElements[8].p.v;\n this._opMdf = true;\n }\n }\n };\n\n function SVGTransformEffect(_, filterManager) {\n this.init(filterManager);\n }\n\n extendPrototype([TransformEffect], SVGTransformEffect);\n\n function CVTransformEffect(effectsManager) {\n this.init(effectsManager);\n }\n\n extendPrototype([TransformEffect], CVTransformEffect);\n\n registerRenderer('canvas', CanvasRenderer);\n registerRenderer('html', HybridRenderer);\n registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n ShapeModifiers.registerModifier('tm', TrimModifier);\n ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\n ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n ShapeModifiers.registerModifier('zz', ZigZagModifier);\n ShapeModifiers.registerModifier('op', OffsetPathModifier); // Registering expression plugin\n\n setExpressionsPlugin(Expressions);\n setExpressionInterfaces(getInterface);\n initialize$1();\n initialize(); // Registering svg effects\n\n registerEffect$1(20, SVGTintFilter, true);\n registerEffect$1(21, SVGFillFilter, true);\n registerEffect$1(22, SVGStrokeEffect, false);\n registerEffect$1(23, SVGTritoneFilter, true);\n registerEffect$1(24, SVGProLevelsFilter, true);\n registerEffect$1(25, SVGDropShadowEffect, true);\n registerEffect$1(28, SVGMatte3Effect, false);\n registerEffect$1(29, SVGGaussianBlurEffect, true);\n registerEffect$1(35, SVGTransformEffect, false);\n registerEffect(35, CVTransformEffect);\n\n return lottie;\n\n}));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.amdO = {};","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar core_common_1 = require(\"../core/core-common\");\r\nvar logging_1 = require(\"../core/logging\");\r\n$(function () {\r\n (0, logging_1.logScriptLoad)(\"[direct] [home]\");\r\n (0, core_common_1.setupCommon)();\r\n if (Number($(\"#SiteUnavailable\").val()) === 1) {\r\n (0, core_common_1.showSiteMaintenanceDialog)();\r\n }\r\n (0, core_common_1.setNavigationStepStates)(0 /* NavStep.Vehicle */);\r\n //var target = '#tabOne'\r\n //var selected = '#tabOneContent'\r\n //var urlParams = new URLSearchParams(window.location.search);\r\n //var qs = urlParams.get('logout');\r\n //if (qs === \"1\") {\r\n // target = '#tabTwo'\r\n // selected = '#tabTwoContent'\r\n //}\r\n //let tabbedCon = new TabbedContent({\r\n // targetDiv: '#tabbedContent',\r\n // tabSelectedClass: 'current',\r\n // content: ['#tabOneContent', '#tabTwoContent'],\r\n // targetTab: target,\r\n // selectedDiv: selected\r\n //});\r\n});\r\n"],"names":["root","factory","exports","module","define","amd","self","__awaiter","this","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","Object","defineProperty","network","core_common_1","logging_1","$","logScriptLoad","fetchData","url","response","err_1","_a","log","clearAndHideInfoBar","concat","fetch","ok","Error","statusText","json","message","ReadMoreControl","on","onToggle","bind","prototype","readMoreText","switchElement","currentTarget","targetId","attr","text","trim","toggleClass","__importDefault","mod","__esModule","scrollToElement","modifySection","isValidEmail","modifyContentInSection","isFormValid","setButtonEnabledState","getHiddenFieldValue","setUiState","processQueryStringParameters","hasValue","isPostcodeValid","isPostalAreaValid","handleAlertAreaDisplay","scrollToTop","scrollToBottom","resetWarningLightsSelection","warningLightsChecked","changeMultipleElementVisibility","changeElementVisibility","handleCheckBoxClick","handleRadioGroupClick","resetErrors","getFieldErrorsOnSubmittedForm","handleSubmit","getCurrentPage","sessionExpired","resetSessionTimer","validateModel","validateInputsForModel","showRetailerInfoDialog","showSiteMaintenanceDialog","bindPageShowEvent","encodeForUrlTransit","setNavigationStepStates","bindAddVehicleClick","bindMileageInputKeyUp","bindMileageInputKeyDown","bindNewVehicleMileageInputKeyDown","bindNewVehicleMileageInputKeyUp","bindSelectVehicleLinkClick","bindNewVehicleNumberPlateInputKeyDown","setAddButtonState","getTime","setFocusOnElement","setupCommon","_setupValidationMsg","_route","_alertArea","_infoBar","bindFormSubmit","TabbedContent","centreElement","hideOverlay","showOverlay","vehicleHasServicePack","animator","network_1","lottie_web_1","alert_control_1","read_more_control_1","_remainingSessionSeconds","_selectedServices","_sessionTimer","mileage","val","toString","parseInt","removeProp","removeAttr","prop","activeStep","each","i","data","find","window","addEventListener","event","persisted","ex","model","invalidCount","targetAttr","valid","console","calculateSessionDurationInSeconds","target","checkSession","location","href","addClass","removeClass","elementLink","action","document","show","hide","elementsLinkJson","elementsToShowHide","JSON","parse","key","hasOwnProperty","numberOfWarningLightsChecked","click","scrollTo","slice","html","children","fadeIn","state","fadeOut","selector","isEnabled","formToCheck","content","newState","is","slideToggle","toggle","email","test","elementSelector","headerHeight","height","animate","scrollTop","offset","top","modalSize","ev","config","AlertControl","setInterval","_sessionCheckIntervalSeconds","firstInput_1","first","setTimeout","focus","setFocusOnFirstInput","default","loadAnimation","container","getElementById","renderer","loop","autoplay","animationData","_this","toggleButton","toggleButtonLower","toggleTarget","innerWidth","resize","matchMedia","matches","footerNavButtons","outerHeight","parent","querySelector","attributes","childList","characterData","subtree","MutationObserver","buttons","observe","source","hasClass","preventDefault","id","off","$triggeringElement","toUpperCase","replace","src","siblings","defaultValue","defaultRadioButton","closest","$content","indexOf","currentTab","invalid","navStepId","isNaN","elementAction","isFinite","Number","_b","$element","now","Date","getHours","getMinutes","getSeconds","keyup","validate","resetForm","keydown","input","output","encodeURIComponent","escape","continueSelector","disableContinueIfInvalid","continueFunction","continueArgs","$modelInputs","blur","when","debug","endsWith","substring","split","toLowerCase","form","canSubmit","submit","fieldsInError","clickedRadio","$radioGroup","clickedCheckBox","checked","scrollHeight","empty","postalArea","postcode","sourceField","toTest","Array","isArray","validCount","forEach","item","index","parameters","paramsAddedCount","param","kvp","info","targetSelector","fallbackValue","$target","section","scrollToAfter","element","css","Math","max","width","outerWidth","scrollLeft","options","settings","targetDiv","tabSelectedClass","targetTab","selectedDiv","handleClickEvent","parentNodeID","parentNode","getAttribute","idArray","showHideContentEventAll","divToShow","getTheElementToShow","showHideContentEvent","extend","cachedTargetID","hideContent","initialView","addClickEvents","numberOfTabbedContent","count","clickableElements","getElementsByTagName","numberOfClickableElements","fullURL","RegExp","exec","elementToShow","tabClicked","elementsToShow","setActiveTab","tabId","closeButton","closeTarget","headerLine","determineLoggingLevel","logMethodEndInputAndOutput","logMethodEnd","logMethodBegin","logType","caller","prependWithTimestamp","loggingLevel","warn","error","clientLoggingLevel","method","scriptId","navigator","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","type","createElement","extendPrototype","sources","destination","sourcePrototype","len","getDescriptor","object","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","pause","resume","setRate","rateValue","createAudio","assetPath","Howl","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createTypedArray","createRegularArray","arr","Uint8ClampedArray","Float32Array","Int16Array","createSizedArray","_typeof$6","obj","constructor","subframeEnabled","expressionsPlugin","expressionsInterfaces","idPrefix$1","isSafari","userAgent","_shouldRoundValues","bmPow","pow","bmSqrt","sqrt","bmFloor","floor","bmMax","bmMin","min","BMMath","ProjectInterface$1","propertyNames","random","abs","absArr","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","bmRnd","round","styleDiv","style","position","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","currentTime","totalTime","frameMultiplier","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","s","r","b","p","q","RGBtoHSV","d","addSaturationToRGB","color","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setExpressionInterfaces","getExpressionInterfaces","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","createElementNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","path","_workerSelf","setupWorker","fn","Worker","Blob","blob","URL","createObjectURL","createWorker","completeLayers","layers","comps","layerData","j","jLen","k","kLen","completed","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","a","comp","findComp","__used","stringify","ks","it","o","checkVersion","minimum","animVersionString","animVersion","minimumVersion","checkText","iterateLayers","textLayer","documentData","assets","checkChars","chars","charData","ip","st","sr","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","c","checkShapes","completeClosingShapes","closed","cl","moduleOb","__complete","completeChars","dataFunctionManager","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","responseText","load","fullPath","callback","errorCallback","XMLHttpRequest","err","onreadystatechange","readyState","status","open","join","send","completeData","payload","animation","process","onComplete","onError","createProcess","processId","origin","pathname","loadData","completeAnimation","anim","ImagePreloader","proxyImage","canvas","ctx","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","img","intervalId","getBBox","_imageLoaded","clearInterval","createFootageData","ob","footageData","_footageLoaded","ImagePreloaderFactory","images","loadAssets","cb","_createImageData","setAssetsPath","setPath","loadedImages","loadedFootages","destroy","getAsset","createImgData","crossOrigin","createImageData","setAttributeNS","_elementHelper","append","appendChild","setCacheType","elementHelper","BaseEvent","triggerEvent","eventName","args","_cbs","callbacks","removeEventListener","splice","markerParser","parsePayloadLines","line","lines","keys","keysCount","_markers","markers","_marker","markerData","time","tm","duration","dr","cm","__","name","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","getRenderer","getRegisteredRenderer","_typeof$4","AnimationItem","isLoaded","currentRawFrame","frameRate","frameMult","playSpeed","playDirection","playCount","isPaused","animationID","timeCompleted","segmentPos","isSubframeEnabled","segments","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","params","wrapper","animType","RendererClass","rendererSettings","globalData","defs","setProjectInterface","undefined","autoloadSegments","initialSegment","setupAnimation","lastIndexOf","substr","fileName","trigger","setData","wrapperAttributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","rendererType","initItems","gotoFrame","_width","_height","updateContainerSize","setSubframe","renderFrame","resetFrame","triggerRenderFrameError","togglePause","stop","setCurrentRawFrameValue","getMarkerData","markerName","marker","goToAndStop","isFrame","numValue","frameModifier","goToAndPlay","playSegments","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setSpeed","setDirection","setSegment","init","end","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","setLoop","isLooping","getPath","getAssetData","getDuration","updateDocumentData","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","animItem","subtractPlayingCount","registerAnimation","elem","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","searchAnimations","standalone","animElements","getElementsByClassName","lenAnims","setAttribute","innerText","div","freeze","unfreeze","getRegisteredAnimations","animations","BezierFactory","str","beziers","bezEasing","BezierEasing","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","points","_p","_mSampleValues","_precomputed","get","x","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","lastSample","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","pooling","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","bezierLengthPool","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","point","lastPoint","lengthData","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","bezierSegmentPoints","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","getNewSegment","startPerc","endPerc","t0","t1","u0","u1","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","getPointInSegment","percent","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","bez","initFrame","mathAbs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","lastIndex","keyframes","keyframesMetadata","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","getBezierEasing","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quaternionToEuler","slerp","createQuaternion","omega","cosom","sinom","scale0","scale1","out","ax","ay","az","aw","bx","by","bz","bw","acos","sin","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","values","c1","cos","c2","c3","s1","s2","s3","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","getValue","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","PropertyFactory","getProp","sid","slotManager","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","cnt","shapePool","shapePath","clone","shape","cloned","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","paths","localShapeCollection","shape1","shape2","shapesEqual","ShapeProperty","reset","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","p0","p1","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","sy","ir","convertToPath","convertStarToPath","convertPolygonToPath","or","os","rad","roundness","perimSegment","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","v1","Matrix","_cos","_sin","_tan","tan","_rnd","props","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","l","m","translate","tx","tz","transform","a2","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","multiply","matrix","matrixProps","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_typeof$3","lottie","setLocation","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","useWebWorker","setIDPrefix","__getFactory","version","scripts","myScript","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","PuckerAndBloatModifier","initModifierProperties","addShapeToModifier","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","amount","processPath","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","px","py","pz","rx","ry","rz","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","RepeaterModifier","RoundCornersModifier","floatEqual","floatZero","lerp","lerpPoint","quadRoots","singleRoot","delta","polynomialCoefficients","p3","singlePoint","PolynomialBezier","linearize","pointEqual","coeffx","coeffy","extrema","intersectData","t2","box","boundingBox","cx","cy","splitData","boxIntersect","intersectsImpl","depth","tolerance","intersections","maxRecursion","d1s","d2s","crossProduct","lineIntersection","start1","end1","start2","end2","v3","v4","polarOffset","pointDistance","hypot","ZigZagModifier","setPoint","outputBezier","amplitude","outAmplitude","inAmplitude","angO","angI","getPerpendicularVector","vector","rot","getProjectingAngle","cur","prevIndex","nextIndex","pVector","zigZagCorner","frequency","pointType","prevPoint","nextPoint","prevDist","nextDist","zigZagSegment","dist","normalAngle","linearOffset","offsetSegment","p1a","p1b","p2b","p2a","joinLines","seg1","seg2","lineJoin","miterLimit","angleOut","tangentAngle","angleIn","center","radius","intersection","getIntersection","intersect","pruneSegmentIntersection","outa","outb","pruneIntersections","offsetSegmentSplit","right","mid","flex","inflectionPoints","OffsetPathModifier","getFontProperties","fontData","styles","fStyle","fWeight","weight","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","hasReloaded","copies","ceil","group","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","rd","currentV","currentI","currentO","closerV","distance","newPosPerc","derivative","denom","tcusp","square","filter","p10","p11","p20","p21","bounds","bottom","other","shapeSegmentInverted","pointsType","ml","lj","inputBezier","multiSegments","lastSeg","multiSegment","FontManager","emptyChar","w","size","combinedCharacters","BLACK_FLAG_CODE_POINT","surrogateModifiers","setUpNode","font","family","fontFamily","node","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","offsetWidth","familyArray","enabledFamilies","trimFontOptions","createHelper","def","helper","engine","fontProps","tHelper","fFamily","textContent","fClass","tCanvasHelper","OffscreenCanvas","measureText","getComputedTextLength","getCodePoint","string","codePoint","charCodeAt","second","isRegionalCode","Font","typekitLoaded","_warned","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","isVariationSelector","fontPrototype","found","ch","list","cache","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","loaded","monoCase","sansCase","fPath","fOrigin","querySelectorAll","rel","sc","getCharData","_char","getFontByName","fName","_char2","fontName","doubleSize","singleSize","loadedCount","removeChild","SlotManager","slotFactory","RenderableElement","slots","assign","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","component","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","getBlendMode","blendModeEnums","mode","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effects","ef","effectElements","effectItem","GroupEffect","BaseElement","FrameElement","FootageElement","imageLoader","initBaseData","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","BaseRenderer","eff","checkMasks","LayerExpressionInterface","EffectsExpressionInterface","ShapeExpressionInterface","TextExpressionInterface","CompExpressionInterface","layerInterface","maskManager","registerMaskInterface","effectsInterface","createEffectsInterface","registerEffectsInterface","shapeInterface","shapesData","itemsData","textInterface","setBlendMode","blendModeValue","bm","baseElement","layerElement","layerId","effectsManager","getType","prepareProperties","isVisible","_isParent","getBaseElement","FootageInterface","getFootageData","timeRemapped","totalVolume","volumeValue","checkLayers","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","hierarchy","setAsParent","setHierarchy","addPendingElement","pendingElements","pathValue","setupGlobalData","fontsContainer","animationItem","compSize","effectTypes","TRANSFORM_EFFECT","TransformElement","MaskElement","maskElement","viewData","solidPath","rect","expansor","feMorph","properties","currentMasks","maskType","maskRef","getShapeProp","lastPath","filterID","expan","lastOperator","filterId","lastRadius","mask","createLayerSolidPath","invRect","drawPath","maskedElement","initTransform","_matMdf","_localMatMdf","_opMdf","localMat","localOpacity","ao","renderTransform","finalMat","renderLocalTransform","localTransforms","lmat","localOp","opacity","searchEffectTransforms","renderableEffectsManager","transformEffects","getEffects","globalToLocal","transforms","ptNew","mHelper","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","filId","skipCoordinates","fil","feColorMatrix","featureSupport","svgLumaHidden","offscreenCanvas","registeredEffects$1","idPrefix","SVGEffects","filterManager","createFilter","filters","Effect","effect","countsAsEffect","registerEffect$1","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","initElement","sourceRect","ProcessedElement","IShapeElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","layerElementParent","td","matteMasks","gg","tt","ln","hd","cp","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","getMatte","matteType","useElement","masker","createAlphaToLuminanceFilter","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","setMatte","initHierarchy","checkParenting","createContent","renderInnerContent","innerElem","pr","imagePreserveAspectRatio","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","searchProcessedElement","processedElements","addProcessedElement","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","caches","lStr","lvl","SVGStyleData","pElem","msElem","DashProperty","dataProps","dashStr","dashArray","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","comparePoints","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","of","ms","ost","buildShapeString","_o","_i","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderNoop","renderPath","pathStringTransformed","redraw","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","createRenderFunction","SVGShapeElement","stylesList","animatedContents","LetterProps","sw","fc","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","setElementStyles","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","charactersArray","shouldCombine","shouldCombineNext","currentChars","charAt","newLineFlag","letters","anchorGrouping","currentSize","currentPos","currentLine","lineWidth","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","an","add","anIndexes","animatorJustifyOffset","extra","animatorData","letterData","based","animators","indexes","fh","fs","fb","rn","totalChars","newInd","currentInd","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getMult","textProperty","easer","tot","smoothness","threshold","newCharsFlag","divisor","getTextSelectorProp","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","ITextElement","searchProperties","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","tanAngle","matrixHelper","renderedLettersCount","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","letterM","letterP","defaultPropsArray","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","atan","textAnimator","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","validateText","buildNewText","emptyShapeData","SVGTextLottieElement","textSpans","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","svgElement","ariaLabel","title","titleElement","titleId","description","descElement","descId","preserveAspectRatio","contentVisibility","viewBoxOnly","viewBoxSize","className","focusable","filterSize","runExpressions","destroyed","ShapeTransformManager","sequences","sequenceList","transform_key_count","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","String","fromCharCode","buildShapeData","shapeItem","tSpan","usesGlyphs","cachedSpansLength","span","childSpan","glyph","glyphElement","_debug","tElement","justify","textBox","bbox","renderedLetter","textSpan","findIndexByInd","appendElementInPos","elementIndex","tp","matteMask","nextElement","insertBefore","setElements","getElements","destroyElements","addTransformSequence","sequence","processSequence","processSequences","getNewKey","lumaLoader","lumaBuffer","lumaBufferCtx","svg","loadLuma","_svg","createCanvas","loadLumaCanvas","getLumaCanvas","registeredEffects","CVEffects","registerEffect","CVMaskElement","hasMasks","CVBaseElement","canvasContext","beginPath","moveTo","lineTo","bezierCurveTo","save","clip","operationsMap","CVShapeData","transformsManager","styledShapes","styledShape","trNodes","CVShapeElement","CVTextElement","stroke","fill","currentRender","sWidth","fValue","CVImageElement","CVSolidElement","CanvasRendererBase","CanvasContext","strokeStyle","lineCap","CVContextData","stack","cArrPos","cTr","nativeContext","transformMat","currentOpacity","currentFillStyle","appliedFillStyle","currentStrokeStyle","appliedStrokeStyle","currentLineWidth","appliedLineWidth","currentLineCap","appliedLineCap","currentLineJoin","appliedLineJoin","appliedMiterLimit","currentMiterLimit","CVCompElement","CanvasRenderer","clearCanvas","context","dpr","devicePixelRatio","currentGlobalAlpha","contextData","ctxTransform","ctxOpacity","ctxFillStyle","ctxStrokeStyle","ctxLineWidth","ctxLineCap","ctxLineJoin","ctxMiterLimit","ctxFill","ctxFillRect","ctxStroke","HBaseElement","HSolidElement","HShapeElement","shapesContainer","currentBBox","HTextElement","textPaths","isMasked","HCameraElement","pe","_prevMat","HImageElement","HybridRendererBase","threeDElements","camera","HCompElement","HybridRenderer","createElements","buffers","bufferCanvas","bufferCanvas2","_isProxy","transformCanvas","blendMode","globalCompositeOperation","hideElement","showElement","clearRect","prepareLayer","bufferCtx","drawImage","getTransform","exitLayer","buffer","forceRealStack","restore","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","grd","setLineDash","lineDashOffset","closePath","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","par","globalAlpha","rule","actionFlag","containerStyle","mozTransformOrigin","setContext","isDashed","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","fillType","duplicate","newLength","forceRestore","currentContext","prevStack","saveOnNativeFlag","currentStack","newStack","setOpacity","trProps","checkBlendMode","tg","transformedElementStyle","matrixValue","webkitTransform","addEffects","backgroundColor","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","shapeBoundingBox","xMax","yMax","tempBoundingBox","b2ac","calculateF","calculateBoundingBox","expandStrokeBoundingBox","widthProperty","kfw","currentBoxContains","changed","shapeStyle","shapeTransform","compW","compH","innerElemStyle","textColor","strokeWidth","lineHeight","tParent","tCont","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","setup","perspectiveStyle","perspectiveElem","perspective","webkitPerspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","Image","imageElem","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","startPos","endPos","createThreeDContainer","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","overflow","cWidth","cHeight","floatingContainer","_createBaseContainerElements","_thisLayerFunction","pixelAspect","frameDuration","displayStartTime","numLayers","_typeof$2","seedRandom","global","rngname","startdenom","significance","ARC4","keylen","me","S","copy","flatten","typ","mixkey","seed","smear","stringseed","tostring","shortseed","entropy","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","screen","autoseed","arc4","prng","int32","quick","pass","is_math_call","initialize$2","propTypes","SHAPE","_typeof$1","ExpressionManager","frames","_lottieGlobal","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","sub","mul","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","property","noOp","_value","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","valueAtTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","scoped_bm_rt","expression_function","eval","numKeys","active","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","getVelocityAtTime","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","seedrandom","randSeed","posterizeTime","framesPerSecond","hasParent","executeExpression","frameExpressionId","__preventDeadCodeRemoval","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","MaskManagerInterface","MaskInterface","_mask","_data","_masksInterfaces","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","speedAtTime","getSpeedAtTime","propertyGroup","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","TransformExpressionInterface","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_px","_py","_pz","_transformFactory","getMatrix","toWorldMat","toWorldVec","applyPoint","fromWorldVec","invertPoint","sampleImage","transformInterface","anchorPointDescriptor","defineProperties","anchor_point","startTime","_name","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","createGroupInterface","groupInterface","mn","_propertyGroup","createValueInterface","numProperties","np","enabled","en","expressionProperty","setGroupProperty","effectsData","ShapePathInterface","view","propertyIndex","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","interfaces","transformInterfaceFactory","cix","contentsInterfaceFactory","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dash","start","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","_interfaceFunction","_sourceText","sourceText","stringValue","fillColor","_typeof","dataInterfaceFactory","outlineInterface","currentPropertyName","currentProperty","propertyNameIndex","outlineInterfaceFactory","dataInterface","footage","getInterface","expressionHelpers","searchExpressions","speed","_cachingAtTime","getStaticValueAtTime","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","lastTime","propertyGetShapeProp","trims","initialize$1","addDecorator","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","initialize","SVGComposableEffect","createMergeNode","resultId","ins","feMergeNode","feMerge","linearFilterValue","SVGTintFilter","linearFilter","matrixFilter","SVGFillFilter","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","colorBlack","colorWhite","groupPath","elemChildren","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","SVGGaussianBlurEffect","TransformEffect","SVGTransformEffect","CVTransformEffect","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","sigma","dimensions","sigmaX","sigmaY","edgeMode","forceFrame","isUniformScale","scaleHeight","scaleWidth","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdO"],"sourceRoot":""}