@sd-angular/core 1.3.210 → 1.3.211

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/upload-file/src/lib/upload-file.component.ts","../../../../projects/sd-core/upload-file/src/lib/upload-file.module.ts"],"names":["__awaiter","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","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","Object","create","__values","o","s","m","i","__classPrivateFieldGet","receiver","state","kind","has","get","__classPrivateFieldSet","set","SdUploadFile","deviceService","ref","notifyService","translateService","_this","id","uuid.v4","_isMobileOrTablet","_canvas1","_canvas2","previewFiles","type","disabled","extensions","max","_srcs","previewWidth","previewHeight","align","_model","modelChange","EventEmitter","sdChange","_subscription","Subscription","_currentDropContainer","_srcChanges","Subject","_modelChanges","reload","Array","isArray","emit","_validate","file","split","name","translate","_a","lastDot","lastIndexOf","extension_1","substring","some","toUpperCase","join","maxSize","size","maxWidth","maxHeight","URL","window","webkitURL","img","Image","onload","width","height","src","createObjectURL","message","_b","_preview","previewFile","reader","FileReader","evt","previewSrc","target","isPreviewImage","detectChanges","readAsDataURL","_c","filter","_d","onUpload","$","children","remove","append","on","_uploadFile","trigger","files","originFiles","notify","warning","item","scaleToPixel","_resize","files_1","files_1_1","extension","fileName","idx","indexOf","onRemove","confirmDelete","splice","onDrop","event","moveItemInArray","previousIndex","currentIndex","canvas1","document","createElement","setAttribute","ctx1","getContext","_scale","canvas2","ctx2","drawImage","toBlob","blob","_blobToFile","err","scaleToPixcel","ratio","Math","trunc","onSelect","selectedFile","temp","lastModifiedDate","Date","isDesktop","defineProperty","prototype","srcs","model","flag_1","map","baseSrc","ngOnInit","ngAfterViewInit","add","pipe","startWith","subscribe","dropElements","dropContainer_1","first","nativeElement","addEventListener","preventDefault","style","opacity","border","dataTransfer","changes","dropContainer_2","ngOnDestroy","unsubscribe","Component","args","selector","template","DeviceDetectorService","ChangeDetectorRef","SdNotifyService","SdTranslateService","Input","Output","ViewChildren","ViewChild","ContentChild","SdLabelDefDirective","NgModule","imports","CommonModule","DeviceDetectorModule","forRoot","MatButtonModule","MatIconModule","DragDropModule","SdNotifyModule","SdTranslateModule","SdImagePreviewModule","declarations","exports","providers"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(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\n\r\nexport function __generator(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 (_) 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\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectorRef,\r\n AfterViewInit,\r\n ElementRef,\r\n OnInit,\r\n ViewChildren,\r\n QueryList,\r\n OnDestroy,\r\n ViewChild,\r\n ContentChild\r\n} from '@angular/core';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport * as uuid from 'uuid';\r\nimport $ from 'jquery';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTranslateService } from '@sd-angular/core/translate';\r\nimport { Subscription, Subject } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { SdLabelDefDirective } from '@sd-angular/core/common';\r\n\r\n// https://stackoverflow.com/questions/4459379/preview-an-image-before-it-is-uploaded\r\n@Component({\r\n selector: 'sd-upload-file',\r\n templateUrl: './upload-file.component.html',\r\n styleUrls: ['./upload-file.component.scss']\r\n})\r\nexport class SdUploadFile implements OnInit, AfterViewInit, OnDestroy {\r\n id = `I${uuid.v4()}`;\r\n #isMobileOrTablet = false;\r\n #canvas1 = `C${uuid.v4()}`;\r\n #canvas2 = `C${uuid.v4()}`;\r\n previewFiles: PreviewFile[] = [];\r\n selectedFile: PreviewFile;\r\n @Input() label: string;\r\n @Input() type: 'image' | 'file' = 'file';\r\n @Input() disabled = false;\r\n @Input() extensions: string[] = [];\r\n @Input() max = 1;\r\n @Input() maxSize: number;\r\n @Input() maxWidth: number;\r\n @Input() maxHeight: number;\r\n @Input() scaleToPixel: number;\r\n #srcs: string[];\r\n @Input() set srcs(srcs: string[]) {\r\n if (Array.isArray(srcs)) {\r\n this.#srcs = srcs;\r\n this.#srcChanges.next(this.#srcs);\r\n }\r\n }\r\n @Input() previewWidth: string = '100px';\r\n @Input() previewHeight: string = '100px';\r\n @Input() align: 'left' | 'center' = 'center';\r\n #model: PreviewFile[];\r\n @Input() set model(model: (string | PreviewFile)[]) {\r\n if (Array.isArray(model) && this.#model !== model) {\r\n let flag = false;\r\n this.#model = model.map(src => {\r\n if (typeof (src) === 'string') {\r\n let extension = null;\r\n const baseSrc = src.split('?')?.[0];\r\n const lastDot = baseSrc.lastIndexOf('.');\r\n if (lastDot > 0) {\r\n extension = baseSrc.substring(lastDot + 1);\r\n }\r\n flag = true;\r\n return {\r\n file: null,\r\n previewSrc: null,\r\n src,\r\n isPreviewImage: this.type === 'image',\r\n extension\r\n }\r\n }\r\n return src;\r\n });\r\n if (flag) {\r\n this.modelChange.emit(this.#model);\r\n }\r\n this.#modelChanges.next(this.#model);\r\n } else {\r\n this.#model = [];\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<PreviewFile[]>();\r\n @Output() sdChange = new EventEmitter<PreviewFile[]>();\r\n @ViewChildren('dropElement') dropElements: QueryList<ElementRef>;\r\n @ViewChild('canvas') canvas: ElementRef;\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n #subscription = new Subscription();\r\n #currentDropContainer: any;\r\n #srcChanges = new Subject();\r\n #modelChanges = new Subject();\r\n constructor(\r\n deviceService: DeviceDetectorService,\r\n private ref: ChangeDetectorRef,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService) {\r\n this.#isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.#srcChanges.pipe(startWith(this.#srcs)).subscribe(() => {\r\n if (!Array.isArray(this.#srcs)) {\r\n return;\r\n }\r\n const previewFiles = this.#srcs.map(src => {\r\n let extension = null;\r\n const baseSrc = src.split('?')?.[0];\r\n const lastDot = baseSrc.lastIndexOf('.');\r\n if (lastDot > 0) {\r\n extension = baseSrc.substring(lastDot + 1);\r\n }\r\n return {\r\n file: null,\r\n previewSrc: null,\r\n src,\r\n isPreviewImage: this.type === 'image',\r\n extension\r\n }\r\n });\r\n this.previewFiles = previewFiles;\r\n this.modelChange.emit(previewFiles);\r\n // this.sdChange.emit(previewFiles);\r\n }));\r\n this.#subscription.add(this.#modelChanges.pipe(startWith([])).subscribe(() => {\r\n if (Array.isArray(this.#model)) {\r\n this.previewFiles = this.#model;\r\n }\r\n }));\r\n if (!this.#isMobileOrTablet) {\r\n if (this.dropElements.length > 0) {\r\n const dropContainer = this.dropElements.first.nativeElement;\r\n this.#currentDropContainer = dropContainer;\r\n dropContainer.addEventListener('dragover', (evt: Event) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.9;\r\n dropContainer.style.border = '2px solid grey';\r\n });\r\n dropContainer.addEventListener('dragenter', (evt: Event) => {\r\n evt.preventDefault();\r\n });\r\n dropContainer.addEventListener('dragleave', (evt: Event) => {\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n });\r\n dropContainer.addEventListener('drop', async (evt: DragEvent) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n await this.#uploadFile(evt.dataTransfer);\r\n });\r\n }\r\n this.#subscription.add(this.dropElements.changes.subscribe(() => {\r\n if (this.dropElements.length > 0 && this.#currentDropContainer !== this.dropElements.first.nativeElement) {\r\n const dropContainer = this.dropElements.first.nativeElement;\r\n this.#currentDropContainer = dropContainer;\r\n dropContainer.addEventListener('dragover', (evt: Event) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.9;\r\n dropContainer.style.border = '2px solid grey';\r\n });\r\n dropContainer.addEventListener('dragenter', (evt: Event) => {\r\n evt.preventDefault();\r\n });\r\n dropContainer.addEventListener('dragleave', (evt: Event) => {\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n });\r\n dropContainer.addEventListener('drop', async (evt: DragEvent) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n await this.#uploadFile(evt.dataTransfer);\r\n });\r\n }\r\n }));\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n reload = (previewFiles: PreviewFile[]) => {\r\n if (Array.isArray(previewFiles)) {\r\n this.previewFiles = previewFiles;\r\n this.modelChange.emit(previewFiles);\r\n // this.sdChange.emit(previewFiles);\r\n }\r\n }\r\n\r\n #validate = async (file: File): Promise<string> => {\r\n if (this.type === 'image') {\r\n if (file.type.split('/')[0] !== 'image') {\r\n return `[${file.name}] ${this.translateService.translate('Uploaded file is not an image')}`;\r\n }\r\n }\r\n if (this.extensions?.length) {\r\n const lastDot = file.name.lastIndexOf('.');\r\n const extension = file.name.substring(lastDot + 1);\r\n if (!this.extensions.some(e => e.toUpperCase() === extension.toUpperCase())) {\r\n return `[${file.name}] ${this.translateService.translate('Uploaded file is not match extension')} ${this.extensions.join(', ')}`;\r\n }\r\n }\r\n if (this.maxSize) {\r\n if (this.maxSize * 1024 * 1024 < file.size) {\r\n return `[${file.name}] ${this.translateService.translate('Max file size')} ${this.maxSize} Mbs`;\r\n }\r\n }\r\n if (this.type === 'image' && (this.maxWidth || this.maxHeight)) {\r\n const message: string = await new Promise(resolve => {\r\n const URL = window.URL || window.webkitURL;\r\n const img = new Image();\r\n img.onload = () => {\r\n if (this.maxWidth && img.width > this.maxWidth) {\r\n resolve(`[${file.name}] ${this.translateService.translate('Max image width')} ${this.maxWidth}px`);\r\n }\r\n if (this.maxHeight && img.height > this.maxHeight) {\r\n resolve(`[${file.name}] ${this.translateService.translate('Max image height')} ${this.maxHeight}px`);\r\n }\r\n resolve(null);\r\n };\r\n img.src = URL.createObjectURL(file);\r\n });\r\n if (message) {\r\n return message;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n #preview = () => {\r\n for (const previewFile of this.previewFiles.filter(e => e.file)) {\r\n const reader = new FileReader();\r\n reader.onload = (evt) => {\r\n previewFile.previewSrc = evt.target.result;\r\n previewFile.isPreviewImage = previewFile.file?.type.split('/')[0] === 'image';\r\n this.ref.detectChanges();\r\n };\r\n reader.readAsDataURL(previewFile.file);\r\n }\r\n }\r\n\r\n onUpload = (previewFile?: PreviewFile) => {\r\n if ($(`#${this.id}`).length) {\r\n $('body').children(`#${this.id}`).remove();\r\n }\r\n if (previewFile || this.max === 1) {\r\n $('body').append(`<input id=\"${this.id}\" style=\"display: none\" type=\"file\" />`);\r\n } else {\r\n $('body').append(`<input id=\"${this.id}\" style=\"display: none\" type=\"file\" multiple />`);\r\n }\r\n $(`#${this.id}`).on('change', async (evt: any) => {\r\n await this.#uploadFile(evt.target, previewFile);\r\n $('body').children(`#${this.id}`).remove();\r\n });\r\n $(`#${this.id}`).trigger('click');\r\n }\r\n\r\n #uploadFile = async (target: DataTransfer, previewFile?: PreviewFile) => {\r\n if (!target.files.length) {\r\n return;\r\n }\r\n const originFiles = target.files;\r\n const files: File[] = [];\r\n if (!previewFile) {\r\n if (originFiles.length + this.previewFiles.length > this.max) {\r\n this.notifyService.notify.warning(`${this.translateService.translate('Max number of files')} ${this.max}`);\r\n return;\r\n }\r\n for (let i = 0; i < originFiles.length; i++) {\r\n let file = originFiles.item(i);\r\n if (this.type === 'image' && this.scaleToPixel > 0) {\r\n file = await this.#resize(file);\r\n }\r\n const message = await this.#validate(file);\r\n if (message) {\r\n this.notifyService.notify.warning(message);\r\n return;\r\n }\r\n files.push(file);\r\n }\r\n for (const file of files) {''\r\n const lastDot = file.name.lastIndexOf('.');\r\n const extension = file.name.substring(lastDot + 1);\r\n this.previewFiles.push({\r\n file,\r\n isPreviewImage: false,\r\n previewSrc: null,\r\n src: null,\r\n fileName: file.name,\r\n extension\r\n });\r\n }\r\n } else {\r\n const idx = this.previewFiles.indexOf(previewFile);\r\n let file = originFiles.item(0);\r\n if (this.type === 'image' && this.scaleToPixel > 0) {\r\n file = await this.#resize(file);\r\n }\r\n const lastDot = file.name.lastIndexOf('.');\r\n const extension = file.name.substring(lastDot + 1);\r\n this.previewFiles[idx] = {\r\n file,\r\n isPreviewImage: false,\r\n previewSrc: null,\r\n src: null,\r\n fileName: file.name,\r\n extension\r\n };\r\n }\r\n this.#preview();\r\n this.modelChange.emit(this.previewFiles);\r\n this.sdChange.emit(this.previewFiles);\r\n this.ref.detectChanges();\r\n }\r\n\r\n onRemove = (previewFile: PreviewFile) => {\r\n this.notifyService.confirmDelete().then(() => {\r\n const idx = this.previewFiles.indexOf(previewFile);\r\n this.previewFiles.splice(idx, 1);\r\n this.modelChange.emit(this.previewFiles);\r\n this.sdChange.emit(this.previewFiles);\r\n });\r\n }\r\n\r\n onDrop = (event: CdkDragDrop<string[]>) => {\r\n moveItemInArray(this.previewFiles, event.previousIndex, event.currentIndex);\r\n this.modelChange.emit(this.previewFiles);\r\n this.sdChange.emit(this.previewFiles);\r\n }\r\n\r\n #resize = async (file: File): Promise<File> => {\r\n if (!this.scaleToPixel) {\r\n return file;\r\n }\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n return file;\r\n }\r\n return await new Promise((resolve, reject) => {\r\n const URL = window.URL || window.webkitURL;\r\n const img = new Image();\r\n img.onload = () => {\r\n try {\r\n if (img.width * img.height <= this.scaleToPixel) {\r\n return resolve(file);\r\n }\r\n const canvas1 = document.createElement('canvas');\r\n canvas1.setAttribute('id', this.#canvas1);\r\n const ctx1 = canvas1.getContext('2d');\r\n const { width, height } = this.#scale(img.width, img.height, this.scaleToPixel);\r\n canvas1.width = width;\r\n canvas1.height = height;\r\n\r\n const canvas2 = document.createElement('canvas');\r\n canvas2.setAttribute('id', this.#canvas2);\r\n const ctx2 = canvas2.getContext('2d');\r\n canvas2.width = width;\r\n canvas2.height = height;\r\n ctx2.drawImage(img, 0, 0, canvas2.width, canvas2.height);\r\n ctx2.drawImage(canvas2, 0, 0, canvas2.width * 0.5, canvas2.height * 0.5);\r\n ctx1.drawImage(canvas2, 0, 0, canvas2.width * 0.5, canvas2.height * 0.5, 0, 0, canvas1.width, canvas1.height);\r\n canvas1.toBlob(blob => {\r\n resolve(this.#blobToFile(blob, `${file.name.substring(0, lastDot)}.png`));\r\n });\r\n } catch (err) {\r\n reject(err);\r\n } finally {\r\n $(`#${this.#canvas1}`).remove();\r\n $(`#${this.#canvas2}`).remove();\r\n }\r\n };\r\n img.src = URL.createObjectURL(file);\r\n });\r\n }\r\n\r\n #scale = (width: number, height: number, scaleToPixcel: number) => {\r\n if (!width || !height || !scaleToPixcel) {\r\n return {\r\n width,\r\n height\r\n };\r\n }\r\n const ratio = width / height;\r\n for (let i = 0; i < width; i++) {\r\n width -= i;\r\n height = Math.trunc(width / ratio);\r\n if (width * height <= scaleToPixcel) {\r\n break;\r\n }\r\n }\r\n return {\r\n width,\r\n height\r\n };\r\n }\r\n\r\n onSelect = (file: PreviewFile) => {\r\n if (!this.#isMobileOrTablet) {\r\n return;\r\n }\r\n if (this.selectedFile !== file) {\r\n this.selectedFile = file;\r\n } else {\r\n this.selectedFile = null;\r\n }\r\n }\r\n\r\n #blobToFile = (blob: Blob, fileName: string): File => {\r\n const temp: any = blob;\r\n temp.lastModifiedDate = new Date();\r\n temp.name = fileName;\r\n return blob as File;\r\n }\r\n}\r\n\r\nexport interface PreviewFile {\r\n file: File;\r\n src: string;\r\n previewSrc: string | ArrayBuffer;\r\n isPreviewImage: boolean;\r\n fileName?: string;\r\n extension?: string;\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DeviceDetectorModule } from 'ngx-device-detector';\r\nimport { SdUploadFile } from './upload-file.component';\r\nimport { SdNotifyModule } from '@sd-angular/core/notify';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { SdImagePreviewModule } from '@sd-angular/core/image-preview';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n DeviceDetectorModule.forRoot(),\r\n MatButtonModule,\r\n MatIconModule,\r\n DragDropModule,\r\n SdNotifyModule,\r\n SdTranslateModule,\r\n SdImagePreviewModule\r\n ],\r\n declarations: [\r\n SdUploadFile\r\n ],\r\n exports: [\r\n SdUploadFile\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdUploadFileModule { }\r\n"]}
1
+ {"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/upload-file/src/lib/upload-file.component.ts","../../../../projects/sd-core/upload-file/src/lib/upload-file.module.ts"],"names":["__awaiter","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","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","Object","create","__values","o","s","m","i","__classPrivateFieldGet","receiver","state","kind","has","get","__classPrivateFieldSet","set","SdUploadFile","deviceService","ref","notifyService","translateService","_this","id","uuid.v4","_isMobileOrTablet","_canvas1","_canvas2","previewFiles","type","disabled","extensions","max","_srcs","previewWidth","previewHeight","align","_model","loaded","EventEmitter","modelChange","sdChange","_subscription","Subscription","_currentDropContainer","_srcChanges","Subject","_modelChanges","reload","Array","isArray","emit","_validate","file","split","name","translate","_a","lastDot","lastIndexOf","extension_1","substring","some","toUpperCase","join","maxSize","size","maxWidth","maxHeight","URL","window","webkitURL","img","Image","onload","width","height","src","createObjectURL","message","_b","_preview","sum","previewFile","reader","FileReader","evt","previewSrc","target","isPreviewImage","detectChanges","filter","readAsDataURL","_c","_d","onUpload","$","children","remove","append","on","_uploadFile","trigger","files","originFiles","notify","warning","item","scaleToPixel","_resize","files_1","files_1_1","extension","fileName","idx","indexOf","onRemove","confirmDelete","splice","onDrop","event","moveItemInArray","previousIndex","currentIndex","canvas1","document","createElement","setAttribute","ctx1","getContext","_scale","canvas2","ctx2","drawImage","toBlob","blob","_blobToFile","err","scaleToPixcel","ratio","Math","trunc","onSelect","selectedFile","temp","lastModifiedDate","Date","isDesktop","defineProperty","prototype","srcs","model","flag_1","map","baseSrc","ngOnInit","ngAfterViewInit","add","pipe","startWith","subscribe","dropElements","dropContainer_1","first","nativeElement","addEventListener","preventDefault","style","opacity","border","dataTransfer","changes","dropContainer_2","ngOnDestroy","unsubscribe","Component","args","selector","template","DeviceDetectorService","ChangeDetectorRef","SdNotifyService","SdTranslateService","Input","Output","ViewChildren","ViewChild","ContentChild","SdLabelDefDirective","NgModule","imports","CommonModule","DeviceDetectorModule","forRoot","MatButtonModule","MatIconModule","DragDropModule","SdNotifyModule","SdTranslateModule","SdImagePreviewModule","declarations","exports","providers"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(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\n\r\nexport function __generator(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 (_) 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\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectorRef,\r\n AfterViewInit,\r\n ElementRef,\r\n OnInit,\r\n ViewChildren,\r\n QueryList,\r\n OnDestroy,\r\n ViewChild,\r\n ContentChild\r\n} from '@angular/core';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport * as uuid from 'uuid';\r\nimport $ from 'jquery';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTranslateService } from '@sd-angular/core/translate';\r\nimport { Subscription, Subject } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { SdLabelDefDirective } from '@sd-angular/core/common';\r\n\r\n// https://stackoverflow.com/questions/4459379/preview-an-image-before-it-is-uploaded\r\n@Component({\r\n selector: 'sd-upload-file',\r\n templateUrl: './upload-file.component.html',\r\n styleUrls: ['./upload-file.component.scss']\r\n})\r\nexport class SdUploadFile implements OnInit, AfterViewInit, OnDestroy {\r\n id = `I${uuid.v4()}`;\r\n #isMobileOrTablet = false;\r\n #canvas1 = `C${uuid.v4()}`;\r\n #canvas2 = `C${uuid.v4()}`;\r\n previewFiles: PreviewFile[] = [];\r\n selectedFile: PreviewFile;\r\n @Input() label: string;\r\n @Input() type: 'image' | 'file' = 'file';\r\n @Input() disabled = false;\r\n @Input() extensions: string[] = [];\r\n @Input() max = 1;\r\n @Input() maxSize: number;\r\n @Input() maxWidth: number;\r\n @Input() maxHeight: number;\r\n @Input() scaleToPixel: number;\r\n #srcs: string[];\r\n @Input() set srcs(srcs: string[]) {\r\n if (Array.isArray(srcs)) {\r\n this.#srcs = srcs;\r\n this.#srcChanges.next(this.#srcs);\r\n }\r\n }\r\n @Input() previewWidth: string = '100px';\r\n @Input() previewHeight: string = '100px';\r\n @Input() align: 'left' | 'center' = 'center';\r\n #model: PreviewFile[];\r\n @Input() set model(model: (string | PreviewFile)[]) {\r\n if (Array.isArray(model) && this.#model !== model) {\r\n let flag = false;\r\n this.#model = model.map(src => {\r\n if (typeof (src) === 'string') {\r\n let extension = null;\r\n const baseSrc = src.split('?')?.[0];\r\n const lastDot = baseSrc.lastIndexOf('.');\r\n if (lastDot > 0) {\r\n extension = baseSrc.substring(lastDot + 1);\r\n }\r\n flag = true;\r\n return {\r\n file: null,\r\n previewSrc: null,\r\n src,\r\n isPreviewImage: this.type === 'image',\r\n extension\r\n }\r\n }\r\n return src;\r\n });\r\n if (flag) {\r\n this.modelChange.emit(this.#model);\r\n }\r\n this.#modelChanges.next(this.#model);\r\n } else {\r\n this.#model = [];\r\n }\r\n }\r\n @Output() loaded = new EventEmitter<PreviewFile[]>();\r\n @Output() modelChange = new EventEmitter<PreviewFile[]>();\r\n @Output() sdChange = new EventEmitter<PreviewFile[]>();\r\n @ViewChildren('dropElement') dropElements: QueryList<ElementRef>;\r\n @ViewChild('canvas') canvas: ElementRef;\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n #subscription = new Subscription();\r\n #currentDropContainer: any;\r\n #srcChanges = new Subject();\r\n #modelChanges = new Subject();\r\n constructor(\r\n deviceService: DeviceDetectorService,\r\n private ref: ChangeDetectorRef,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService) {\r\n this.#isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.#srcChanges.pipe(startWith(this.#srcs)).subscribe(() => {\r\n if (!Array.isArray(this.#srcs)) {\r\n return;\r\n }\r\n const previewFiles = this.#srcs.map(src => {\r\n let extension = null;\r\n const baseSrc = src.split('?')?.[0];\r\n const lastDot = baseSrc.lastIndexOf('.');\r\n if (lastDot > 0) {\r\n extension = baseSrc.substring(lastDot + 1);\r\n }\r\n return {\r\n file: null,\r\n previewSrc: null,\r\n src,\r\n isPreviewImage: this.type === 'image',\r\n extension\r\n }\r\n });\r\n this.previewFiles = previewFiles;\r\n this.modelChange.emit(previewFiles);\r\n // this.sdChange.emit(previewFiles);\r\n }));\r\n this.#subscription.add(this.#modelChanges.pipe(startWith([])).subscribe(() => {\r\n if (Array.isArray(this.#model)) {\r\n this.previewFiles = this.#model;\r\n }\r\n }));\r\n if (!this.#isMobileOrTablet) {\r\n if (this.dropElements.length > 0) {\r\n const dropContainer = this.dropElements.first.nativeElement;\r\n this.#currentDropContainer = dropContainer;\r\n dropContainer.addEventListener('dragover', (evt: Event) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.9;\r\n dropContainer.style.border = '2px solid grey';\r\n });\r\n dropContainer.addEventListener('dragenter', (evt: Event) => {\r\n evt.preventDefault();\r\n });\r\n dropContainer.addEventListener('dragleave', (evt: Event) => {\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n });\r\n dropContainer.addEventListener('drop', async (evt: DragEvent) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n await this.#uploadFile(evt.dataTransfer);\r\n });\r\n }\r\n this.#subscription.add(this.dropElements.changes.subscribe(() => {\r\n if (this.dropElements.length > 0 && this.#currentDropContainer !== this.dropElements.first.nativeElement) {\r\n const dropContainer = this.dropElements.first.nativeElement;\r\n this.#currentDropContainer = dropContainer;\r\n dropContainer.addEventListener('dragover', (evt: Event) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.9;\r\n dropContainer.style.border = '2px solid grey';\r\n });\r\n dropContainer.addEventListener('dragenter', (evt: Event) => {\r\n evt.preventDefault();\r\n });\r\n dropContainer.addEventListener('dragleave', (evt: Event) => {\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n });\r\n dropContainer.addEventListener('drop', async (evt: DragEvent) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n await this.#uploadFile(evt.dataTransfer);\r\n });\r\n }\r\n }));\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n reload = (previewFiles: PreviewFile[]) => {\r\n if (Array.isArray(previewFiles)) {\r\n this.previewFiles = previewFiles;\r\n this.modelChange.emit(previewFiles);\r\n // this.sdChange.emit(previewFiles);\r\n }\r\n }\r\n\r\n #validate = async (file: File): Promise<string> => {\r\n if (this.type === 'image') {\r\n if (file.type.split('/')[0] !== 'image') {\r\n return `[${file.name}] ${this.translateService.translate('Uploaded file is not an image')}`;\r\n }\r\n }\r\n if (this.extensions?.length) {\r\n const lastDot = file.name.lastIndexOf('.');\r\n const extension = file.name.substring(lastDot + 1);\r\n if (!this.extensions.some(e => e.toUpperCase() === extension.toUpperCase())) {\r\n return `[${file.name}] ${this.translateService.translate('Uploaded file is not match extension')} ${this.extensions.join(', ')}`;\r\n }\r\n }\r\n if (this.maxSize) {\r\n if (this.maxSize * 1024 * 1024 < file.size) {\r\n return `[${file.name}] ${this.translateService.translate('Max file size')} ${this.maxSize} Mbs`;\r\n }\r\n }\r\n if (this.type === 'image' && (this.maxWidth || this.maxHeight)) {\r\n const message: string = await new Promise(resolve => {\r\n const URL = window.URL || window.webkitURL;\r\n const img = new Image();\r\n img.onload = () => {\r\n if (this.maxWidth && img.width > this.maxWidth) {\r\n resolve(`[${file.name}] ${this.translateService.translate('Max image width')} ${this.maxWidth}px`);\r\n }\r\n if (this.maxHeight && img.height > this.maxHeight) {\r\n resolve(`[${file.name}] ${this.translateService.translate('Max image height')} ${this.maxHeight}px`);\r\n }\r\n resolve(null);\r\n };\r\n img.src = URL.createObjectURL(file);\r\n });\r\n if (message) {\r\n return message;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n #preview = () => {\r\n let sum = 0;\r\n for (const previewFile of this.previewFiles.filter(e => e.file)) {\r\n const reader = new FileReader();\r\n reader.onload = (evt) => {\r\n previewFile.previewSrc = evt.target.result;\r\n previewFile.isPreviewImage = previewFile.file?.type.split('/')[0] === 'image';\r\n this.ref.detectChanges();\r\n sum++;\r\n if (sum === this.previewFiles.filter(e => e.file).length) this.loaded.emit(this.previewFiles)\r\n }\r\n reader.readAsDataURL(previewFile.file);\r\n }\r\n }\r\n\r\n onUpload = (previewFile?: PreviewFile) => {\r\n if ($(`#${this.id}`).length) {\r\n $('body').children(`#${this.id}`).remove();\r\n }\r\n if (previewFile || this.max === 1) {\r\n $('body').append(`<input id=\"${this.id}\" style=\"display: none\" type=\"file\" />`);\r\n } else {\r\n $('body').append(`<input id=\"${this.id}\" style=\"display: none\" type=\"file\" multiple />`);\r\n }\r\n $(`#${this.id}`).on('change', async (evt: any) => {\r\n await this.#uploadFile(evt.target, previewFile);\r\n $('body').children(`#${this.id}`).remove();\r\n });\r\n $(`#${this.id}`).trigger('click');\r\n }\r\n\r\n #uploadFile = async (target: DataTransfer, previewFile?: PreviewFile) => {\r\n if (!target.files.length) {\r\n return;\r\n }\r\n const originFiles = target.files;\r\n const files: File[] = [];\r\n if (!previewFile) {\r\n if (originFiles.length + this.previewFiles.length > this.max) {\r\n this.notifyService.notify.warning(`${this.translateService.translate('Max number of files')} ${this.max}`);\r\n return;\r\n }\r\n for (let i = 0; i < originFiles.length; i++) {\r\n let file = originFiles.item(i);\r\n if (this.type === 'image' && this.scaleToPixel > 0) {\r\n file = await this.#resize(file);\r\n }\r\n const message = await this.#validate(file);\r\n if (message) {\r\n this.notifyService.notify.warning(message);\r\n return;\r\n }\r\n files.push(file);\r\n }\r\n for (const file of files) {\r\n const lastDot = file.name.lastIndexOf('.');\r\n const extension = file.name.substring(lastDot + 1);\r\n this.previewFiles.push({\r\n file,\r\n isPreviewImage: false,\r\n previewSrc: null,\r\n src: null,\r\n fileName: file.name,\r\n extension\r\n });\r\n }\r\n } else {\r\n const idx = this.previewFiles.indexOf(previewFile);\r\n let file = originFiles.item(0);\r\n if (this.type === 'image' && this.scaleToPixel > 0) {\r\n file = await this.#resize(file);\r\n }\r\n const lastDot = file.name.lastIndexOf('.');\r\n const extension = file.name.substring(lastDot + 1);\r\n this.previewFiles[idx] = {\r\n file,\r\n isPreviewImage: false,\r\n previewSrc: null,\r\n src: null,\r\n fileName: file.name,\r\n extension\r\n };\r\n }\r\n this.#preview();\r\n this.modelChange.emit(this.previewFiles);\r\n this.sdChange.emit(this.previewFiles);\r\n this.ref.detectChanges();\r\n }\r\n\r\n onRemove = (previewFile: PreviewFile) => {\r\n this.notifyService.confirmDelete().then(() => {\r\n const idx = this.previewFiles.indexOf(previewFile);\r\n this.previewFiles.splice(idx, 1);\r\n this.modelChange.emit(this.previewFiles);\r\n this.sdChange.emit(this.previewFiles);\r\n });\r\n }\r\n\r\n onDrop = (event: CdkDragDrop<string[]>) => {\r\n moveItemInArray(this.previewFiles, event.previousIndex, event.currentIndex);\r\n this.modelChange.emit(this.previewFiles);\r\n this.sdChange.emit(this.previewFiles);\r\n }\r\n\r\n #resize = async (file: File): Promise<File> => {\r\n if (!this.scaleToPixel) {\r\n return file;\r\n }\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n return file;\r\n }\r\n return await new Promise((resolve, reject) => {\r\n const URL = window.URL || window.webkitURL;\r\n const img = new Image();\r\n img.onload = () => {\r\n try {\r\n if (img.width * img.height <= this.scaleToPixel) {\r\n return resolve(file);\r\n }\r\n const canvas1 = document.createElement('canvas');\r\n canvas1.setAttribute('id', this.#canvas1);\r\n const ctx1 = canvas1.getContext('2d');\r\n const { width, height } = this.#scale(img.width, img.height, this.scaleToPixel);\r\n canvas1.width = width;\r\n canvas1.height = height;\r\n\r\n const canvas2 = document.createElement('canvas');\r\n canvas2.setAttribute('id', this.#canvas2);\r\n const ctx2 = canvas2.getContext('2d');\r\n canvas2.width = width;\r\n canvas2.height = height;\r\n ctx2.drawImage(img, 0, 0, canvas2.width, canvas2.height);\r\n ctx2.drawImage(canvas2, 0, 0, canvas2.width * 0.5, canvas2.height * 0.5);\r\n ctx1.drawImage(canvas2, 0, 0, canvas2.width * 0.5, canvas2.height * 0.5, 0, 0, canvas1.width, canvas1.height);\r\n canvas1.toBlob(blob => {\r\n resolve(this.#blobToFile(blob, `${file.name.substring(0, lastDot)}.png`));\r\n });\r\n } catch (err) {\r\n reject(err);\r\n } finally {\r\n $(`#${this.#canvas1}`).remove();\r\n $(`#${this.#canvas2}`).remove();\r\n }\r\n };\r\n img.src = URL.createObjectURL(file);\r\n });\r\n }\r\n\r\n #scale = (width: number, height: number, scaleToPixcel: number) => {\r\n if (!width || !height || !scaleToPixcel) {\r\n return {\r\n width,\r\n height\r\n };\r\n }\r\n const ratio = width / height;\r\n for (let i = 0; i < width; i++) {\r\n width -= i;\r\n height = Math.trunc(width / ratio);\r\n if (width * height <= scaleToPixcel) {\r\n break;\r\n }\r\n }\r\n return {\r\n width,\r\n height\r\n };\r\n }\r\n\r\n onSelect = (file: PreviewFile) => {\r\n if (!this.#isMobileOrTablet) {\r\n return;\r\n }\r\n if (this.selectedFile !== file) {\r\n this.selectedFile = file;\r\n } else {\r\n this.selectedFile = null;\r\n }\r\n }\r\n\r\n #blobToFile = (blob: Blob, fileName: string): File => {\r\n const temp: any = blob;\r\n temp.lastModifiedDate = new Date();\r\n temp.name = fileName;\r\n return blob as File;\r\n }\r\n}\r\n\r\nexport interface PreviewFile {\r\n file: File;\r\n src: string;\r\n previewSrc: string | ArrayBuffer;\r\n isPreviewImage: boolean;\r\n fileName?: string;\r\n extension?: string;\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DeviceDetectorModule } from 'ngx-device-detector';\r\nimport { SdUploadFile } from './upload-file.component';\r\nimport { SdNotifyModule } from '@sd-angular/core/notify';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { SdImagePreviewModule } from '@sd-angular/core/image-preview';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n DeviceDetectorModule.forRoot(),\r\n MatButtonModule,\r\n MatIconModule,\r\n DragDropModule,\r\n SdNotifyModule,\r\n SdTranslateModule,\r\n SdImagePreviewModule\r\n ],\r\n declarations: [\r\n SdUploadFile\r\n ],\r\n exports: [\r\n SdUploadFile\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdUploadFileModule { }\r\n"]}
@@ -30,6 +30,7 @@ export class SdUploadFile {
30
30
  this.previewHeight = '100px';
31
31
  this.align = 'center';
32
32
  _model.set(this, void 0);
33
+ this.loaded = new EventEmitter();
33
34
  this.modelChange = new EventEmitter();
34
35
  this.sdChange = new EventEmitter();
35
36
  _subscription.set(this, new Subscription());
@@ -84,6 +85,7 @@ export class SdUploadFile {
84
85
  return null;
85
86
  }));
86
87
  _preview.set(this, () => {
88
+ let sum = 0;
87
89
  for (const previewFile of this.previewFiles.filter(e => e.file)) {
88
90
  const reader = new FileReader();
89
91
  reader.onload = (evt) => {
@@ -91,6 +93,9 @@ export class SdUploadFile {
91
93
  previewFile.previewSrc = evt.target.result;
92
94
  previewFile.isPreviewImage = ((_a = previewFile.file) === null || _a === void 0 ? void 0 : _a.type.split('/')[0]) === 'image';
93
95
  this.ref.detectChanges();
96
+ sum++;
97
+ if (sum === this.previewFiles.filter(e => e.file).length)
98
+ this.loaded.emit(this.previewFiles);
94
99
  };
95
100
  reader.readAsDataURL(previewFile.file);
96
101
  }
@@ -135,7 +140,6 @@ export class SdUploadFile {
135
140
  files.push(file);
136
141
  }
137
142
  for (const file of files) {
138
- '';
139
143
  const lastDot = file.name.lastIndexOf('.');
140
144
  const extension = file.name.substring(lastDot + 1);
141
145
  this.previewFiles.push({
@@ -419,10 +423,11 @@ SdUploadFile.propDecorators = {
419
423
  previewHeight: [{ type: Input }],
420
424
  align: [{ type: Input }],
421
425
  model: [{ type: Input }],
426
+ loaded: [{ type: Output }],
422
427
  modelChange: [{ type: Output }],
423
428
  sdChange: [{ type: Output }],
424
429
  dropElements: [{ type: ViewChildren, args: ['dropElement',] }],
425
430
  canvas: [{ type: ViewChild, args: ['canvas',] }],
426
431
  sdLabelDef: [{ type: ContentChild, args: [SdLabelDefDirective,] }]
427
432
  };
428
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS91cGxvYWQtZmlsZS8iLCJzb3VyY2VzIjpbInNyYy9saWIvdXBsb2FkLWZpbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsRUFJakIsWUFBWSxFQUdaLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlELHFGQUFxRjtBQU1yRixNQUFNLE9BQU8sWUFBWTtJQWtFdkIsWUFDRSxhQUFvQyxFQUM1QixHQUFzQixFQUN0QixhQUE4QixFQUM5QixnQkFBb0M7UUFGcEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFyRTlDLE9BQUUsR0FB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R0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUMzQyxDQUFDLENBQUEsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNMO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCw0Q0FBbUIsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7OztZQXBLRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsOGtJQUEyQzs7YUFFNUM7OztZQWRRLHFCQUFxQjtZQVg1QixpQkFBaUI7WUFjVixlQUFlO1lBQ2Ysa0JBQWtCOzs7b0JBa0J4QixLQUFLO21CQUNMLEtBQUs7dUJBQ0wsS0FBSzt5QkFDTCxLQUFLO2tCQUNMLEtBQUs7c0JBQ0wsS0FBSzt1QkFDTCxLQUFLO3dCQUNMLEtBQUs7MkJBQ0wsS0FBSzttQkFFTCxLQUFLOzJCQU1MLEtBQUs7NEJBQ0wsS0FBSztvQkFDTCxLQUFLO29CQUVMLEtBQUs7MEJBOEJMLE1BQU07dUJBQ04sTUFBTTsyQkFDTixZQUFZLFNBQUMsYUFBYTtxQkFDMUIsU0FBUyxTQUFDLFFBQVE7eUJBQ2xCLFlBQVksU0FBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgRWxlbWVudFJlZixcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgVmlld0NoaWxkLFxyXG4gIENvbnRlbnRDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgeyBTZE5vdGlmeVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcbmltcG9ydCB7IFNkVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdHJhbnNsYXRlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU2RMYWJlbERlZkRpcmVjdGl2ZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvY29tbW9uJztcclxuXHJcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ0NTkzNzkvcHJldmlldy1hbi1pbWFnZS1iZWZvcmUtaXQtaXMtdXBsb2FkZWRcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC11cGxvYWQtZmlsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC1maWxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtZmlsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZFVwbG9hZEZpbGUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgaWQgPSBgSSR7dXVpZC52NCgpfWA7XHJcbiAgI2lzTW9iaWxlT3JUYWJsZXQgPSBmYWxzZTtcclxuICAjY2FudmFzMSA9IGBDJHt1dWlkLnY0KCl9YDtcclxuICAjY2FudmFzMiA9IGBDJHt1dWlkLnY0KCl9YDtcclxuICBwcmV2aWV3RmlsZXM6IFByZXZpZXdGaWxlW10gPSBbXTtcclxuICBzZWxlY3RlZEZpbGU6IFByZXZpZXdGaWxlO1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdHlwZTogJ2ltYWdlJyB8ICdmaWxlJyA9ICdmaWxlJztcclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGV4dGVuc2lvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgbWF4ID0gMTtcclxuICBASW5wdXQoKSBtYXhTaXplOiBudW1iZXI7XHJcbiAgQElucHV0KCkgbWF4V2lkdGg6IG51bWJlcjtcclxuICBASW5wdXQoKSBtYXhIZWlnaHQ6IG51bWJlcjtcclxuICBASW5wdXQoKSBzY2FsZVRvUGl4ZWw6IG51bWJlcjtcclxuICAjc3Jjczogc3RyaW5nW107XHJcbiAgQElucHV0KCkgc2V0IHNyY3Moc3Jjczogc3RyaW5nW10pIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHNyY3MpKSB7XHJcbiAgICAgIHRoaXMuI3NyY3MgPSBzcmNzO1xyXG4gICAgICB0aGlzLiNzcmNDaGFuZ2VzLm5leHQodGhpcy4jc3Jjcyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHByZXZpZXdXaWR0aDogc3RyaW5nID0gJzEwMHB4JztcclxuICBASW5wdXQoKSBwcmV2aWV3SGVpZ2h0OiBzdHJpbmcgPSAnMTAwcHgnO1xyXG4gIEBJbnB1dCgpIGFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyA9ICdjZW50ZXInO1xyXG4gICNtb2RlbDogUHJldmlld0ZpbGVbXTtcclxuICBASW5wdXQoKSBzZXQgbW9kZWwobW9kZWw6IChzdHJpbmcgfCBQcmV2aWV3RmlsZSlbXSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWwpICYmIHRoaXMuI21vZGVsICE9PSBtb2RlbCkge1xyXG4gICAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLiNtb2RlbCA9IG1vZGVsLm1hcChzcmMgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgKHNyYykgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBsZXQgZXh0ZW5zaW9uID0gbnVsbDtcclxuICAgICAgICAgIGNvbnN0IGJhc2VTcmMgPSBzcmMuc3BsaXQoJz8nKT8uWzBdO1xyXG4gICAgICAgICAgY29uc3QgbGFzdERvdCA9IGJhc2VTcmMubGFzdEluZGV4T2YoJy4nKTtcclxuICAgICAgICAgIGlmIChsYXN0RG90ID4gMCkge1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBiYXNlU3JjLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmbGFnID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZpbGU6IG51bGwsXHJcbiAgICAgICAgICAgIHByZXZpZXdTcmM6IG51bGwsXHJcbiAgICAgICAgICAgIHNyYyxcclxuICAgICAgICAgICAgaXNQcmV2aWV3SW1hZ2U6IHRoaXMudHlwZSA9PT0gJ2ltYWdlJyxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzcmM7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLiNtb2RlbCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy4jbW9kZWxDaGFuZ2VzLm5leHQodGhpcy4jbW9kZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy4jbW9kZWwgPSBbXTtcclxuICAgIH1cclxuICB9XHJcbiAgQE91dHB1dCgpIG1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQcmV2aWV3RmlsZVtdPigpO1xyXG4gIEBPdXRwdXQoKSBzZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UHJldmlld0ZpbGVbXT4oKTtcclxuICBAVmlld0NoaWxkcmVuKCdkcm9wRWxlbWVudCcpIGRyb3BFbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycpIGNhbnZhczogRWxlbWVudFJlZjtcclxuICBAQ29udGVudENoaWxkKFNkTGFiZWxEZWZEaXJlY3RpdmUpIHNkTGFiZWxEZWY6IFNkTGFiZWxEZWZEaXJlY3RpdmU7XHJcbiAgI3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAjY3VycmVudERyb3BDb250YWluZXI6IGFueTtcclxuICAjc3JjQ2hhbmdlcyA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgI21vZGVsQ2hhbmdlcyA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIG5vdGlmeVNlcnZpY2U6IFNkTm90aWZ5U2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogU2RUcmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLiNpc01vYmlsZU9yVGFibGV0ID0gIWRldmljZVNlcnZpY2UuaXNEZXNrdG9wKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuI3NyY0NoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy4jc3JjcykpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLiNzcmNzKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwcmV2aWV3RmlsZXMgPSB0aGlzLiNzcmNzLm1hcChzcmMgPT4ge1xyXG4gICAgICAgIGxldCBleHRlbnNpb24gPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IGJhc2VTcmMgPSBzcmMuc3BsaXQoJz8nKT8uWzBdO1xyXG4gICAgICAgIGNvbnN0IGxhc3REb3QgPSBiYXNlU3JjLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICAgICAgaWYgKGxhc3REb3QgPiAwKSB7XHJcbiAgICAgICAgICBleHRlbnNpb24gPSBiYXNlU3JjLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBmaWxlOiBudWxsLFxyXG4gICAgICAgICAgcHJldmlld1NyYzogbnVsbCxcclxuICAgICAgICAgIHNyYyxcclxuICAgICAgICAgIGlzUHJldmlld0ltYWdlOiB0aGlzLnR5cGUgPT09ICdpbWFnZScsXHJcbiAgICAgICAgICBleHRlbnNpb25cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnByZXZpZXdGaWxlcyA9IHByZXZpZXdGaWxlcztcclxuICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHByZXZpZXdGaWxlcyk7XHJcbiAgICAgIC8vIHRoaXMuc2RDaGFuZ2UuZW1pdChwcmV2aWV3RmlsZXMpO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLiNtb2RlbENoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLiNtb2RlbCkpIHtcclxuICAgICAgICB0aGlzLnByZXZpZXdGaWxlcyA9IHRoaXMuI21vZGVsO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICBpZiAoIXRoaXMuI2lzTW9iaWxlT3JUYWJsZXQpIHtcclxuICAgICAgaWYgKHRoaXMuZHJvcEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBkcm9wQ29udGFpbmVyID0gdGhpcy5kcm9wRWxlbWVudHMuZmlyc3QubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0aGlzLiNjdXJyZW50RHJvcENvbnRhaW5lciA9IGRyb3BDb250YWluZXI7XHJcbiAgICAgICAgZHJvcENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIChldnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgIGRyb3BDb250YWluZXIuc3R5bGUub3BhY2l0eSA9IDAuOTtcclxuICAgICAgICAgIGRyb3BDb250YWluZXIuc3R5bGUuYm9yZGVyID0gJzJweCBzb2xpZCBncmV5JztcclxuICAgICAgICB9KTtcclxuICAgICAgICBkcm9wQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIChldnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkcm9wQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIChldnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBkcm9wQ29udGFpbmVyLnN0eWxlLm9wYWNpdHkgPSAwLjY7XHJcbiAgICAgICAgICBkcm9wQ29udGFpbmVyLnN0eWxlLmJvcmRlciA9ICcycHggZGFzaGVkIGdyZXknO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRyb3BDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIGFzeW5jIChldnQ6IERyYWdFdmVudCkgPT4ge1xyXG4gICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICBkcm9wQ29udGFpbmVyLnN0eWxlLm9wYWNpdHkgPSAwLjY7XHJcbiAgICAgICAgICBkcm9wQ29udGFpbmVyLnN0eWxlLmJvcmRlciA9ICcycHggZGFzaGVkIGdyZXknO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy4jdXBsb2FkRmlsZShldnQuZGF0YVRyYW5zZmVyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuZHJvcEVsZW1lbnRzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kcm9wRWxlbWVudHMubGVuZ3RoID4gMCAmJiB0aGlzLiNjdXJyZW50RHJvcENvbnRhaW5lciAhPT0gdGhpcy5kcm9wRWxlbWVudHMuZmlyc3QubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgY29uc3QgZHJvcENvbnRhaW5lciA9IHRoaXMuZHJvcEVsZW1lbnRzLmZpcnN0Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICB0aGlzLiNjdXJyZW50RHJvcENvbnRhaW5lciA9IGRyb3BDb250YWluZXI7XHJcbiAgICAgICAgICBkcm9wQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgKGV2dDogRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGRyb3BDb250YWluZXIuc3R5bGUub3BhY2l0eSA9IDAuOTtcclxuICAgICAgICAgICAgZHJvcENvbnRhaW5lci5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkIGdyZXknO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBkcm9wQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIChldnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBkcm9wQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIChldnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGRyb3BDb250YWluZXIuc3R5bGUub3BhY2l0eSA9IDAuNjtcclxuICAgICAgICAgICAgZHJvcENvbnRhaW5lci5zdHlsZS5ib3JkZXIgPSAnMnB4IGRhc2hlZCBncmV5JztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZHJvcENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgYXN5bmMgKGV2dDogRHJhZ0V2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBkcm9wQ29udGFpbmVyLnN0eWxlLm9wYWNpdHkgPSAwLjY7XHJcbiAgICAgICAgICAgIGRyb3BDb250YWluZXIuc3R5bGUuYm9yZGVyID0gJzJweCBkYXNoZWQgZ3JleSc7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI3VwbG9hZEZpbGUoZXZ0LmRhdGFUcmFuc2Zlcik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICByZWxvYWQgPSAocHJldmlld0ZpbGVzOiBQcmV2aWV3RmlsZVtdKSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcmV2aWV3RmlsZXMpKSB7XHJcbiAgICAgIHRoaXMucHJldmlld0ZpbGVzID0gcHJldmlld0ZpbGVzO1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQocHJldmlld0ZpbGVzKTtcclxuICAgICAgLy8gdGhpcy5zZENoYW5nZS5lbWl0KHByZXZpZXdGaWxlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAjdmFsaWRhdGUgPSBhc3luYyAoZmlsZTogRmlsZSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgIGlmIChmaWxlLnR5cGUuc3BsaXQoJy8nKVswXSAhPT0gJ2ltYWdlJykge1xyXG4gICAgICAgIHJldHVybiBgWyR7ZmlsZS5uYW1lfV0gJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdVcGxvYWRlZCBmaWxlIGlzIG5vdCBhbiBpbWFnZScpfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmV4dGVuc2lvbnM/Lmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBsYXN0RG90ID0gZmlsZS5uYW1lLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGZpbGUubmFtZS5zdWJzdHJpbmcobGFzdERvdCArIDEpO1xyXG4gICAgICBpZiAoIXRoaXMuZXh0ZW5zaW9ucy5zb21lKGUgPT4gZS50b1VwcGVyQ2FzZSgpID09PSBleHRlbnNpb24udG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICByZXR1cm4gYFske2ZpbGUubmFtZX1dICR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnVXBsb2FkZWQgZmlsZSBpcyBub3QgbWF0Y2ggZXh0ZW5zaW9uJyl9ICR7dGhpcy5leHRlbnNpb25zLmpvaW4oJywgJyl9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubWF4U2l6ZSkge1xyXG4gICAgICBpZiAodGhpcy5tYXhTaXplICogMTAyNCAqIDEwMjQgPCBmaWxlLnNpemUpIHtcclxuICAgICAgICByZXR1cm4gYFske2ZpbGUubmFtZX1dICR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnTWF4IGZpbGUgc2l6ZScpfSAke3RoaXMubWF4U2l6ZX0gTWJzYDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2ltYWdlJyAmJiAodGhpcy5tYXhXaWR0aCB8fCB0aGlzLm1heEhlaWdodCkpIHtcclxuICAgICAgY29uc3QgbWVzc2FnZTogc3RyaW5nID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xyXG4gICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5tYXhXaWR0aCAmJiBpbWcud2lkdGggPiB0aGlzLm1heFdpZHRoKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoYFske2ZpbGUubmFtZX1dICR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnTWF4IGltYWdlIHdpZHRoJyl9ICR7dGhpcy5tYXhXaWR0aH1weGApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMubWF4SGVpZ2h0ICYmIGltZy5oZWlnaHQgPiB0aGlzLm1heEhlaWdodCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKGBbJHtmaWxlLm5hbWV9XSAke3RoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ01heCBpbWFnZSBoZWlnaHQnKX0gJHt0aGlzLm1heEhlaWdodH1weGApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGltZy5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAjcHJldmlldyA9ICgpID0+IHtcclxuICAgIGZvciAoY29uc3QgcHJldmlld0ZpbGUgb2YgdGhpcy5wcmV2aWV3RmlsZXMuZmlsdGVyKGUgPT4gZS5maWxlKSkge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKGV2dCkgPT4ge1xyXG4gICAgICAgIHByZXZpZXdGaWxlLnByZXZpZXdTcmMgPSBldnQudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBwcmV2aWV3RmlsZS5pc1ByZXZpZXdJbWFnZSA9IHByZXZpZXdGaWxlLmZpbGU/LnR5cGUuc3BsaXQoJy8nKVswXSA9PT0gJ2ltYWdlJztcclxuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH07XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKHByZXZpZXdGaWxlLmZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25VcGxvYWQgPSAocHJldmlld0ZpbGU/OiBQcmV2aWV3RmlsZSkgPT4ge1xyXG4gICAgaWYgKCQoYCMke3RoaXMuaWR9YCkubGVuZ3RoKSB7XHJcbiAgICAgICQoJ2JvZHknKS5jaGlsZHJlbihgIyR7dGhpcy5pZH1gKS5yZW1vdmUoKTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2aWV3RmlsZSB8fCB0aGlzLm1heCA9PT0gMSkge1xyXG4gICAgICAkKCdib2R5JykuYXBwZW5kKGA8aW5wdXQgaWQ9XCIke3RoaXMuaWR9XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgdHlwZT1cImZpbGVcIiAvPmApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgJCgnYm9keScpLmFwcGVuZChgPGlucHV0IGlkPVwiJHt0aGlzLmlkfVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIHR5cGU9XCJmaWxlXCIgbXVsdGlwbGUgLz5gKTtcclxuICAgIH1cclxuICAgICQoYCMke3RoaXMuaWR9YCkub24oJ2NoYW5nZScsIGFzeW5jIChldnQ6IGFueSkgPT4ge1xyXG4gICAgICBhd2FpdCB0aGlzLiN1cGxvYWRGaWxlKGV2dC50YXJnZXQsIHByZXZpZXdGaWxlKTtcclxuICAgICAgJCgnYm9keScpLmNoaWxkcmVuKGAjJHt0aGlzLmlkfWApLnJlbW92ZSgpO1xyXG4gICAgfSk7XHJcbiAgICAkKGAjJHt0aGlzLmlkfWApLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbiAgfVxyXG5cclxuICAjdXBsb2FkRmlsZSA9IGFzeW5jICh0YXJnZXQ6IERhdGFUcmFuc2ZlciwgcHJldmlld0ZpbGU/OiBQcmV2aWV3RmlsZSkgPT4ge1xyXG4gICAgaWYgKCF0YXJnZXQuZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG9yaWdpbkZpbGVzID0gdGFyZ2V0LmZpbGVzO1xyXG4gICAgY29uc3QgZmlsZXM6IEZpbGVbXSA9IFtdO1xyXG4gICAgaWYgKCFwcmV2aWV3RmlsZSkge1xyXG4gICAgICBpZiAob3JpZ2luRmlsZXMubGVuZ3RoICsgdGhpcy5wcmV2aWV3RmlsZXMubGVuZ3RoID4gdGhpcy5tYXgpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoYCR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnTWF4IG51bWJlciBvZiBmaWxlcycpfSAke3RoaXMubWF4fWApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yaWdpbkZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGZpbGUgPSBvcmlnaW5GaWxlcy5pdGVtKGkpO1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdpbWFnZScgJiYgdGhpcy5zY2FsZVRvUGl4ZWwgPiAwKSB7XHJcbiAgICAgICAgICBmaWxlID0gYXdhaXQgdGhpcy4jcmVzaXplKGZpbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy4jdmFsaWRhdGUoZmlsZSk7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZyhtZXNzYWdlKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHsnJ1xyXG4gICAgICAgIGNvbnN0IGxhc3REb3QgPSBmaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKTtcclxuICAgICAgICBjb25zdCBleHRlbnNpb24gPSBmaWxlLm5hbWUuc3Vic3RyaW5nKGxhc3REb3QgKyAxKTtcclxuICAgICAgICB0aGlzLnByZXZpZXdGaWxlcy5wdXNoKHtcclxuICAgICAgICAgIGZpbGUsXHJcbiAgICAgICAgICBpc1ByZXZpZXdJbWFnZTogZmFsc2UsXHJcbiAgICAgICAgICBwcmV2aWV3U3JjOiBudWxsLFxyXG4gICAgICAgICAgc3JjOiBudWxsLFxyXG4gICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcclxuICAgICAgICAgIGV4dGVuc2lvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpZHggPSB0aGlzLnByZXZpZXdGaWxlcy5pbmRleE9mKHByZXZpZXdGaWxlKTtcclxuICAgICAgbGV0IGZpbGUgPSBvcmlnaW5GaWxlcy5pdGVtKDApO1xyXG4gICAgICBpZiAodGhpcy50eXBlID09PSAnaW1hZ2UnICYmIHRoaXMuc2NhbGVUb1BpeGVsID4gMCkge1xyXG4gICAgICAgIGZpbGUgPSBhd2FpdCB0aGlzLiNyZXNpemUoZmlsZSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbGFzdERvdCA9IGZpbGUubmFtZS5sYXN0SW5kZXhPZignLicpO1xyXG4gICAgICBjb25zdCBleHRlbnNpb24gPSBmaWxlLm5hbWUuc3Vic3RyaW5nKGxhc3REb3QgKyAxKTtcclxuICAgICAgdGhpcy5wcmV2aWV3RmlsZXNbaWR4XSA9IHtcclxuICAgICAgICBmaWxlLFxyXG4gICAgICAgIGlzUHJldmlld0ltYWdlOiBmYWxzZSxcclxuICAgICAgICBwcmV2aWV3U3JjOiBudWxsLFxyXG4gICAgICAgIHNyYzogbnVsbCxcclxuICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxyXG4gICAgICAgIGV4dGVuc2lvblxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgdGhpcy4jcHJldmlldygpO1xyXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMucHJldmlld0ZpbGVzKTtcclxuICAgIHRoaXMuc2RDaGFuZ2UuZW1pdCh0aGlzLnByZXZpZXdGaWxlcyk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZSA9IChwcmV2aWV3RmlsZTogUHJldmlld0ZpbGUpID0+IHtcclxuICAgIHRoaXMubm90aWZ5U2VydmljZS5jb25maXJtRGVsZXRlKCkudGhlbigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMucHJldmlld0ZpbGVzLmluZGV4T2YocHJldmlld0ZpbGUpO1xyXG4gICAgICB0aGlzLnByZXZpZXdGaWxlcy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMucHJldmlld0ZpbGVzKTtcclxuICAgICAgdGhpcy5zZENoYW5nZS5lbWl0KHRoaXMucHJldmlld0ZpbGVzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Ecm9wID0gKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pID0+IHtcclxuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLnByZXZpZXdGaWxlcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLnByZXZpZXdGaWxlcyk7XHJcbiAgICB0aGlzLnNkQ2hhbmdlLmVtaXQodGhpcy5wcmV2aWV3RmlsZXMpO1xyXG4gIH1cclxuXHJcbiAgI3Jlc2l6ZSA9IGFzeW5jIChmaWxlOiBGaWxlKTogUHJvbWlzZTxGaWxlPiA9PiB7XHJcbiAgICBpZiAoIXRoaXMuc2NhbGVUb1BpeGVsKSB7XHJcbiAgICAgIHJldHVybiBmaWxlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGFzdERvdCA9IGZpbGUubmFtZS5sYXN0SW5kZXhPZignLicpO1xyXG4gICAgaWYgKGxhc3REb3QgPT09IC0xKSB7XHJcbiAgICAgIHJldHVybiBmaWxlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgaWYgKGltZy53aWR0aCAqIGltZy5oZWlnaHQgPD0gdGhpcy5zY2FsZVRvUGl4ZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZmlsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBjYW52YXMxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICBjYW52YXMxLnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLiNjYW52YXMxKTtcclxuICAgICAgICAgIGNvbnN0IGN0eDEgPSBjYW52YXMxLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuI3NjYWxlKGltZy53aWR0aCwgaW1nLmhlaWdodCwgdGhpcy5zY2FsZVRvUGl4ZWwpO1xyXG4gICAgICAgICAgY2FudmFzMS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgY2FudmFzMS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgICAgY29uc3QgY2FudmFzMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgY2FudmFzMi5zZXRBdHRyaWJ1dGUoJ2lkJywgdGhpcy4jY2FudmFzMik7XHJcbiAgICAgICAgICBjb25zdCBjdHgyID0gY2FudmFzMi5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgY2FudmFzMi53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgY2FudmFzMi5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgICBjdHgyLmRyYXdJbWFnZShpbWcsIDAsIDAsIGNhbnZhczIud2lkdGgsIGNhbnZhczIuaGVpZ2h0KTtcclxuICAgICAgICAgIGN0eDIuZHJhd0ltYWdlKGNhbnZhczIsIDAsIDAsIGNhbnZhczIud2lkdGggKiAwLjUsIGNhbnZhczIuaGVpZ2h0ICogMC41KTtcclxuICAgICAgICAgIGN0eDEuZHJhd0ltYWdlKGNhbnZhczIsIDAsIDAsIGNhbnZhczIud2lkdGggKiAwLjUsIGNhbnZhczIuaGVpZ2h0ICogMC41LCAwLCAwLCBjYW52YXMxLndpZHRoLCBjYW52YXMxLmhlaWdodCk7XHJcbiAgICAgICAgICBjYW52YXMxLnRvQmxvYihibG9iID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLiNibG9iVG9GaWxlKGJsb2IsIGAke2ZpbGUubmFtZS5zdWJzdHJpbmcoMCwgbGFzdERvdCl9LnBuZ2ApKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICQoYCMke3RoaXMuI2NhbnZhczF9YCkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAkKGAjJHt0aGlzLiNjYW52YXMyfWApLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgaW1nLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gICNzY2FsZSA9ICh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgc2NhbGVUb1BpeGNlbDogbnVtYmVyKSA9PiB7XHJcbiAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQgfHwgIXNjYWxlVG9QaXhjZWwpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB3aWR0aCxcclxuICAgICAgICBoZWlnaHRcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJhdGlvID0gd2lkdGggLyBoZWlnaHQ7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcclxuICAgICAgd2lkdGggLT0gaTtcclxuICAgICAgaGVpZ2h0ID0gTWF0aC50cnVuYyh3aWR0aCAvIHJhdGlvKTtcclxuICAgICAgaWYgKHdpZHRoICogaGVpZ2h0IDw9IHNjYWxlVG9QaXhjZWwpIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIGhlaWdodFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ID0gKGZpbGU6IFByZXZpZXdGaWxlKSA9PiB7XHJcbiAgICBpZiAoIXRoaXMuI2lzTW9iaWxlT3JUYWJsZXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlICE9PSBmaWxlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gZmlsZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICNibG9iVG9GaWxlID0gKGJsb2I6IEJsb2IsIGZpbGVOYW1lOiBzdHJpbmcpOiBGaWxlID0+IHtcclxuICAgIGNvbnN0IHRlbXA6IGFueSA9IGJsb2I7XHJcbiAgICB0ZW1wLmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgdGVtcC5uYW1lID0gZmlsZU5hbWU7XHJcbiAgICByZXR1cm4gYmxvYiBhcyBGaWxlO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3RmlsZSB7XHJcbiAgZmlsZTogRmlsZTtcclxuICBzcmM6IHN0cmluZztcclxuICBwcmV2aWV3U3JjOiBzdHJpbmcgfCBBcnJheUJ1ZmZlcjtcclxuICBpc1ByZXZpZXdJbWFnZTogYm9vbGVhbjtcclxuICBmaWxlTmFtZT86IHN0cmluZztcclxuICBleHRlbnNpb24/OiBzdHJpbmc7XHJcbn1cclxuIl19
433
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS91cGxvYWQtZmlsZS8iLCJzb3VyY2VzIjpbInNyYy9saWIvdXBsb2FkLWZpbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsRUFJakIsWUFBWSxFQUdaLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlELHFGQUFxRjtBQU1yRixNQUFNLE9BQU8sWUFBWTtJQW1FdkIsWUFDRSxhQUFvQyxFQUM1QixHQUFzQixFQUN0QixhQUE4QixFQUM5QixnQkFBb0M7UUFGcEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUF0RTlDLE9BQUUsR0FB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QkFDakQsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsYUFBYSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFPLEdBQWMsRUFBRSxFQUFFO3dCQUM5RCxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3JCLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQzt3QkFDbEMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUM7d0JBQy9DLE1BQU0sK0NBQUEsSUFBSSxFQUFhLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDM0MsQ0FBQyxDQUFBLENBQUMsQ0FBQztpQkFDSjtZQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDTDtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsNENBQW1CLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7Ozs7WUFyS0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLDhrSUFBMkM7O2FBRTVDOzs7WUFkUSxxQkFBcUI7WUFYNUIsaUJBQWlCO1lBY1YsZUFBZTtZQUNmLGtCQUFrQjs7O29CQWtCeEIsS0FBSzttQkFDTCxLQUFLO3VCQUNMLEtBQUs7eUJBQ0wsS0FBSztrQkFDTCxLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsS0FBSzt3QkFDTCxLQUFLOzJCQUNMLEtBQUs7bUJBRUwsS0FBSzsyQkFNTCxLQUFLOzRCQUNMLEtBQUs7b0JBQ0wsS0FBSztvQkFFTCxLQUFLO3FCQThCTCxNQUFNOzBCQUNOLE1BQU07dUJBQ04sTUFBTTsyQkFDTixZQUFZLFNBQUMsYUFBYTtxQkFDMUIsU0FBUyxTQUFDLFFBQVE7eUJBQ2xCLFlBQVksU0FBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgRWxlbWVudFJlZixcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgVmlld0NoaWxkLFxyXG4gIENvbnRlbnRDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgeyBTZE5vdGlmeVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcbmltcG9ydCB7IFNkVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdHJhbnNsYXRlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU2RMYWJlbERlZkRpcmVjdGl2ZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvY29tbW9uJztcclxuXHJcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ0NTkzNzkvcHJldmlldy1hbi1pbWFnZS1iZWZvcmUtaXQtaXMtdXBsb2FkZWRcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC11cGxvYWQtZmlsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC1maWxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtZmlsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZFVwbG9hZEZpbGUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgaWQgPSBgSSR7dXVpZC52NCgpfWA7XHJcbiAgI2lzTW9iaWxlT3JUYWJsZXQgPSBmYWxzZTtcclxuICAjY2FudmFzMSA9IGBDJHt1dWlkLnY0KCl9YDtcclxuICAjY2FudmFzMiA9IGBDJHt1dWlkLnY0KCl9YDtcclxuICBwcmV2aWV3RmlsZXM6IFByZXZpZXdGaWxlW10gPSBbXTtcclxuICBzZWxlY3RlZEZpbGU6IFByZXZpZXdGaWxlO1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdHlwZTogJ2ltYWdlJyB8ICdmaWxlJyA9ICdmaWxlJztcclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGV4dGVuc2lvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgbWF4ID0gMTtcclxuICBASW5wdXQoKSBtYXhTaXplOiBudW1iZXI7XHJcbiAgQElucHV0KCkgbWF4V2lkdGg6IG51bWJlcjtcclxuICBASW5wdXQoKSBtYXhIZWlnaHQ6IG51bWJlcjtcclxuICBASW5wdXQoKSBzY2FsZVRvUGl4ZWw6IG51bWJlcjtcclxuICAjc3Jjczogc3RyaW5nW107XHJcbiAgQElucHV0KCkgc2V0IHNyY3Moc3Jjczogc3RyaW5nW10pIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHNyY3MpKSB7XHJcbiAgICAgIHRoaXMuI3NyY3MgPSBzcmNzO1xyXG4gICAgICB0aGlzLiNzcmNDaGFuZ2VzLm5leHQodGhpcy4jc3Jjcyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHByZXZpZXdXaWR0aDogc3RyaW5nID0gJzEwMHB4JztcclxuICBASW5wdXQoKSBwcmV2aWV3SGVpZ2h0OiBzdHJpbmcgPSAnMTAwcHgnO1xyXG4gIEBJbnB1dCgpIGFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyA9ICdjZW50ZXInO1xyXG4gICNtb2RlbDogUHJldmlld0ZpbGVbXTtcclxuICBASW5wdXQoKSBzZXQgbW9kZWwobW9kZWw6IChzdHJpbmcgfCBQcmV2aWV3RmlsZSlbXSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWwpICYmIHRoaXMuI21vZGVsICE9PSBtb2RlbCkge1xyXG4gICAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLiNtb2RlbCA9IG1vZGVsLm1hcChzcmMgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgKHNyYykgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBsZXQgZXh0ZW5zaW9uID0gbnVsbDtcclxuICAgICAgICAgIGNvbnN0IGJhc2VTcmMgPSBzcmMuc3BsaXQoJz8nKT8uWzBdO1xyXG4gICAgICAgICAgY29uc3QgbGFzdERvdCA9IGJhc2VTcmMubGFzdEluZGV4T2YoJy4nKTtcclxuICAgICAgICAgIGlmIChsYXN0RG90ID4gMCkge1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBiYXNlU3JjLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmbGFnID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZpbGU6IG51bGwsXHJcbiAgICAgICAgICAgIHByZXZpZXdTcmM6IG51bGwsXHJcbiAgICAgICAgICAgIHNyYyxcclxuICAgICAgICAgICAgaXNQcmV2aWV3SW1hZ2U6IHRoaXMudHlwZSA9PT0gJ2ltYWdlJyxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzcmM7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLiNtb2RlbCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy4jbW9kZWxDaGFuZ2VzLm5leHQodGhpcy4jbW9kZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy4jbW9kZWwgPSBbXTtcclxuICAgIH1cclxuICB9XHJcbiAgQE91dHB1dCgpIGxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJldmlld0ZpbGVbXT4oKTtcclxuICBAT3V0cHV0KCkgbW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFByZXZpZXdGaWxlW10+KCk7XHJcbiAgQE91dHB1dCgpIHNkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQcmV2aWV3RmlsZVtdPigpO1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2Ryb3BFbGVtZW50JykgZHJvcEVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcbiAgQFZpZXdDaGlsZCgnY2FudmFzJykgY2FudmFzOiBFbGVtZW50UmVmO1xyXG4gIEBDb250ZW50Q2hpbGQoU2RMYWJlbERlZkRpcmVjdGl2ZSkgc2RMYWJlbERlZjogU2RMYWJlbERlZkRpcmVjdGl2ZTtcclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICNjdXJyZW50RHJvcENvbnRhaW5lcjogYW55O1xyXG4gICNzcmNDaGFuZ2VzID0gbmV3IFN1YmplY3QoKTtcclxuICAjbW9kZWxDaGFuZ2VzID0gbmV3IFN1YmplY3QoKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGRldmljZVNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogU2ROb3RpZnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBTZFRyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICAgIHRoaXMuI2lzTW9iaWxlT3JUYWJsZXQgPSAhZGV2aWNlU2VydmljZS5pc0Rlc2t0b3AoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy4jc3JjQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLiNzcmNzKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuI3NyY3MpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHByZXZpZXdGaWxlcyA9IHRoaXMuI3NyY3MubWFwKHNyYyA9PiB7XHJcbiAgICAgICAgbGV0IGV4dGVuc2lvbiA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgYmFzZVNyYyA9IHNyYy5zcGxpdCgnPycpPy5bMF07XHJcbiAgICAgICAgY29uc3QgbGFzdERvdCA9IGJhc2VTcmMubGFzdEluZGV4T2YoJy4nKTtcclxuICAgICAgICBpZiAobGFzdERvdCA+IDApIHtcclxuICAgICAgICAgIGV4dGVuc2lvbiA9IGJhc2VTcmMuc3Vic3RyaW5nKGxhc3REb3QgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGZpbGU6IG51bGwsXHJcbiAgICAgICAgICBwcmV2aWV3U3JjOiBudWxsLFxyXG4gICAgICAgICAgc3JjLFxyXG4gICAgICAgICAgaXNQcmV2aWV3SW1hZ2U6IHRoaXMudHlwZSA9PT0gJ2ltYWdlJyxcclxuICAgICAgICAgIGV4dGVuc2lvblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucHJldmlld0ZpbGVzID0gcHJldmlld0ZpbGVzO1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQocHJldmlld0ZpbGVzKTtcclxuICAgICAgLy8gdGhpcy5zZENoYW5nZS5lbWl0KHByZXZpZXdGaWxlcyk7XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuI21vZGVsQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuI21vZGVsKSkge1xyXG4gICAgICAgIHRoaXMucHJldmlld0ZpbGVzID0gdGhpcy4jbW9kZWw7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIGlmICghdGhpcy4jaXNNb2JpbGVPclRhYmxldCkge1xyXG4gICAgICBpZiAodGhpcy5kcm9wRWxlbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGRyb3BDb250YWluZXIgPSB0aGlzLmRyb3BFbGVtZW50cy5maXJzdC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuI2N1cnJlbnREcm9wQ29udGFpbmVyID0gZHJvcENvbnRhaW5lcjtcclxuICAgICAgICBkcm9wQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgKGV2dDogRXZlbnQpID0+IHtcclxuICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgZHJvcENvbnRhaW5lci5zdHlsZS5vcGFjaXR5ID0gMC45O1xyXG4gICAgICAgICAgZHJvcENvbnRhaW5lci5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkIGdyZXknO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRyb3BDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgKGV2dDogRXZlbnQpID0+IHtcclxuICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRyb3BDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgKGV2dDogRXZlbnQpID0+IHtcclxuICAgICAgICAgIGRyb3BDb250YWluZXIuc3R5bGUub3BhY2l0eSA9IDAuNjtcclxuICAgICAgICAgIGRyb3BDb250YWluZXIuc3R5bGUuYm9yZGVyID0gJzJweCBkYXNoZWQgZ3JleSc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZHJvcENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgYXN5bmMgKGV2dDogRHJhZ0V2ZW50KSA9PiB7XHJcbiAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgIGRyb3BDb250YWluZXIuc3R5bGUub3BhY2l0eSA9IDAuNjtcclxuICAgICAgICAgIGRyb3BDb250YWluZXIuc3R5bGUuYm9yZGVyID0gJzJweCBkYXNoZWQgZ3JleSc7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLiN1cGxvYWRGaWxlKGV2dC5kYXRhVHJhbnNmZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5kcm9wRWxlbWVudHMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmRyb3BFbGVtZW50cy5sZW5ndGggPiAwICYmIHRoaXMuI2N1cnJlbnREcm9wQ29udGFpbmVyICE9PSB0aGlzLmRyb3BFbGVtZW50cy5maXJzdC5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICBjb25zdCBkcm9wQ29udGFpbmVyID0gdGhpcy5kcm9wRWxlbWVudHMuZmlyc3QubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgIHRoaXMuI2N1cnJlbnREcm9wQ29udGFpbmVyID0gZHJvcENvbnRhaW5lcjtcclxuICAgICAgICAgIGRyb3BDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCAoZXZ0OiBFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZHJvcENvbnRhaW5lci5zdHlsZS5vcGFjaXR5ID0gMC45O1xyXG4gICAgICAgICAgICBkcm9wQ29udGFpbmVyLnN0eWxlLmJvcmRlciA9ICcycHggc29saWQgZ3JleSc7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGRyb3BDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgKGV2dDogRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGRyb3BDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgKGV2dDogRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgZHJvcENvbnRhaW5lci5zdHlsZS5vcGFjaXR5ID0gMC42O1xyXG4gICAgICAgICAgICBkcm9wQ29udGFpbmVyLnN0eWxlLmJvcmRlciA9ICcycHggZGFzaGVkIGdyZXknO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBkcm9wQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBhc3luYyAoZXZ0OiBEcmFnRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGRyb3BDb250YWluZXIuc3R5bGUub3BhY2l0eSA9IDAuNjtcclxuICAgICAgICAgICAgZHJvcENvbnRhaW5lci5zdHlsZS5ib3JkZXIgPSAnMnB4IGRhc2hlZCBncmV5JztcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy4jdXBsb2FkRmlsZShldnQuZGF0YVRyYW5zZmVyKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHJlbG9hZCA9IChwcmV2aWV3RmlsZXM6IFByZXZpZXdGaWxlW10pID0+IHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHByZXZpZXdGaWxlcykpIHtcclxuICAgICAgdGhpcy5wcmV2aWV3RmlsZXMgPSBwcmV2aWV3RmlsZXM7XHJcbiAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdChwcmV2aWV3RmlsZXMpO1xyXG4gICAgICAvLyB0aGlzLnNkQ2hhbmdlLmVtaXQocHJldmlld0ZpbGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICN2YWxpZGF0ZSA9IGFzeW5jIChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcclxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgaWYgKGZpbGUudHlwZS5zcGxpdCgnLycpWzBdICE9PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgcmV0dXJuIGBbJHtmaWxlLm5hbWV9XSAke3RoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ1VwbG9hZGVkIGZpbGUgaXMgbm90IGFuIGltYWdlJyl9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZXh0ZW5zaW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGxhc3REb3QgPSBmaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKTtcclxuICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZS5uYW1lLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7XHJcbiAgICAgIGlmICghdGhpcy5leHRlbnNpb25zLnNvbWUoZSA9PiBlLnRvVXBwZXJDYXNlKCkgPT09IGV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgIHJldHVybiBgWyR7ZmlsZS5uYW1lfV0gJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdVcGxvYWRlZCBmaWxlIGlzIG5vdCBtYXRjaCBleHRlbnNpb24nKX0gJHt0aGlzLmV4dGVuc2lvbnMuam9pbignLCAnKX1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tYXhTaXplKSB7XHJcbiAgICAgIGlmICh0aGlzLm1heFNpemUgKiAxMDI0ICogMTAyNCA8IGZpbGUuc2l6ZSkge1xyXG4gICAgICAgIHJldHVybiBgWyR7ZmlsZS5uYW1lfV0gJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdNYXggZmlsZSBzaXplJyl9ICR7dGhpcy5tYXhTaXplfSBNYnNgO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAnaW1hZ2UnICYmICh0aGlzLm1heFdpZHRoIHx8IHRoaXMubWF4SGVpZ2h0KSkge1xyXG4gICAgICBjb25zdCBtZXNzYWdlOiBzdHJpbmcgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICBjb25zdCBVUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XHJcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLm1heFdpZHRoICYmIGltZy53aWR0aCA+IHRoaXMubWF4V2lkdGgpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShgWyR7ZmlsZS5uYW1lfV0gJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdNYXggaW1hZ2Ugd2lkdGgnKX0gJHt0aGlzLm1heFdpZHRofXB4YCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5tYXhIZWlnaHQgJiYgaW1nLmhlaWdodCA+IHRoaXMubWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoYFske2ZpbGUubmFtZX1dICR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnTWF4IGltYWdlIGhlaWdodCcpfSAke3RoaXMubWF4SGVpZ2h0fXB4YCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaW1nLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAobWVzc2FnZSkge1xyXG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gICNwcmV2aWV3ID0gKCkgPT4ge1xyXG4gICAgbGV0IHN1bSA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IHByZXZpZXdGaWxlIG9mIHRoaXMucHJldmlld0ZpbGVzLmZpbHRlcihlID0+IGUuZmlsZSkpIHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChldnQpID0+IHtcclxuICAgICAgICBwcmV2aWV3RmlsZS5wcmV2aWV3U3JjID0gZXZ0LnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgcHJldmlld0ZpbGUuaXNQcmV2aWV3SW1hZ2UgPSBwcmV2aWV3RmlsZS5maWxlPy50eXBlLnNwbGl0KCcvJylbMF0gPT09ICdpbWFnZSc7XHJcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHN1bSsrO1xyXG4gICAgICAgIGlmIChzdW0gPT09IHRoaXMucHJldmlld0ZpbGVzLmZpbHRlcihlID0+IGUuZmlsZSkubGVuZ3RoKSB0aGlzLmxvYWRlZC5lbWl0KHRoaXMucHJldmlld0ZpbGVzKVxyXG4gICAgICB9XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKHByZXZpZXdGaWxlLmZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25VcGxvYWQgPSAocHJldmlld0ZpbGU/OiBQcmV2aWV3RmlsZSkgPT4ge1xyXG4gICAgaWYgKCQoYCMke3RoaXMuaWR9YCkubGVuZ3RoKSB7XHJcbiAgICAgICQoJ2JvZHknKS5jaGlsZHJlbihgIyR7dGhpcy5pZH1gKS5yZW1vdmUoKTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2aWV3RmlsZSB8fCB0aGlzLm1heCA9PT0gMSkge1xyXG4gICAgICAkKCdib2R5JykuYXBwZW5kKGA8aW5wdXQgaWQ9XCIke3RoaXMuaWR9XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgdHlwZT1cImZpbGVcIiAvPmApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgJCgnYm9keScpLmFwcGVuZChgPGlucHV0IGlkPVwiJHt0aGlzLmlkfVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIHR5cGU9XCJmaWxlXCIgbXVsdGlwbGUgLz5gKTtcclxuICAgIH1cclxuICAgICQoYCMke3RoaXMuaWR9YCkub24oJ2NoYW5nZScsIGFzeW5jIChldnQ6IGFueSkgPT4ge1xyXG4gICAgICBhd2FpdCB0aGlzLiN1cGxvYWRGaWxlKGV2dC50YXJnZXQsIHByZXZpZXdGaWxlKTtcclxuICAgICAgJCgnYm9keScpLmNoaWxkcmVuKGAjJHt0aGlzLmlkfWApLnJlbW92ZSgpO1xyXG4gICAgfSk7XHJcbiAgICAkKGAjJHt0aGlzLmlkfWApLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbiAgfVxyXG5cclxuICAjdXBsb2FkRmlsZSA9IGFzeW5jICh0YXJnZXQ6IERhdGFUcmFuc2ZlciwgcHJldmlld0ZpbGU/OiBQcmV2aWV3RmlsZSkgPT4ge1xyXG4gICAgaWYgKCF0YXJnZXQuZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG9yaWdpbkZpbGVzID0gdGFyZ2V0LmZpbGVzO1xyXG4gICAgY29uc3QgZmlsZXM6IEZpbGVbXSA9IFtdO1xyXG4gICAgaWYgKCFwcmV2aWV3RmlsZSkge1xyXG4gICAgICBpZiAob3JpZ2luRmlsZXMubGVuZ3RoICsgdGhpcy5wcmV2aWV3RmlsZXMubGVuZ3RoID4gdGhpcy5tYXgpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoYCR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnTWF4IG51bWJlciBvZiBmaWxlcycpfSAke3RoaXMubWF4fWApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yaWdpbkZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGZpbGUgPSBvcmlnaW5GaWxlcy5pdGVtKGkpO1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdpbWFnZScgJiYgdGhpcy5zY2FsZVRvUGl4ZWwgPiAwKSB7XHJcbiAgICAgICAgICBmaWxlID0gYXdhaXQgdGhpcy4jcmVzaXplKGZpbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy4jdmFsaWRhdGUoZmlsZSk7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZyhtZXNzYWdlKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuICAgICAgICBjb25zdCBsYXN0RG90ID0gZmlsZS5uYW1lLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZS5uYW1lLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3RmlsZXMucHVzaCh7XHJcbiAgICAgICAgICBmaWxlLFxyXG4gICAgICAgICAgaXNQcmV2aWV3SW1hZ2U6IGZhbHNlLFxyXG4gICAgICAgICAgcHJldmlld1NyYzogbnVsbCxcclxuICAgICAgICAgIHNyYzogbnVsbCxcclxuICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXHJcbiAgICAgICAgICBleHRlbnNpb25cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaWR4ID0gdGhpcy5wcmV2aWV3RmlsZXMuaW5kZXhPZihwcmV2aWV3RmlsZSk7XHJcbiAgICAgIGxldCBmaWxlID0gb3JpZ2luRmlsZXMuaXRlbSgwKTtcclxuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2ltYWdlJyAmJiB0aGlzLnNjYWxlVG9QaXhlbCA+IDApIHtcclxuICAgICAgICBmaWxlID0gYXdhaXQgdGhpcy4jcmVzaXplKGZpbGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGxhc3REb3QgPSBmaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKTtcclxuICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZS5uYW1lLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7XHJcbiAgICAgIHRoaXMucHJldmlld0ZpbGVzW2lkeF0gPSB7XHJcbiAgICAgICAgZmlsZSxcclxuICAgICAgICBpc1ByZXZpZXdJbWFnZTogZmFsc2UsXHJcbiAgICAgICAgcHJldmlld1NyYzogbnVsbCxcclxuICAgICAgICBzcmM6IG51bGwsXHJcbiAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcclxuICAgICAgICBleHRlbnNpb25cclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHRoaXMuI3ByZXZpZXcoKTtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLnByZXZpZXdGaWxlcyk7XHJcbiAgICB0aGlzLnNkQ2hhbmdlLmVtaXQodGhpcy5wcmV2aWV3RmlsZXMpO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgb25SZW1vdmUgPSAocHJldmlld0ZpbGU6IFByZXZpZXdGaWxlKSA9PiB7XHJcbiAgICB0aGlzLm5vdGlmeVNlcnZpY2UuY29uZmlybURlbGV0ZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zdCBpZHggPSB0aGlzLnByZXZpZXdGaWxlcy5pbmRleE9mKHByZXZpZXdGaWxlKTtcclxuICAgICAgdGhpcy5wcmV2aWV3RmlsZXMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLnByZXZpZXdGaWxlcyk7XHJcbiAgICAgIHRoaXMuc2RDaGFuZ2UuZW1pdCh0aGlzLnByZXZpZXdGaWxlcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRHJvcCA9IChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSA9PiB7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5wcmV2aWV3RmlsZXMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5wcmV2aWV3RmlsZXMpO1xyXG4gICAgdGhpcy5zZENoYW5nZS5lbWl0KHRoaXMucHJldmlld0ZpbGVzKTtcclxuICB9XHJcblxyXG4gICNyZXNpemUgPSBhc3luYyAoZmlsZTogRmlsZSk6IFByb21pc2U8RmlsZT4gPT4ge1xyXG4gICAgaWYgKCF0aGlzLnNjYWxlVG9QaXhlbCkge1xyXG4gICAgICByZXR1cm4gZmlsZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxhc3REb3QgPSBmaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKTtcclxuICAgIGlmIChsYXN0RG90ID09PSAtMSkge1xyXG4gICAgICByZXR1cm4gZmlsZTtcclxuICAgIH1cclxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IFVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcclxuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmIChpbWcud2lkdGggKiBpbWcuaGVpZ2h0IDw9IHRoaXMuc2NhbGVUb1BpeGVsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGZpbGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgY2FudmFzMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgY2FudmFzMS5zZXRBdHRyaWJ1dGUoJ2lkJywgdGhpcy4jY2FudmFzMSk7XHJcbiAgICAgICAgICBjb25zdCBjdHgxID0gY2FudmFzMS5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLiNzY2FsZShpbWcud2lkdGgsIGltZy5oZWlnaHQsIHRoaXMuc2NhbGVUb1BpeGVsKTtcclxuICAgICAgICAgIGNhbnZhczEud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgIGNhbnZhczEuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNhbnZhczIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgIGNhbnZhczIuc2V0QXR0cmlidXRlKCdpZCcsIHRoaXMuI2NhbnZhczIpO1xyXG4gICAgICAgICAgY29uc3QgY3R4MiA9IGNhbnZhczIuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAgIGNhbnZhczIud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgIGNhbnZhczIuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgY3R4Mi5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBjYW52YXMyLndpZHRoLCBjYW52YXMyLmhlaWdodCk7XHJcbiAgICAgICAgICBjdHgyLmRyYXdJbWFnZShjYW52YXMyLCAwLCAwLCBjYW52YXMyLndpZHRoICogMC41LCBjYW52YXMyLmhlaWdodCAqIDAuNSk7XHJcbiAgICAgICAgICBjdHgxLmRyYXdJbWFnZShjYW52YXMyLCAwLCAwLCBjYW52YXMyLndpZHRoICogMC41LCBjYW52YXMyLmhlaWdodCAqIDAuNSwgMCwgMCwgY2FudmFzMS53aWR0aCwgY2FudmFzMS5oZWlnaHQpO1xyXG4gICAgICAgICAgY2FudmFzMS50b0Jsb2IoYmxvYiA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy4jYmxvYlRvRmlsZShibG9iLCBgJHtmaWxlLm5hbWUuc3Vic3RyaW5nKDAsIGxhc3REb3QpfS5wbmdgKSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAkKGAjJHt0aGlzLiNjYW52YXMxfWApLnJlbW92ZSgpO1xyXG4gICAgICAgICAgJChgIyR7dGhpcy4jY2FudmFzMn1gKS5yZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIGltZy5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAjc2NhbGUgPSAod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHNjYWxlVG9QaXhjZWw6IG51bWJlcikgPT4ge1xyXG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0IHx8ICFzY2FsZVRvUGl4Y2VsKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCByYXRpbyA9IHdpZHRoIC8gaGVpZ2h0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XHJcbiAgICAgIHdpZHRoIC09IGk7XHJcbiAgICAgIGhlaWdodCA9IE1hdGgudHJ1bmMod2lkdGggLyByYXRpbyk7XHJcbiAgICAgIGlmICh3aWR0aCAqIGhlaWdodCA8PSBzY2FsZVRvUGl4Y2VsKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHRcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdCA9IChmaWxlOiBQcmV2aWV3RmlsZSkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLiNpc01vYmlsZU9yVGFibGV0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZSAhPT0gZmlsZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IGZpbGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAjYmxvYlRvRmlsZSA9IChibG9iOiBCbG9iLCBmaWxlTmFtZTogc3RyaW5nKTogRmlsZSA9PiB7XHJcbiAgICBjb25zdCB0ZW1wOiBhbnkgPSBibG9iO1xyXG4gICAgdGVtcC5sYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgIHRlbXAubmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgcmV0dXJuIGJsb2IgYXMgRmlsZTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld0ZpbGUge1xyXG4gIGZpbGU6IEZpbGU7XHJcbiAgc3JjOiBzdHJpbmc7XHJcbiAgcHJldmlld1NyYzogc3RyaW5nIHwgQXJyYXlCdWZmZXI7XHJcbiAgaXNQcmV2aWV3SW1hZ2U6IGJvb2xlYW47XHJcbiAgZmlsZU5hbWU/OiBzdHJpbmc7XHJcbiAgZXh0ZW5zaW9uPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
@@ -35,6 +35,7 @@ class SdUploadFile {
35
35
  this.previewHeight = '100px';
36
36
  this.align = 'center';
37
37
  _model.set(this, void 0);
38
+ this.loaded = new EventEmitter();
38
39
  this.modelChange = new EventEmitter();
39
40
  this.sdChange = new EventEmitter();
40
41
  _subscription.set(this, new Subscription());
@@ -89,6 +90,7 @@ class SdUploadFile {
89
90
  return null;
90
91
  }));
91
92
  _preview.set(this, () => {
93
+ let sum = 0;
92
94
  for (const previewFile of this.previewFiles.filter(e => e.file)) {
93
95
  const reader = new FileReader();
94
96
  reader.onload = (evt) => {
@@ -96,6 +98,9 @@ class SdUploadFile {
96
98
  previewFile.previewSrc = evt.target.result;
97
99
  previewFile.isPreviewImage = ((_a = previewFile.file) === null || _a === void 0 ? void 0 : _a.type.split('/')[0]) === 'image';
98
100
  this.ref.detectChanges();
101
+ sum++;
102
+ if (sum === this.previewFiles.filter(e => e.file).length)
103
+ this.loaded.emit(this.previewFiles);
99
104
  };
100
105
  reader.readAsDataURL(previewFile.file);
101
106
  }
@@ -140,7 +145,6 @@ class SdUploadFile {
140
145
  files.push(file);
141
146
  }
142
147
  for (const file of files) {
143
- '';
144
148
  const lastDot = file.name.lastIndexOf('.');
145
149
  const extension = file.name.substring(lastDot + 1);
146
150
  this.previewFiles.push({
@@ -424,6 +428,7 @@ SdUploadFile.propDecorators = {
424
428
  previewHeight: [{ type: Input }],
425
429
  align: [{ type: Input }],
426
430
  model: [{ type: Input }],
431
+ loaded: [{ type: Output }],
427
432
  modelChange: [{ type: Output }],
428
433
  sdChange: [{ type: Output }],
429
434
  dropElements: [{ type: ViewChildren, args: ['dropElement',] }],