writer 0.8.3rc21__py3-none-any.whl → 1.25.1rc1__py3-none-any.whl
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.
- writer/ai/__init__.py +277 -28
- writer/app_runner.py +236 -32
- writer/app_templates/default/.wf/components-blueprints_blueprint-0-0decp3w5erhvl0nw.jsonl +11 -0
- writer/app_templates/default/.wf/components-page-0-c0f99a9e-5004-4e75-a6c6-36f17490b134.jsonl +22 -10
- writer/app_templates/default/.wf/components-root.jsonl +1 -1
- writer/app_templates/default/.wf/components-workflows_root.jsonl +1 -0
- writer/app_templates/default/.wf/components-workflows_workflow-0-lfltcky7l1fsm6j2.jsonl +1 -0
- writer/app_templates/default/.wf/metadata.json +1 -1
- writer/app_templates/default/README.md +3 -0
- writer/app_templates/default/main.py +8 -5
- writer/app_templates/default/requirements.txt +1 -0
- writer/app_templates/default/static/agent_builder_demo.png +0 -0
- writer/app_templates/hello/main.py +3 -0
- writer/auth.py +7 -2
- writer/autogen.py +26 -9
- writer/blocks/__init__.py +21 -1
- writer/blocks/addtostatelist.py +5 -4
- writer/blocks/apitrigger.py +45 -0
- writer/blocks/base_block.py +134 -14
- writer/blocks/changepage.py +1 -1
- writer/blocks/code.py +27 -11
- writer/blocks/crontrigger.py +49 -0
- writer/blocks/foreach.py +3 -3
- writer/blocks/httprequest.py +8 -24
- writer/blocks/ifelse.py +71 -0
- writer/blocks/logmessage.py +2 -2
- writer/blocks/returnvalue.py +2 -2
- writer/blocks/runblueprint.py +2 -2
- writer/blocks/setstate.py +5 -5
- writer/blocks/sharedblueprint.py +86 -0
- writer/blocks/writeraddchatmessage.py +45 -7
- writer/blocks/writeraddtokg.py +31 -4
- writer/blocks/writeraskkg.py +27 -34
- writer/blocks/writerchat.py +14 -9
- writer/blocks/writerchatreply.py +279 -0
- writer/blocks/writerchatreplywithtoolconfig.py +393 -0
- writer/blocks/writerclassification.py +42 -5
- writer/blocks/writercompletion.py +4 -4
- writer/blocks/writerfileapi.py +4 -4
- writer/blocks/writerinitchat.py +5 -4
- writer/blocks/writerkeyvaluestorage.py +106 -0
- writer/blocks/writernocodeapp.py +4 -4
- writer/blocks/writerparsepdf.py +8 -6
- writer/blocks/writerstructuredoutput.py +105 -0
- writer/blocks/writertoolcalling.py +106 -51
- writer/blocks/writervision.py +141 -0
- writer/blocks/writerwebsearch.py +175 -0
- writer/blueprints.py +715 -251
- writer/command_line.py +52 -16
- writer/core.py +200 -35
- writer/core_ui.py +4 -0
- writer/evaluator.py +38 -24
- writer/journal.py +227 -0
- writer/keyvalue_storage.py +93 -0
- writer/logs.py +277 -0
- writer/serve.py +402 -198
- writer/ss_types.py +41 -0
- writer/static/assets/BaseMarkdown-Wrvby5J8.js +1 -0
- writer/static/assets/BlueprintToolbar-BuXNRxWT.js +1 -0
- writer/static/assets/BlueprintToolbar-wpfX0jo_.css +1 -0
- writer/static/assets/BuilderApp-PTOI76jZ.js +8 -0
- writer/static/assets/BuilderApp-WimUfNZr.css +1 -0
- writer/static/assets/BuilderApplicationSelect-DXzy4e_h.js +7 -0
- writer/static/assets/BuilderApplicationSelect-XaM1D5fv.css +1 -0
- writer/static/assets/BuilderBlueprintLibraryPanel-Ckrhknlh.css +1 -0
- writer/static/assets/BuilderBlueprintLibraryPanel-DBDzhTlc.js +1 -0
- writer/static/assets/{BuilderEmbeddedCodeEditor-DiDqfWdt.css → BuilderEmbeddedCodeEditor-B0bcjlhk.css} +1 -1
- writer/static/assets/{BuilderEmbeddedCodeEditor-CbK-r9w6.js → BuilderEmbeddedCodeEditor-Dn7eDICN.js} +7 -7
- writer/static/assets/BuilderGraphSelect-C-LRsO8W.js +7 -0
- writer/static/assets/BuilderGraphSelect-D7B61d5s.css +1 -0
- writer/static/assets/{BuilderInsertionLabel-CDlWX-mE.js → BuilderInsertionLabel-BhyL9wgn.js} +1 -1
- writer/static/assets/{BuilderInsertionOverlay-B7-TsHNC.js → BuilderInsertionOverlay-MkAIVruY.js} +1 -1
- writer/static/assets/BuilderJournal-A0LcEwGI.js +7 -0
- writer/static/assets/BuilderJournal-DHv3Pvvm.css +1 -0
- writer/static/assets/BuilderModelSelect-CdSo_sih.js +7 -0
- writer/static/assets/BuilderModelSelect-Dc4IPLp2.css +1 -0
- writer/static/assets/BuilderSettings-BDwZBveu.js +16 -0
- writer/static/assets/BuilderSettings-lZkOXEYw.css +1 -0
- writer/static/assets/BuilderSettingsArtifactAPITriggerDetails-3O6jKBXD.js +4 -0
- writer/static/assets/BuilderSettingsArtifactAPITriggerDetails-DnX66iRg.css +1 -0
- writer/static/assets/BuilderSettingsDeploySharedBlueprint-BR_3ptsd.js +1 -0
- writer/static/assets/BuilderSettingsDeploySharedBlueprint-KJTl8gxP.css +1 -0
- writer/static/assets/BuilderSettingsHandlers-CBtEQFSo.js +1 -0
- writer/static/assets/BuilderSettingsHandlers-DJPeASfz.css +1 -0
- writer/static/assets/BuilderSidebarComponentTree-DLltgas5.js +1 -0
- writer/static/assets/BuilderSidebarComponentTree-DYu1F793.css +1 -0
- writer/static/assets/BuilderSidebarToolkit-CApZNTAq.js +7 -0
- writer/static/assets/BuilderSidebarToolkit-CwqbjRv8.css +1 -0
- writer/static/assets/BuilderTemplateEditor-CYSDeWgV.css +1 -0
- writer/static/assets/BuilderTemplateEditor-DnRDRcA0.js +87 -0
- writer/static/assets/BuilderVault-2vGoV0sx.js +1 -0
- writer/static/assets/BuilderVault-Cx6oQSES.css +1 -0
- writer/static/assets/ComponentRenderer-72hqvEvI.css +1 -0
- writer/static/assets/ComponentRenderer-D4Pj1i3s.js +1 -0
- writer/static/assets/SharedCopyClipboardButton-BipJKGtz.css +1 -0
- writer/static/assets/SharedCopyClipboardButton-DNI9kLe6.js +1 -0
- writer/static/assets/WdsCheckbox-DKvpPA4D.css +1 -0
- writer/static/assets/WdsCheckbox-edQcn1cf.js +1 -0
- writer/static/assets/WdsDropdownMenu-CzzPN9Wg.css +1 -0
- writer/static/assets/WdsDropdownMenu-DQnrRBNV.js +1 -0
- writer/static/assets/WdsFieldWrapper-Cmufx5Nj.js +1 -0
- writer/static/assets/WdsFieldWrapper-CsemOh8D.css +1 -0
- writer/static/assets/WdsTabs-DKj7BqI0.css +1 -0
- writer/static/assets/WdsTabs-DcfY_zn5.js +1 -0
- writer/static/assets/{art-paper-WsD9P5Lu.svg → art-paper-D70v1WMA.svg} +0 -1
- writer/static/assets/{cssMode-6B7VrieQ.js → cssMode-BYq4oZGq.js} +1 -1
- writer/static/assets/{freemarker2-Dy54TNCQ.js → freemarker2-CnNourkO.js} +1 -1
- writer/static/assets/{handlebars-BnWqX2x5.js → handlebars-Bm22yapJ.js} +1 -1
- writer/static/assets/{html-CIuj_eOg.js → html-CAKAfoZF.js} +1 -1
- writer/static/assets/{htmlMode-5fUQN2xJ.js → htmlMode-BGZ97n-V.js} +1 -1
- writer/static/assets/index-BKNuk68o.css +1 -0
- writer/static/assets/index-BQNXU3IR.js +17 -0
- writer/static/assets/index-DHXAd5Yn.js +4 -0
- writer/static/assets/index-Zki-pfO-.js +8525 -0
- writer/static/assets/index.esm-B1ZQtduY.js +17 -0
- writer/static/assets/{javascript-PLzaI1wY.js → javascript-X1f02eyK.js} +1 -1
- writer/static/assets/{jsonMode-CzZfZ4-D.js → jsonMode-hT0bNgT8.js} +1 -1
- writer/static/assets/{liquid-Cy21vWLb.js → liquid-KmCCiJw2.js} +1 -1
- writer/static/assets/{mapbox-gl-BjXsUCYi.js → mapbox-gl-C0cyFYYW.js} +1 -1
- writer/static/assets/{mdx-Cgik3q5p.js → mdx-DtRFauUw.js} +1 -1
- writer/static/assets/pdf-B6-yWJ-Y.js +12 -0
- writer/static/assets/pdf.worker.min-CyUfim15.mjs +21 -0
- writer/static/assets/{plotly.min-Dk-1ahEu.js → plotly.min-DutuuatZ.js} +1 -1
- writer/static/assets/{python-h6gjz_bN.js → python-DVhxg746.js} +1 -1
- writer/static/assets/{razor-BQ1k9241.js → razor-DR5Ns_BC.js} +1 -1
- writer/static/assets/{tsMode-BaBWt05D.js → tsMode-BNUEZzir.js} +1 -1
- writer/static/assets/{typescript-B42-gYGT.js → typescript-CRVt7Hx0.js} +1 -1
- writer/static/assets/useBlueprintRun-C00bCxh-.js +1 -0
- writer/static/assets/useKeyValueEditor-nDmI7cTJ.js +1 -0
- writer/static/assets/useListResources-DLkZhRSJ.js +1 -0
- writer/static/assets/{xml-BOez4Prd.js → xml-C_6-t1tb.js} +1 -1
- writer/static/assets/{yaml-BQhoEOIz.js → yaml-DIw8G7jk.js} +1 -1
- writer/static/components/annotatedtext.svg +3 -3
- writer/static/components/avatar.svg +3 -3
- writer/static/components/blueprints_addtostatelist.svg +3 -3
- writer/static/components/blueprints_apitrigger.svg +4 -0
- writer/static/components/blueprints_category_Logic.svg +3 -3
- writer/static/components/blueprints_category_Other.svg +3 -3
- writer/static/components/blueprints_category_Writer.svg +24 -5
- writer/static/components/blueprints_code.svg +6 -6
- writer/static/components/blueprints_crontrigger.svg +6 -0
- writer/static/components/blueprints_foreach.svg +3 -3
- writer/static/components/blueprints_httprequest.svg +6 -6
- writer/static/components/blueprints_logmessage.svg +10 -3
- writer/static/components/blueprints_parsejson.svg +3 -3
- writer/static/components/blueprints_returnvalue.svg +3 -3
- writer/static/components/blueprints_runblueprint.svg +3 -3
- writer/static/components/blueprints_setstate.svg +3 -3
- writer/static/components/blueprints_writeraddchatmessage.svg +14 -6
- writer/static/components/blueprints_writeraddtokg.svg +14 -6
- writer/static/components/blueprints_writerchatreply.svg +19 -0
- writer/static/components/blueprints_writerclassification.svg +23 -8
- writer/static/components/blueprints_writercompletion.svg +13 -5
- writer/static/components/blueprints_writernocodeapp.svg +13 -3
- writer/static/components/button.svg +3 -3
- writer/static/components/category_Content.svg +3 -3
- writer/static/components/category_Embed.svg +3 -3
- writer/static/components/category_Input.svg +4 -4
- writer/static/components/category_Layout.svg +6 -6
- writer/static/components/category_Other.svg +3 -3
- writer/static/components/chatbot.svg +3 -3
- writer/static/components/checkboxinput.svg +3 -3
- writer/static/components/colorinput.svg +6 -6
- writer/static/components/column.svg +3 -3
- writer/static/components/columns.svg +3 -3
- writer/static/components/dataframe.svg +3 -3
- writer/static/components/dateinput.svg +3 -3
- writer/static/components/dropdowninput.svg +4 -4
- writer/static/components/fileinput.svg +3 -3
- writer/static/components/googlemaps.svg +3 -3
- writer/static/components/heading.svg +6 -6
- writer/static/components/horizontalstack.svg +3 -3
- writer/static/components/html.svg +6 -6
- writer/static/components/icon.svg +3 -3
- writer/static/components/iframe.svg +3 -3
- writer/static/components/image.svg +10 -3
- writer/static/components/jsonviewer.svg +3 -3
- writer/static/components/link.svg +7 -7
- writer/static/components/mapbox.svg +3 -3
- writer/static/components/message.svg +3 -3
- writer/static/components/metric.svg +3 -3
- writer/static/components/multiselectinput.svg +3 -3
- writer/static/components/numberinput.svg +3 -3
- writer/static/components/pagination.svg +3 -3
- writer/static/components/pdf.svg +3 -3
- writer/static/components/plotlygraph.svg +6 -6
- writer/static/components/progressbar.svg +4 -4
- writer/static/components/radioinput.svg +3 -3
- writer/static/components/rangeinput.svg +3 -3
- writer/static/components/ratinginput.svg +3 -3
- writer/static/components/repeater.svg +3 -3
- writer/static/components/reuse.svg +3 -3
- writer/static/components/section.svg +3 -3
- writer/static/components/selectinput.svg +4 -4
- writer/static/components/separator.svg +3 -3
- writer/static/components/sidebar.svg +3 -3
- writer/static/components/sliderinput.svg +3 -3
- writer/static/components/step.svg +3 -3
- writer/static/components/steps.svg +3 -3
- writer/static/components/switchinput.svg +3 -3
- writer/static/components/tab.svg +3 -3
- writer/static/components/tabs.svg +3 -3
- writer/static/components/tags.svg +10 -3
- writer/static/components/text.svg +3 -3
- writer/static/components/textareainput.svg +10 -3
- writer/static/components/textinput.svg +3 -3
- writer/static/components/timeinput.svg +3 -3
- writer/static/components/timer.svg +3 -3
- writer/static/components/videoplayer.svg +10 -3
- writer/static/components/webcamcapture.svg +3 -3
- writer/static/index.html +3 -11
- writer/static/status/cancelled.svg +5 -0
- writer/static/status/skipped.svg +4 -0
- writer/static/status/stopped.svg +4 -0
- writer/sync.py +431 -0
- writer/ui.py +49 -41
- writer/vault.py +48 -0
- writer/wf_project.py +5 -5
- writer-1.25.1rc1.dist-info/METADATA +92 -0
- writer-1.25.1rc1.dist-info/RECORD +382 -0
- {writer-0.8.3rc21.dist-info → writer-1.25.1rc1.dist-info}/WHEEL +1 -1
- writer/app_templates/default/.wf/components-blueprints_blueprint-0-t84xyhxau9ej3823.jsonl +0 -18
- writer/app_templates/default/static/welcome.svg +0 -40
- writer/static/assets/BaseMarkdown-BH_nSq9H.js +0 -1
- writer/static/assets/BlueprintToolbar-BO-WERxH.css +0 -1
- writer/static/assets/BlueprintToolbar-CHWL-rTm.js +0 -1
- writer/static/assets/BuilderApp-0XXiQ2l7.js +0 -7
- writer/static/assets/BuilderApp-CAhvLO4a.css +0 -1
- writer/static/assets/BuilderApplicationSelect-CwzU4F1-.js +0 -7
- writer/static/assets/BuilderApplicationSelect-DYYFtqjx.css +0 -1
- writer/static/assets/BuilderGraphSelect-CVO4gzts.css +0 -1
- writer/static/assets/BuilderGraphSelect-DV5Xy0HK.js +0 -7
- writer/static/assets/BuilderInstanceTracker-BECcXNnW.css +0 -1
- writer/static/assets/BuilderInstanceTracker-Dr0XhpSH.js +0 -1
- writer/static/assets/BuilderModelSelect-QHUGd86u.css +0 -1
- writer/static/assets/BuilderModelSelect-ow0XEf2t.js +0 -7
- writer/static/assets/BuilderSettings-C2WRfSor.css +0 -1
- writer/static/assets/BuilderSettings-D5bjbcWj.js +0 -24
- writer/static/assets/BuilderSettingsHandlers-1QLaHR8J.css +0 -1
- writer/static/assets/BuilderSettingsHandlers-j1aMAV4J.js +0 -1
- writer/static/assets/BuilderSidebarComponentTree-0YajaJke.css +0 -1
- writer/static/assets/BuilderSidebarComponentTree-CtaOZfpV.js +0 -1
- writer/static/assets/BuilderSidebarPanel-BMJVzhd3.js +0 -1
- writer/static/assets/BuilderSidebarPanel-BrLsNxVM.css +0 -1
- writer/static/assets/BuilderSidebarToolkit-BbjOOp8E.js +0 -1
- writer/static/assets/BuilderSidebarToolkit-BvZDShKD.css +0 -1
- writer/static/assets/ComponentRenderer-B76bKRZO.css +0 -1
- writer/static/assets/ComponentRenderer-CZs4z773.js +0 -1
- writer/static/assets/SharedMoreDropdown-BWKlox8E.css +0 -1
- writer/static/assets/SharedMoreDropdown-DKv_HNef.js +0 -7
- writer/static/assets/WdsDropdownMenu-C1UyKOJR.css +0 -1
- writer/static/assets/WdsDropdownMenu-CGiATY2E.js +0 -1
- writer/static/assets/WdsLoaderDots-qdyk2N-2.js +0 -1
- writer/static/assets/index-BJMAe9SN.js +0 -8
- writer/static/assets/index-CPCeQU9V.css +0 -1
- writer/static/assets/index-ChWW_c_j.js +0 -439
- writer/static/assets/instancePath-BsbOTTI8.js +0 -1
- writer/static/assets/material-symbols-outlined-latin-wght-normal-DuE-q1Ez.woff2 +0 -0
- writer/static/assets/useBlueprintRun-CBOvzWTA.js +0 -1
- writer/static/assets/useComponentDescription-FHKxu8gg.js +0 -1
- writer/static/assets/useListResources-BpMgq7XI.js +0 -1
- writer-0.8.3rc21.dist-info/METADATA +0 -117
- writer-0.8.3rc21.dist-info/RECORD +0 -342
- {writer-0.8.3rc21.dist-info → writer-1.25.1rc1.dist-info}/entry_points.txt +0 -0
- {writer-0.8.3rc21.dist-info → writer-1.25.1rc1.dist-info/licenses}/LICENSE.txt +0 -0
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
var vd=Object.defineProperty;var Bd=(H,m,O)=>m in H?vd(H,m,{enumerable:!0,configurable:!0,writable:!0,value:O}):H[m]=O;var AZ=(H,m,O)=>(Bd(H,typeof m!="symbol"?m+"":m,O),O),xc=(H,m,O)=>{if(!m.has(H))throw TypeError("Cannot "+O)};var l=(H,m,O)=>(xc(H,m,"read from private field"),O?O.call(H):m.get(H)),g=(H,m,O)=>{if(m.has(H))throw TypeError("Cannot add the same private member more than once");m instanceof WeakSet?m.add(H):m.set(H,O)},Al=(H,m,O,s)=>(xc(H,m,"write to private field"),s?s.call(H,O):m.set(H,O),O);var Wc=(H,m,O,s)=>({set _(Y){Al(H,m,Y,O)},get _(){return l(H,m,s)}}),Zl=(H,m,O)=>(xc(H,m,"access private method"),O);import{aq as getAugmentedNamespace,d as defineComponent,r as ref,c as computed,w as watch,n as onMounted,o as openBlock,e as createElementBlock,b as createBlock,ar as mergeProps,X as createCommentVNode,s as createVNode,q as withDirectives,v as vShow,f as createBaseVNode,G as renderSlot,P as shallowRef,ah as isRef,Z as toRaw}from"./index-ChWW_c_j.js";function commonjsRequire(H){throw new Error('Could not dynamically require "'+H+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var pdf={exports:{}};const __viteBrowserExternal={},__viteBrowserExternal$1=Object.freeze(Object.defineProperty({__proto__:null,default:__viteBrowserExternal},Symbol.toStringTag,{value:"Module"})),require$$5=getAugmentedNamespace(__viteBrowserExternal$1);(function(module,exports){(function(m,O){module.exports=m.pdfjsLib=O()})(globalThis,()=>(()=>{var __webpack_modules__=[,(H,m)=>{var rZ;Object.defineProperty(m,"__esModule",{value:!0}),m.VerbosityLevel=m.Util=m.UnknownErrorException=m.UnexpectedResponseException=m.TextRenderingMode=m.RenderingIntentFlag=m.PromiseCapability=m.PermissionFlag=m.PasswordResponses=m.PasswordException=m.PageActionEventType=m.OPS=m.MissingPDFException=m.MAX_IMAGE_SIZE_TO_CACHE=m.LINE_FACTOR=m.LINE_DESCENT_FACTOR=m.InvalidPDFException=m.ImageKind=m.IDENTITY_MATRIX=m.FormatError=m.FeatureTest=m.FONT_IDENTITY_MATRIX=m.DocumentActionEventType=m.CMapCompressionType=m.BaseException=m.BASELINE_FACTOR=m.AnnotationType=m.AnnotationReplyType=m.AnnotationPrefix=m.AnnotationMode=m.AnnotationFlag=m.AnnotationFieldFlag=m.AnnotationEditorType=m.AnnotationEditorPrefix=m.AnnotationEditorParamsType=m.AnnotationBorderStyleType=m.AnnotationActionEventType=m.AbortException=void 0,m.assert=tZ,m.bytesToString=E,m.createValidAbsoluteUrl=nZ,m.getModificationDate=TZ,m.getUuid=gZ,m.getVerbosityLevel=Wl,m.info=ql,m.isArrayBuffer=sZ,m.isArrayEqual=XZ,m.isNodeJS=void 0,m.normalizeUnicode=CZ,m.objectFromMap=bZ,m.objectSize=lZ,m.setVerbosityLevel=I,m.shadow=VZ,m.string32=el,m.stringToBytes=_l,m.stringToPDFString=mZ,m.stringToUTF8String=Xl,m.unreachable=v,m.utf8StringToString=Vl,m.warn=cZ;const O=typeof process=="object"&&process+""=="[object process]"&&!process.versions.nw&&!(process.versions.electron&&process.type&&process.type!=="browser");m.isNodeJS=O;const s=[1,0,0,1,0,0];m.IDENTITY_MATRIX=s;const Y=[.001,0,0,.001,0,0];m.FONT_IDENTITY_MATRIX=Y;const B=1e7;m.MAX_IMAGE_SIZE_TO_CACHE=B;const r=1.35;m.LINE_FACTOR=r;const ZZ=.35;m.LINE_DESCENT_FACTOR=ZZ;const C=ZZ/r;m.BASELINE_FACTOR=C;const D={ANY:1,DISPLAY:2,PRINT:4,SAVE:8,ANNOTATIONS_FORMS:16,ANNOTATIONS_STORAGE:32,ANNOTATIONS_DISABLE:64,OPLIST:256};m.RenderingIntentFlag=D;const N={DISABLE:0,ENABLE:1,ENABLE_FORMS:2,ENABLE_STORAGE:3};m.AnnotationMode=N;const j="pdfjs_internal_editor_";m.AnnotationEditorPrefix=j;const k={DISABLE:-1,NONE:0,FREETEXT:3,STAMP:13,INK:15};m.AnnotationEditorType=k;const w={RESIZE:1,CREATE:2,FREETEXT_SIZE:11,FREETEXT_COLOR:12,FREETEXT_OPACITY:13,INK_COLOR:21,INK_THICKNESS:22,INK_OPACITY:23};m.AnnotationEditorParamsType=w;const L={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048};m.PermissionFlag=L;const n={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4};m.TextRenderingMode=n;const u={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3};m.ImageKind=u;const y={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9,UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19,WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26};m.AnnotationType=y;const o={GROUP:"Group",REPLY:"R"};m.AnnotationReplyType=o;const p={INVISIBLE:1,HIDDEN:2,PRINT:4,NOZOOM:8,NOROTATE:16,NOVIEW:32,READONLY:64,LOCKED:128,TOGGLENOVIEW:256,LOCKEDCONTENTS:512};m.AnnotationFlag=p;const e={READONLY:1,REQUIRED:2,NOEXPORT:4,MULTILINE:4096,PASSWORD:8192,NOTOGGLETOOFF:16384,RADIO:32768,PUSHBUTTON:65536,COMBO:131072,EDIT:262144,SORT:524288,FILESELECT:1048576,MULTISELECT:2097152,DONOTSPELLCHECK:4194304,DONOTSCROLL:8388608,COMB:16777216,RICHTEXT:33554432,RADIOSINUNISON:33554432,COMMITONSELCHANGE:67108864};m.AnnotationFieldFlag=e;const G={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5};m.AnnotationBorderStyleType=G;const W={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"Focus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"};m.AnnotationActionEventType=W;const z={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"};m.DocumentActionEventType=z;const M={O:"PageOpen",C:"PageClose"};m.PageActionEventType=M;const i={ERRORS:0,WARNINGS:1,INFOS:5};m.VerbosityLevel=i;const x={NONE:0,BINARY:1};m.CMapCompressionType=x;const T={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotation:80,endAnnotation:81,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91};m.OPS=T;const Q={NEED_PASSWORD:1,INCORRECT_PASSWORD:2};m.PasswordResponses=Q;let f=i.WARNINGS;function I(dZ){Number.isInteger(dZ)&&(f=dZ)}function Wl(){return f}function ql(dZ){f>=i.INFOS&&console.log(`Info: ${dZ}`)}function cZ(dZ){f>=i.WARNINGS&&console.log(`Warning: ${dZ}`)}function v(dZ){throw new Error(dZ)}function tZ(dZ,Yl){dZ||v(Yl)}function WZ(dZ){switch(dZ==null?void 0:dZ.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}function nZ(dZ,Yl=null,cl=null){if(!dZ)return null;try{if(cl&&typeof dZ=="string"){if(cl.addDefaultProtocol&&dZ.startsWith("www.")){const MZ=dZ.match(/\./g);(MZ==null?void 0:MZ.length)>=2&&(dZ=`http://${dZ}`)}if(cl.tryConvertEncoding)try{dZ=Xl(dZ)}catch{}}const aZ=Yl?new URL(dZ,Yl):new URL(dZ);if(WZ(aZ))return aZ}catch{}return null}function VZ(dZ,Yl,cl,aZ=!1){return Object.defineProperty(dZ,Yl,{value:cl,enumerable:!aZ,configurable:!0,writable:!1}),cl}const R=function(){function Yl(cl,aZ){this.constructor===Yl&&v("Cannot initialize BaseException."),this.message=cl,this.name=aZ}return Yl.prototype=new Error,Yl.constructor=Yl,Yl}();m.BaseException=R;class c extends R{constructor(Yl,cl){super(Yl,"PasswordException"),this.code=cl}}m.PasswordException=c;class b extends R{constructor(Yl,cl){super(Yl,"UnknownErrorException"),this.details=cl}}m.UnknownErrorException=b;class d extends R{constructor(Yl){super(Yl,"InvalidPDFException")}}m.InvalidPDFException=d;class a extends R{constructor(Yl){super(Yl,"MissingPDFException")}}m.MissingPDFException=a;class h extends R{constructor(Yl,cl){super(Yl,"UnexpectedResponseException"),this.status=cl}}m.UnexpectedResponseException=h;class V extends R{constructor(Yl){super(Yl,"FormatError")}}m.FormatError=V;class J extends R{constructor(Yl){super(Yl,"AbortException")}}m.AbortException=J;function E(dZ){(typeof dZ!="object"||(dZ==null?void 0:dZ.length)===void 0)&&v("Invalid argument for bytesToString");const Yl=dZ.length,cl=8192;if(Yl<cl)return String.fromCharCode.apply(null,dZ);const aZ=[];for(let MZ=0;MZ<Yl;MZ+=cl){const BZ=Math.min(MZ+cl,Yl),vZ=dZ.subarray(MZ,BZ);aZ.push(String.fromCharCode.apply(null,vZ))}return aZ.join("")}function _l(dZ){typeof dZ!="string"&&v("Invalid argument for stringToBytes");const Yl=dZ.length,cl=new Uint8Array(Yl);for(let aZ=0;aZ<Yl;++aZ)cl[aZ]=dZ.charCodeAt(aZ)&255;return cl}function el(dZ){return String.fromCharCode(dZ>>24&255,dZ>>16&255,dZ>>8&255,dZ&255)}function lZ(dZ){return Object.keys(dZ).length}function bZ(dZ){const Yl=Object.create(null);for(const[cl,aZ]of dZ)Yl[cl]=aZ;return Yl}function NZ(){const dZ=new Uint8Array(4);return dZ[0]=1,new Uint32Array(dZ.buffer,0,1)[0]===1}function iZ(){try{return new Function(""),!0}catch{return!1}}class pZ{static get isLittleEndian(){return VZ(this,"isLittleEndian",NZ())}static get isEvalSupported(){return VZ(this,"isEvalSupported",iZ())}static get isOffscreenCanvasSupported(){return VZ(this,"isOffscreenCanvasSupported",typeof OffscreenCanvas<"u")}static get platform(){return typeof navigator>"u"?VZ(this,"platform",{isWin:!1,isMac:!1}):VZ(this,"platform",{isWin:navigator.platform.includes("Win"),isMac:navigator.platform.includes("Mac")})}static get isCSSRoundSupported(){var Yl,cl;return VZ(this,"isCSSRoundSupported",(cl=(Yl=globalThis.CSS)==null?void 0:Yl.supports)==null?void 0:cl.call(Yl,"width: round(1.5px, 1px)"))}}m.FeatureTest=pZ;const DZ=[...Array(256).keys()].map(dZ=>dZ.toString(16).padStart(2,"0"));class YZ{static makeHexColor(Yl,cl,aZ){return`#${DZ[Yl]}${DZ[cl]}${DZ[aZ]}`}static scaleMinMax(Yl,cl){let aZ;Yl[0]?(Yl[0]<0&&(aZ=cl[0],cl[0]=cl[1],cl[1]=aZ),cl[0]*=Yl[0],cl[1]*=Yl[0],Yl[3]<0&&(aZ=cl[2],cl[2]=cl[3],cl[3]=aZ),cl[2]*=Yl[3],cl[3]*=Yl[3]):(aZ=cl[0],cl[0]=cl[2],cl[2]=aZ,aZ=cl[1],cl[1]=cl[3],cl[3]=aZ,Yl[1]<0&&(aZ=cl[2],cl[2]=cl[3],cl[3]=aZ),cl[2]*=Yl[1],cl[3]*=Yl[1],Yl[2]<0&&(aZ=cl[0],cl[0]=cl[1],cl[1]=aZ),cl[0]*=Yl[2],cl[1]*=Yl[2]),cl[0]+=Yl[4],cl[1]+=Yl[4],cl[2]+=Yl[5],cl[3]+=Yl[5]}static transform(Yl,cl){return[Yl[0]*cl[0]+Yl[2]*cl[1],Yl[1]*cl[0]+Yl[3]*cl[1],Yl[0]*cl[2]+Yl[2]*cl[3],Yl[1]*cl[2]+Yl[3]*cl[3],Yl[0]*cl[4]+Yl[2]*cl[5]+Yl[4],Yl[1]*cl[4]+Yl[3]*cl[5]+Yl[5]]}static applyTransform(Yl,cl){const aZ=Yl[0]*cl[0]+Yl[1]*cl[2]+cl[4],MZ=Yl[0]*cl[1]+Yl[1]*cl[3]+cl[5];return[aZ,MZ]}static applyInverseTransform(Yl,cl){const aZ=cl[0]*cl[3]-cl[1]*cl[2],MZ=(Yl[0]*cl[3]-Yl[1]*cl[2]+cl[2]*cl[5]-cl[4]*cl[3])/aZ,BZ=(-Yl[0]*cl[1]+Yl[1]*cl[0]+cl[4]*cl[1]-cl[5]*cl[0])/aZ;return[MZ,BZ]}static getAxialAlignedBoundingBox(Yl,cl){const aZ=this.applyTransform(Yl,cl),MZ=this.applyTransform(Yl.slice(2,4),cl),BZ=this.applyTransform([Yl[0],Yl[3]],cl),vZ=this.applyTransform([Yl[2],Yl[1]],cl);return[Math.min(aZ[0],MZ[0],BZ[0],vZ[0]),Math.min(aZ[1],MZ[1],BZ[1],vZ[1]),Math.max(aZ[0],MZ[0],BZ[0],vZ[0]),Math.max(aZ[1],MZ[1],BZ[1],vZ[1])]}static inverseTransform(Yl){const cl=Yl[0]*Yl[3]-Yl[1]*Yl[2];return[Yl[3]/cl,-Yl[1]/cl,-Yl[2]/cl,Yl[0]/cl,(Yl[2]*Yl[5]-Yl[4]*Yl[3])/cl,(Yl[4]*Yl[1]-Yl[5]*Yl[0])/cl]}static singularValueDecompose2dScale(Yl){const cl=[Yl[0],Yl[2],Yl[1],Yl[3]],aZ=Yl[0]*cl[0]+Yl[1]*cl[2],MZ=Yl[0]*cl[1]+Yl[1]*cl[3],BZ=Yl[2]*cl[0]+Yl[3]*cl[2],vZ=Yl[2]*cl[1]+Yl[3]*cl[3],Nl=(aZ+vZ)/2,uZ=Math.sqrt((aZ+vZ)**2-4*(aZ*vZ-BZ*MZ))/2,SZ=Nl+uZ||1,yZ=Nl-uZ||1;return[Math.sqrt(SZ),Math.sqrt(yZ)]}static normalizeRect(Yl){const cl=Yl.slice(0);return Yl[0]>Yl[2]&&(cl[0]=Yl[2],cl[2]=Yl[0]),Yl[1]>Yl[3]&&(cl[1]=Yl[3],cl[3]=Yl[1]),cl}static intersect(Yl,cl){const aZ=Math.max(Math.min(Yl[0],Yl[2]),Math.min(cl[0],cl[2])),MZ=Math.min(Math.max(Yl[0],Yl[2]),Math.max(cl[0],cl[2]));if(aZ>MZ)return null;const BZ=Math.max(Math.min(Yl[1],Yl[3]),Math.min(cl[1],cl[3])),vZ=Math.min(Math.max(Yl[1],Yl[3]),Math.max(cl[1],cl[3]));return BZ>vZ?null:[aZ,BZ,MZ,vZ]}static bezierBoundingBox(Yl,cl,aZ,MZ,BZ,vZ,Nl,uZ){const SZ=[],yZ=[[],[]];let wZ,xZ,HZ,hZ,EZ,RZ,F,Z;for(let Ml=0;Ml<2;++Ml){if(Ml===0?(xZ=6*Yl-12*aZ+6*BZ,wZ=-3*Yl+9*aZ-9*BZ+3*Nl,HZ=3*aZ-3*Yl):(xZ=6*cl-12*MZ+6*vZ,wZ=-3*cl+9*MZ-9*vZ+3*uZ,HZ=3*MZ-3*cl),Math.abs(wZ)<1e-12){if(Math.abs(xZ)<1e-12)continue;hZ=-HZ/xZ,0<hZ&&hZ<1&&SZ.push(hZ);continue}F=xZ*xZ-4*HZ*wZ,Z=Math.sqrt(F),!(F<0)&&(EZ=(-xZ+Z)/(2*wZ),0<EZ&&EZ<1&&SZ.push(EZ),RZ=(-xZ-Z)/(2*wZ),0<RZ&&RZ<1&&SZ.push(RZ))}let X=SZ.length,U;const P=X;for(;X--;)hZ=SZ[X],U=1-hZ,yZ[0][X]=U*U*U*Yl+3*U*U*hZ*aZ+3*U*hZ*hZ*BZ+hZ*hZ*hZ*Nl,yZ[1][X]=U*U*U*cl+3*U*U*hZ*MZ+3*U*hZ*hZ*vZ+hZ*hZ*hZ*uZ;return yZ[0][P]=Yl,yZ[1][P]=cl,yZ[0][P+1]=Nl,yZ[1][P+1]=uZ,yZ[0].length=yZ[1].length=P+2,[Math.min(...yZ[0]),Math.min(...yZ[1]),Math.max(...yZ[0]),Math.max(...yZ[1])]}}m.Util=YZ;const IZ=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function mZ(dZ){if(dZ[0]>="ï"){let cl;if(dZ[0]==="þ"&&dZ[1]==="ÿ"?cl="utf-16be":dZ[0]==="ÿ"&&dZ[1]==="þ"?cl="utf-16le":dZ[0]==="ï"&&dZ[1]==="»"&&dZ[2]==="¿"&&(cl="utf-8"),cl)try{const aZ=new TextDecoder(cl,{fatal:!0}),MZ=_l(dZ);return aZ.decode(MZ)}catch(aZ){cZ(`stringToPDFString: "${aZ}".`)}}const Yl=[];for(let cl=0,aZ=dZ.length;cl<aZ;cl++){const MZ=IZ[dZ.charCodeAt(cl)];Yl.push(MZ?String.fromCharCode(MZ):dZ.charAt(cl))}return Yl.join("")}function Xl(dZ){return decodeURIComponent(escape(dZ))}function Vl(dZ){return unescape(encodeURIComponent(dZ))}function sZ(dZ){return typeof dZ=="object"&&(dZ==null?void 0:dZ.byteLength)!==void 0}function XZ(dZ,Yl){if(dZ.length!==Yl.length)return!1;for(let cl=0,aZ=dZ.length;cl<aZ;cl++)if(dZ[cl]!==Yl[cl])return!1;return!0}function TZ(dZ=new Date){return[dZ.getUTCFullYear().toString(),(dZ.getUTCMonth()+1).toString().padStart(2,"0"),dZ.getUTCDate().toString().padStart(2,"0"),dZ.getUTCHours().toString().padStart(2,"0"),dZ.getUTCMinutes().toString().padStart(2,"0"),dZ.getUTCSeconds().toString().padStart(2,"0")].join("")}class jZ{constructor(){g(this,rZ,!1);this.promise=new Promise((Yl,cl)=>{this.resolve=aZ=>{Al(this,rZ,!0),Yl(aZ)},this.reject=aZ=>{Al(this,rZ,!0),cl(aZ)}})}get settled(){return l(this,rZ)}}rZ=new WeakMap,m.PromiseCapability=jZ;let UZ=null,JZ=null;function CZ(dZ){return UZ||(UZ=/([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu,JZ=new Map([["ſt","ſt"]])),dZ.replaceAll(UZ,(Yl,cl,aZ)=>cl?cl.normalize("NFKC"):JZ.get(aZ))}function gZ(){if(typeof crypto<"u"&&typeof(crypto==null?void 0:crypto.randomUUID)=="function")return crypto.randomUUID();const dZ=new Uint8Array(32);if(typeof crypto<"u"&&typeof(crypto==null?void 0:crypto.getRandomValues)=="function")crypto.getRandomValues(dZ);else for(let Yl=0;Yl<32;Yl++)dZ[Yl]=Math.floor(Math.random()*255);return E(dZ)}const FZ="pdfjs_internal_id_";m.AnnotationPrefix=FZ},(__unused_webpack_module,exports,__w_pdfjs_require__)=>{var H,O,s,Y,tc,r,Xc,C,D,N,j,k,w,L,n,u,nc,o,p,Dc,G,W;Object.defineProperty(exports,"__esModule",{value:!0}),exports.RenderTask=exports.PDFWorkerUtil=exports.PDFWorker=exports.PDFPageProxy=exports.PDFDocumentProxy=exports.PDFDocumentLoadingTask=exports.PDFDataRangeTransport=exports.LoopbackPort=exports.DefaultStandardFontDataFactory=exports.DefaultFilterFactory=exports.DefaultCanvasFactory=exports.DefaultCMapReaderFactory=void 0,Object.defineProperty(exports,"SVGGraphics",{enumerable:!0,get:function(){return _displaySvg.SVGGraphics}}),exports.build=void 0,exports.getDocument=getDocument,exports.version=void 0;var _util=__w_pdfjs_require__(1),_annotation_storage=__w_pdfjs_require__(3),_display_utils=__w_pdfjs_require__(6),_font_loader=__w_pdfjs_require__(9),_displayNode_utils=__w_pdfjs_require__(10),_canvas=__w_pdfjs_require__(11),_worker_options=__w_pdfjs_require__(14),_message_handler=__w_pdfjs_require__(15),_metadata=__w_pdfjs_require__(16),_optional_content_config=__w_pdfjs_require__(17),_transport_stream=__w_pdfjs_require__(18),_displayFetch_stream=__w_pdfjs_require__(19),_displayNetwork=__w_pdfjs_require__(22),_displayNode_stream=__w_pdfjs_require__(23),_displaySvg=__w_pdfjs_require__(24),_xfa_text=__w_pdfjs_require__(25);const DEFAULT_RANGE_CHUNK_SIZE=65536,RENDERING_CANCELLED_TIMEOUT=100,DELAYED_CLEANUP_TIMEOUT=5e3,DefaultCanvasFactory=_util.isNodeJS?_displayNode_utils.NodeCanvasFactory:_display_utils.DOMCanvasFactory;exports.DefaultCanvasFactory=DefaultCanvasFactory;const DefaultCMapReaderFactory=_util.isNodeJS?_displayNode_utils.NodeCMapReaderFactory:_display_utils.DOMCMapReaderFactory;exports.DefaultCMapReaderFactory=DefaultCMapReaderFactory;const DefaultFilterFactory=_util.isNodeJS?_displayNode_utils.NodeFilterFactory:_display_utils.DOMFilterFactory;exports.DefaultFilterFactory=DefaultFilterFactory;const DefaultStandardFontDataFactory=_util.isNodeJS?_displayNode_utils.NodeStandardFontDataFactory:_display_utils.DOMStandardFontDataFactory;exports.DefaultStandardFontDataFactory=DefaultStandardFontDataFactory;function getDocument(M){if(typeof M=="string"||M instanceof URL?M={url:M}:(0,_util.isArrayBuffer)(M)&&(M={data:M}),typeof M!="object")throw new Error("Invalid parameter in getDocument, need parameter object.");if(!M.url&&!M.data&&!M.range)throw new Error("Invalid parameter object: need either .data, .range or .url");const i=new PDFDocumentLoadingTask,{docId:x}=i,T=M.url?getUrlProp(M.url):null,Q=M.data?getDataProp(M.data):null,f=M.httpHeaders||null,I=M.withCredentials===!0,Wl=M.password??null,ql=M.range instanceof PDFDataRangeTransport?M.range:null,cZ=Number.isInteger(M.rangeChunkSize)&&M.rangeChunkSize>0?M.rangeChunkSize:DEFAULT_RANGE_CHUNK_SIZE;let v=M.worker instanceof PDFWorker?M.worker:null;const tZ=M.verbosity,WZ=typeof M.docBaseUrl=="string"&&!(0,_display_utils.isDataScheme)(M.docBaseUrl)?M.docBaseUrl:null,nZ=typeof M.cMapUrl=="string"?M.cMapUrl:null,VZ=M.cMapPacked!==!1,R=M.CMapReaderFactory||DefaultCMapReaderFactory,c=typeof M.standardFontDataUrl=="string"?M.standardFontDataUrl:null,b=M.StandardFontDataFactory||DefaultStandardFontDataFactory,d=M.stopAtErrors!==!0,a=Number.isInteger(M.maxImageSize)&&M.maxImageSize>-1?M.maxImageSize:-1,h=M.isEvalSupported!==!1,V=typeof M.isOffscreenCanvasSupported=="boolean"?M.isOffscreenCanvasSupported:!_util.isNodeJS,J=Number.isInteger(M.canvasMaxAreaInBytes)?M.canvasMaxAreaInBytes:-1,E=typeof M.disableFontFace=="boolean"?M.disableFontFace:_util.isNodeJS,_l=M.fontExtraProperties===!0,el=M.enableXfa===!0,lZ=M.ownerDocument||globalThis.document,bZ=M.disableRange===!0,NZ=M.disableStream===!0,iZ=M.disableAutoFetch===!0,pZ=M.pdfBug===!0,DZ=ql?ql.length:M.length??NaN,YZ=typeof M.useSystemFonts=="boolean"?M.useSystemFonts:!_util.isNodeJS&&!E,IZ=typeof M.useWorkerFetch=="boolean"?M.useWorkerFetch:R===_display_utils.DOMCMapReaderFactory&&b===_display_utils.DOMStandardFontDataFactory&&nZ&&c&&(0,_display_utils.isValidFetchUrl)(nZ,document.baseURI)&&(0,_display_utils.isValidFetchUrl)(c,document.baseURI),mZ=M.canvasFactory||new DefaultCanvasFactory({ownerDocument:lZ}),Xl=M.filterFactory||new DefaultFilterFactory({docId:x,ownerDocument:lZ}),Vl=null;(0,_util.setVerbosityLevel)(tZ);const sZ={canvasFactory:mZ,filterFactory:Xl};if(IZ||(sZ.cMapReaderFactory=new R({baseUrl:nZ,isCompressed:VZ}),sZ.standardFontDataFactory=new b({baseUrl:c})),!v){const jZ={verbosity:tZ,port:_worker_options.GlobalWorkerOptions.workerPort};v=jZ.port?PDFWorker.fromPort(jZ):new PDFWorker(jZ),i._worker=v}const XZ={docId:x,apiVersion:"3.11.174",data:Q,password:Wl,disableAutoFetch:iZ,rangeChunkSize:cZ,length:DZ,docBaseUrl:WZ,enableXfa:el,evaluatorOptions:{maxImageSize:a,disableFontFace:E,ignoreErrors:d,isEvalSupported:h,isOffscreenCanvasSupported:V,canvasMaxAreaInBytes:J,fontExtraProperties:_l,useSystemFonts:YZ,cMapUrl:IZ?nZ:null,standardFontDataUrl:IZ?c:null}},TZ={ignoreErrors:d,isEvalSupported:h,disableFontFace:E,fontExtraProperties:_l,enableXfa:el,ownerDocument:lZ,disableAutoFetch:iZ,pdfBug:pZ,styleElement:Vl};return v.promise.then(function(){if(i.destroyed)throw new Error("Loading aborted");const jZ=_fetchDocument(v,XZ),UZ=new Promise(function(JZ){let CZ;ql?CZ=new _transport_stream.PDFDataTransportStream({length:DZ,initialData:ql.initialData,progressiveDone:ql.progressiveDone,contentDispositionFilename:ql.contentDispositionFilename,disableRange:bZ,disableStream:NZ},ql):Q||(CZ=(FZ=>_util.isNodeJS?new _displayNode_stream.PDFNodeStream(FZ):(0,_display_utils.isValidFetchUrl)(FZ.url)?new _displayFetch_stream.PDFFetchStream(FZ):new _displayNetwork.PDFNetworkStream(FZ))({url:T,length:DZ,httpHeaders:f,withCredentials:I,rangeChunkSize:cZ,disableRange:bZ,disableStream:NZ})),JZ(CZ)});return Promise.all([jZ,UZ]).then(function([JZ,CZ]){if(i.destroyed)throw new Error("Loading aborted");const gZ=new _message_handler.MessageHandler(x,JZ,v.port),FZ=new WorkerTransport(gZ,i,CZ,TZ,sZ);i._transport=FZ,gZ.send("Ready",null)})}).catch(i._capability.reject),i}async function _fetchDocument(M,i){if(M.destroyed)throw new Error("Worker was destroyed");const x=await M.messageHandler.sendWithPromise("GetDocRequest",i,i.data?[i.data.buffer]:null);if(M.destroyed)throw new Error("Worker was destroyed");return x}function getUrlProp(M){if(M instanceof URL)return M.href;try{return new URL(M,window.location).href}catch{if(_util.isNodeJS&&typeof M=="string")return M}throw new Error("Invalid PDF url data: either string or URL-object is expected in the url property.")}function getDataProp(M){if(_util.isNodeJS&&typeof Buffer<"u"&&M instanceof Buffer)throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`.");if(M instanceof Uint8Array&&M.byteLength===M.buffer.byteLength)return M;if(typeof M=="string")return(0,_util.stringToBytes)(M);if(typeof M=="object"&&!isNaN(M==null?void 0:M.length)||(0,_util.isArrayBuffer)(M))return new Uint8Array(M);throw new Error("Invalid PDF binary data: either TypedArray, string, or array-like object is expected in the data property.")}const m=class m{constructor(){this._capability=new _util.PromiseCapability,this._transport=null,this._worker=null,this.docId=`d${Wc(m,H)._++}`,this.destroyed=!1,this.onPassword=null,this.onProgress=null}get promise(){return this._capability.promise}async destroy(){var i,x,T;this.destroyed=!0;try{(i=this._worker)!=null&&i.port&&(this._worker._pendingDestroy=!0),await((x=this._transport)==null?void 0:x.destroy())}catch(Q){throw(T=this._worker)!=null&&T.port&&delete this._worker._pendingDestroy,Q}this._transport=null,this._worker&&(this._worker.destroy(),this._worker=null)}};H=new WeakMap,g(m,H,0);let PDFDocumentLoadingTask=m;exports.PDFDocumentLoadingTask=PDFDocumentLoadingTask;class PDFDataRangeTransport{constructor(i,x,T=!1,Q=null){this.length=i,this.initialData=x,this.progressiveDone=T,this.contentDispositionFilename=Q,this._rangeListeners=[],this._progressListeners=[],this._progressiveReadListeners=[],this._progressiveDoneListeners=[],this._readyCapability=new _util.PromiseCapability}addRangeListener(i){this._rangeListeners.push(i)}addProgressListener(i){this._progressListeners.push(i)}addProgressiveReadListener(i){this._progressiveReadListeners.push(i)}addProgressiveDoneListener(i){this._progressiveDoneListeners.push(i)}onDataRange(i,x){for(const T of this._rangeListeners)T(i,x)}onDataProgress(i,x){this._readyCapability.promise.then(()=>{for(const T of this._progressListeners)T(i,x)})}onDataProgressiveRead(i){this._readyCapability.promise.then(()=>{for(const x of this._progressiveReadListeners)x(i)})}onDataProgressiveDone(){this._readyCapability.promise.then(()=>{for(const i of this._progressiveDoneListeners)i()})}transportReady(){this._readyCapability.resolve()}requestDataRange(i,x){(0,_util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange")}abort(){}}exports.PDFDataRangeTransport=PDFDataRangeTransport;class PDFDocumentProxy{constructor(i,x){this._pdfInfo=i,this._transport=x,Object.defineProperty(this,"getJavaScript",{value:()=>((0,_display_utils.deprecated)("`PDFDocumentProxy.getJavaScript`, please use `PDFDocumentProxy.getJSActions` instead."),this.getJSActions().then(T=>{if(!T)return T;const Q=[];for(const f in T)Q.push(...T[f]);return Q}))})}get annotationStorage(){return this._transport.annotationStorage}get filterFactory(){return this._transport.filterFactory}get numPages(){return this._pdfInfo.numPages}get fingerprints(){return this._pdfInfo.fingerprints}get isPureXfa(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}get allXfaHtml(){return this._transport._htmlForXfa}getPage(i){return this._transport.getPage(i)}getPageIndex(i){return this._transport.getPageIndex(i)}getDestinations(){return this._transport.getDestinations()}getDestination(i){return this._transport.getDestination(i)}getPageLabels(){return this._transport.getPageLabels()}getPageLayout(){return this._transport.getPageLayout()}getPageMode(){return this._transport.getPageMode()}getViewerPreferences(){return this._transport.getViewerPreferences()}getOpenAction(){return this._transport.getOpenAction()}getAttachments(){return this._transport.getAttachments()}getJSActions(){return this._transport.getDocJSActions()}getOutline(){return this._transport.getOutline()}getOptionalContentConfig(){return this._transport.getOptionalContentConfig()}getPermissions(){return this._transport.getPermissions()}getMetadata(){return this._transport.getMetadata()}getMarkInfo(){return this._transport.getMarkInfo()}getData(){return this._transport.getData()}saveDocument(){return this._transport.saveDocument()}getDownloadInfo(){return this._transport.downloadInfoCapability.promise}cleanup(i=!1){return this._transport.startCleanup(i||this.isPureXfa)}destroy(){return this.loadingTask.destroy()}get loadingParams(){return this._transport.loadingParams}get loadingTask(){return this._transport.loadingTask}getFieldObjects(){return this._transport.getFieldObjects()}hasJSActions(){return this._transport.hasJSActions()}getCalculationOrderIds(){return this._transport.getCalculationOrderIds()}}exports.PDFDocumentProxy=PDFDocumentProxy;class PDFPageProxy{constructor(i,x,T,Q=!1){g(this,Y);g(this,r);g(this,O,null);g(this,s,!1);this._pageIndex=i,this._pageInfo=x,this._transport=T,this._stats=Q?new _display_utils.StatTimer:null,this._pdfBug=Q,this.commonObjs=T.commonObjs,this.objs=new PDFObjects,this._maybeCleanupAfterRender=!1,this._intentStates=new Map,this.destroyed=!1}get pageNumber(){return this._pageIndex+1}get rotate(){return this._pageInfo.rotate}get ref(){return this._pageInfo.ref}get userUnit(){return this._pageInfo.userUnit}get view(){return this._pageInfo.view}getViewport({scale:i,rotation:x=this.rotate,offsetX:T=0,offsetY:Q=0,dontFlip:f=!1}={}){return new _display_utils.PageViewport({viewBox:this.view,scale:i,rotation:x,offsetX:T,offsetY:Q,dontFlip:f})}getAnnotations({intent:i="display"}={}){const x=this._transport.getRenderingIntent(i);return this._transport.getAnnotations(this._pageIndex,x.renderingIntent)}getJSActions(){return this._transport.getPageJSActions(this._pageIndex)}get filterFactory(){return this._transport.filterFactory}get isPureXfa(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}async getXfa(){var i;return((i=this._transport._htmlForXfa)==null?void 0:i.children[this._pageIndex])||null}render({canvasContext:i,viewport:x,intent:T="display",annotationMode:Q=_util.AnnotationMode.ENABLE,transform:f=null,background:I=null,optionalContentConfigPromise:Wl=null,annotationCanvasMap:ql=null,pageColors:cZ=null,printAnnotationStorage:v=null}){var b,d;(b=this._stats)==null||b.time("Overall");const tZ=this._transport.getRenderingIntent(T,Q,v);Al(this,s,!1),Zl(this,r,Xc).call(this),Wl||(Wl=this._transport.getOptionalContentConfig());let WZ=this._intentStates.get(tZ.cacheKey);WZ||(WZ=Object.create(null),this._intentStates.set(tZ.cacheKey,WZ)),WZ.streamReaderCancelTimeout&&(clearTimeout(WZ.streamReaderCancelTimeout),WZ.streamReaderCancelTimeout=null);const nZ=!!(tZ.renderingIntent&_util.RenderingIntentFlag.PRINT);WZ.displayReadyCapability||(WZ.displayReadyCapability=new _util.PromiseCapability,WZ.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},(d=this._stats)==null||d.time("Page Request"),this._pumpOperatorList(tZ));const VZ=a=>{var h,V;WZ.renderTasks.delete(R),(this._maybeCleanupAfterRender||nZ)&&Al(this,s,!0),Zl(this,Y,tc).call(this,!nZ),a?(R.capability.reject(a),this._abortOperatorList({intentState:WZ,reason:a instanceof Error?a:new Error(a)})):R.capability.resolve(),(h=this._stats)==null||h.timeEnd("Rendering"),(V=this._stats)==null||V.timeEnd("Overall")},R=new InternalRenderTask({callback:VZ,params:{canvasContext:i,viewport:x,transform:f,background:I},objs:this.objs,commonObjs:this.commonObjs,annotationCanvasMap:ql,operatorList:WZ.operatorList,pageIndex:this._pageIndex,canvasFactory:this._transport.canvasFactory,filterFactory:this._transport.filterFactory,useRequestAnimationFrame:!nZ,pdfBug:this._pdfBug,pageColors:cZ});(WZ.renderTasks||(WZ.renderTasks=new Set)).add(R);const c=R.task;return Promise.all([WZ.displayReadyCapability.promise,Wl]).then(([a,h])=>{var V;if(this.destroyed){VZ();return}(V=this._stats)==null||V.time("Rendering"),R.initializeGraphics({transparency:a,optionalContentConfig:h}),R.operatorListChanged()}).catch(VZ),c}getOperatorList({intent:i="display",annotationMode:x=_util.AnnotationMode.ENABLE,printAnnotationStorage:T=null}={}){var ql;function Q(){I.operatorList.lastChunk&&(I.opListReadCapability.resolve(I.operatorList),I.renderTasks.delete(Wl))}const f=this._transport.getRenderingIntent(i,x,T,!0);let I=this._intentStates.get(f.cacheKey);I||(I=Object.create(null),this._intentStates.set(f.cacheKey,I));let Wl;return I.opListReadCapability||(Wl=Object.create(null),Wl.operatorListChanged=Q,I.opListReadCapability=new _util.PromiseCapability,(I.renderTasks||(I.renderTasks=new Set)).add(Wl),I.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},(ql=this._stats)==null||ql.time("Page Request"),this._pumpOperatorList(f)),I.opListReadCapability.promise}streamTextContent({includeMarkedContent:i=!1,disableNormalization:x=!1}={}){return this._transport.messageHandler.sendWithStream("GetTextContent",{pageIndex:this._pageIndex,includeMarkedContent:i===!0,disableNormalization:x===!0},{highWaterMark:100,size(Q){return Q.items.length}})}getTextContent(i={}){if(this._transport._htmlForXfa)return this.getXfa().then(T=>_xfa_text.XfaText.textContent(T));const x=this.streamTextContent(i);return new Promise(function(T,Q){function f(){I.read().then(function({value:ql,done:cZ}){if(cZ){T(Wl);return}Object.assign(Wl.styles,ql.styles),Wl.items.push(...ql.items),f()},Q)}const I=x.getReader(),Wl={items:[],styles:Object.create(null)};f()})}getStructTree(){return this._transport.getStructTree(this._pageIndex)}_destroy(){this.destroyed=!0;const i=[];for(const x of this._intentStates.values())if(this._abortOperatorList({intentState:x,reason:new Error("Page was destroyed."),force:!0}),!x.opListReadCapability)for(const T of x.renderTasks)i.push(T.completed),T.cancel();return this.objs.clear(),Al(this,s,!1),Zl(this,r,Xc).call(this),Promise.all(i)}cleanup(i=!1){Al(this,s,!0);const x=Zl(this,Y,tc).call(this,!1);return i&&x&&this._stats&&(this._stats=new _display_utils.StatTimer),x}_startRenderPage(i,x){var Q,f;const T=this._intentStates.get(x);T&&((Q=this._stats)==null||Q.timeEnd("Page Request"),(f=T.displayReadyCapability)==null||f.resolve(i))}_renderPageChunk(i,x){for(let T=0,Q=i.length;T<Q;T++)x.operatorList.fnArray.push(i.fnArray[T]),x.operatorList.argsArray.push(i.argsArray[T]);x.operatorList.lastChunk=i.lastChunk,x.operatorList.separateAnnots=i.separateAnnots;for(const T of x.renderTasks)T.operatorListChanged();i.lastChunk&&Zl(this,Y,tc).call(this,!0)}_pumpOperatorList({renderingIntent:i,cacheKey:x,annotationStorageSerializable:T}){const{map:Q,transfers:f}=T,Wl=this._transport.messageHandler.sendWithStream("GetOperatorList",{pageIndex:this._pageIndex,intent:i,cacheKey:x,annotationStorage:Q},f).getReader(),ql=this._intentStates.get(x);ql.streamReader=Wl;const cZ=()=>{Wl.read().then(({value:v,done:tZ})=>{if(tZ){ql.streamReader=null;return}this._transport.destroyed||(this._renderPageChunk(v,ql),cZ())},v=>{if(ql.streamReader=null,!this._transport.destroyed){if(ql.operatorList){ql.operatorList.lastChunk=!0;for(const tZ of ql.renderTasks)tZ.operatorListChanged();Zl(this,Y,tc).call(this,!0)}if(ql.displayReadyCapability)ql.displayReadyCapability.reject(v);else if(ql.opListReadCapability)ql.opListReadCapability.reject(v);else throw v}})};cZ()}_abortOperatorList({intentState:i,reason:x,force:T=!1}){if(i.streamReader){if(i.streamReaderCancelTimeout&&(clearTimeout(i.streamReaderCancelTimeout),i.streamReaderCancelTimeout=null),!T){if(i.renderTasks.size>0)return;if(x instanceof _display_utils.RenderingCancelledException){let Q=RENDERING_CANCELLED_TIMEOUT;x.extraDelay>0&&x.extraDelay<1e3&&(Q+=x.extraDelay),i.streamReaderCancelTimeout=setTimeout(()=>{i.streamReaderCancelTimeout=null,this._abortOperatorList({intentState:i,reason:x,force:!0})},Q);return}}if(i.streamReader.cancel(new _util.AbortException(x.message)).catch(()=>{}),i.streamReader=null,!this._transport.destroyed){for(const[Q,f]of this._intentStates)if(f===i){this._intentStates.delete(Q);break}this.cleanup()}}}get stats(){return this._stats}}O=new WeakMap,s=new WeakMap,Y=new WeakSet,tc=function(i=!1){if(Zl(this,r,Xc).call(this),!l(this,s)||this.destroyed)return!1;if(i)return Al(this,O,setTimeout(()=>{Al(this,O,null),Zl(this,Y,tc).call(this,!1)},DELAYED_CLEANUP_TIMEOUT)),!1;for(const{renderTasks:x,operatorList:T}of this._intentStates.values())if(x.size>0||!T.lastChunk)return!1;return this._intentStates.clear(),this.objs.clear(),Al(this,s,!1),!0},r=new WeakSet,Xc=function(){l(this,O)&&(clearTimeout(l(this,O)),Al(this,O,null))},exports.PDFPageProxy=PDFPageProxy;class LoopbackPort{constructor(){g(this,C,new Set);g(this,D,Promise.resolve())}postMessage(i,x){const T={data:structuredClone(i,x?{transfer:x}:null)};l(this,D).then(()=>{for(const Q of l(this,C))Q.call(this,T)})}addEventListener(i,x){l(this,C).add(x)}removeEventListener(i,x){l(this,C).delete(x)}terminate(){l(this,C).clear()}}C=new WeakMap,D=new WeakMap,exports.LoopbackPort=LoopbackPort;const PDFWorkerUtil={isWorkerDisabled:!1,fallbackWorkerSrc:null,fakeWorkerId:0};exports.PDFWorkerUtil=PDFWorkerUtil;{if(_util.isNodeJS&&typeof commonjsRequire=="function")PDFWorkerUtil.isWorkerDisabled=!0,PDFWorkerUtil.fallbackWorkerSrc="./pdf.worker.js";else if(typeof document=="object"){const M=(N=document==null?void 0:document.currentScript)==null?void 0:N.src;M&&(PDFWorkerUtil.fallbackWorkerSrc=M.replace(/(\.(?:min\.)?js)(\?.*)?$/i,".worker$1$2"))}PDFWorkerUtil.isSameOrigin=function(M,i){let x;try{if(x=new URL(M),!x.origin||x.origin==="null")return!1}catch{return!1}const T=new URL(i,x);return x.origin===T.origin},PDFWorkerUtil.createCDNWrapper=function(M){const i=`importScripts("${M}");`;return URL.createObjectURL(new Blob([i]))}}const _PDFWorker=class _PDFWorker{constructor({name:M=null,port:i=null,verbosity:x=(0,_util.getVerbosityLevel)()}={}){var T;if(this.name=M,this.destroyed=!1,this.verbosity=x,this._readyCapability=new _util.PromiseCapability,this._port=null,this._webWorker=null,this._messageHandler=null,i){if((T=l(_PDFWorker,j))!=null&&T.has(i))throw new Error("Cannot use more than one PDFWorker per port.");(l(_PDFWorker,j)||Al(_PDFWorker,j,new WeakMap)).set(i,this),this._initializeFromPort(i);return}this._initialize()}get promise(){return this._readyCapability.promise}get port(){return this._port}get messageHandler(){return this._messageHandler}_initializeFromPort(M){this._port=M,this._messageHandler=new _message_handler.MessageHandler("main","worker",M),this._messageHandler.on("ready",function(){}),this._readyCapability.resolve(),this._messageHandler.send("configure",{verbosity:this.verbosity})}_initialize(){if(!PDFWorkerUtil.isWorkerDisabled&&!_PDFWorker._mainThreadWorkerMessageHandler){let{workerSrc:M}=_PDFWorker;try{PDFWorkerUtil.isSameOrigin(window.location.href,M)||(M=PDFWorkerUtil.createCDNWrapper(new URL(M,window.location).href));const i=new Worker(M),x=new _message_handler.MessageHandler("main","worker",i),T=()=>{i.removeEventListener("error",Q),x.destroy(),i.terminate(),this.destroyed?this._readyCapability.reject(new Error("Worker was destroyed")):this._setupFakeWorker()},Q=()=>{this._webWorker||T()};i.addEventListener("error",Q),x.on("test",I=>{if(i.removeEventListener("error",Q),this.destroyed){T();return}I?(this._messageHandler=x,this._port=i,this._webWorker=i,this._readyCapability.resolve(),x.send("configure",{verbosity:this.verbosity})):(this._setupFakeWorker(),x.destroy(),i.terminate())}),x.on("ready",I=>{if(i.removeEventListener("error",Q),this.destroyed){T();return}try{f()}catch{this._setupFakeWorker()}});const f=()=>{const I=new Uint8Array;x.send("test",I,[I.buffer])};f();return}catch{(0,_util.info)("The worker has been disabled.")}}this._setupFakeWorker()}_setupFakeWorker(){PDFWorkerUtil.isWorkerDisabled||((0,_util.warn)("Setting up fake worker."),PDFWorkerUtil.isWorkerDisabled=!0),_PDFWorker._setupFakeWorkerGlobal.then(M=>{if(this.destroyed){this._readyCapability.reject(new Error("Worker was destroyed"));return}const i=new LoopbackPort;this._port=i;const x=`fake${PDFWorkerUtil.fakeWorkerId++}`,T=new _message_handler.MessageHandler(x+"_worker",x,i);M.setup(T,i);const Q=new _message_handler.MessageHandler(x,x+"_worker",i);this._messageHandler=Q,this._readyCapability.resolve(),Q.send("configure",{verbosity:this.verbosity})}).catch(M=>{this._readyCapability.reject(new Error(`Setting up fake worker failed: "${M.message}".`))})}destroy(){var M;this.destroyed=!0,this._webWorker&&(this._webWorker.terminate(),this._webWorker=null),(M=l(_PDFWorker,j))==null||M.delete(this._port),this._port=null,this._messageHandler&&(this._messageHandler.destroy(),this._messageHandler=null)}static fromPort(M){var x;if(!(M!=null&&M.port))throw new Error("PDFWorker.fromPort - invalid method signature.");const i=(x=l(this,j))==null?void 0:x.get(M.port);if(i){if(i._pendingDestroy)throw new Error("PDFWorker.fromPort - the worker is being destroyed.\nPlease remember to await `PDFDocumentLoadingTask.destroy()`-calls.");return i}return new _PDFWorker(M)}static get workerSrc(){if(_worker_options.GlobalWorkerOptions.workerSrc)return _worker_options.GlobalWorkerOptions.workerSrc;if(PDFWorkerUtil.fallbackWorkerSrc!==null)return _util.isNodeJS||(0,_display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'),PDFWorkerUtil.fallbackWorkerSrc;throw new Error('No "GlobalWorkerOptions.workerSrc" specified.')}static get _mainThreadWorkerMessageHandler(){var M;try{return((M=globalThis.pdfjsWorker)==null?void 0:M.WorkerMessageHandler)||null}catch{return null}}static get _setupFakeWorkerGlobal(){const loader=async()=>{const mainWorkerMessageHandler=this._mainThreadWorkerMessageHandler;if(mainWorkerMessageHandler)return mainWorkerMessageHandler;if(_util.isNodeJS&&typeof commonjsRequire=="function"){const worker=eval("require")(this.workerSrc);return worker.WorkerMessageHandler}return await(0,_display_utils.loadScript)(this.workerSrc),window.pdfjsWorker.WorkerMessageHandler};return(0,_util.shadow)(this,"_setupFakeWorkerGlobal",loader())}};j=new WeakMap,g(_PDFWorker,j,void 0);let PDFWorker=_PDFWorker;exports.PDFWorker=PDFWorker;class WorkerTransport{constructor(i,x,T,Q,f){g(this,u);g(this,k,new Map);g(this,w,new Map);g(this,L,new Map);g(this,n,null);this.messageHandler=i,this.loadingTask=x,this.commonObjs=new PDFObjects,this.fontLoader=new _font_loader.FontLoader({ownerDocument:Q.ownerDocument,styleElement:Q.styleElement}),this._params=Q,this.canvasFactory=f.canvasFactory,this.filterFactory=f.filterFactory,this.cMapReaderFactory=f.cMapReaderFactory,this.standardFontDataFactory=f.standardFontDataFactory,this.destroyed=!1,this.destroyCapability=null,this._networkStream=T,this._fullReader=null,this._lastProgress=null,this.downloadInfoCapability=new _util.PromiseCapability,this.setupMessageHandler()}get annotationStorage(){return(0,_util.shadow)(this,"annotationStorage",new _annotation_storage.AnnotationStorage)}getRenderingIntent(i,x=_util.AnnotationMode.ENABLE,T=null,Q=!1){let f=_util.RenderingIntentFlag.DISPLAY,I=_annotation_storage.SerializableEmpty;switch(i){case"any":f=_util.RenderingIntentFlag.ANY;break;case"display":break;case"print":f=_util.RenderingIntentFlag.PRINT;break;default:(0,_util.warn)(`getRenderingIntent - invalid intent: ${i}`)}switch(x){case _util.AnnotationMode.DISABLE:f+=_util.RenderingIntentFlag.ANNOTATIONS_DISABLE;break;case _util.AnnotationMode.ENABLE:break;case _util.AnnotationMode.ENABLE_FORMS:f+=_util.RenderingIntentFlag.ANNOTATIONS_FORMS;break;case _util.AnnotationMode.ENABLE_STORAGE:f+=_util.RenderingIntentFlag.ANNOTATIONS_STORAGE,I=(f&_util.RenderingIntentFlag.PRINT&&T instanceof _annotation_storage.PrintAnnotationStorage?T:this.annotationStorage).serializable;break;default:(0,_util.warn)(`getRenderingIntent - invalid annotationMode: ${x}`)}return Q&&(f+=_util.RenderingIntentFlag.OPLIST),{renderingIntent:f,cacheKey:`${f}_${I.hash}`,annotationStorageSerializable:I}}destroy(){var T;if(this.destroyCapability)return this.destroyCapability.promise;this.destroyed=!0,this.destroyCapability=new _util.PromiseCapability,(T=l(this,n))==null||T.reject(new Error("Worker was destroyed during onPassword callback"));const i=[];for(const Q of l(this,w).values())i.push(Q._destroy());l(this,w).clear(),l(this,L).clear(),this.hasOwnProperty("annotationStorage")&&this.annotationStorage.resetModified();const x=this.messageHandler.sendWithPromise("Terminate",null);return i.push(x),Promise.all(i).then(()=>{var Q;this.commonObjs.clear(),this.fontLoader.clear(),l(this,k).clear(),this.filterFactory.destroy(),(Q=this._networkStream)==null||Q.cancelAllRequests(new _util.AbortException("Worker was terminated.")),this.messageHandler&&(this.messageHandler.destroy(),this.messageHandler=null),this.destroyCapability.resolve()},this.destroyCapability.reject),this.destroyCapability.promise}setupMessageHandler(){const{messageHandler:i,loadingTask:x}=this;i.on("GetReader",(T,Q)=>{(0,_util.assert)(this._networkStream,"GetReader - no `IPDFStream` instance available."),this._fullReader=this._networkStream.getFullReader(),this._fullReader.onProgress=f=>{this._lastProgress={loaded:f.loaded,total:f.total}},Q.onPull=()=>{this._fullReader.read().then(function({value:f,done:I}){if(I){Q.close();return}(0,_util.assert)(f instanceof ArrayBuffer,"GetReader - expected an ArrayBuffer."),Q.enqueue(new Uint8Array(f),1,[f])}).catch(f=>{Q.error(f)})},Q.onCancel=f=>{this._fullReader.cancel(f),Q.ready.catch(I=>{if(!this.destroyed)throw I})}}),i.on("ReaderHeadersReady",T=>{const Q=new _util.PromiseCapability,f=this._fullReader;return f.headersReady.then(()=>{var I;(!f.isStreamingSupported||!f.isRangeSupported)&&(this._lastProgress&&((I=x.onProgress)==null||I.call(x,this._lastProgress)),f.onProgress=Wl=>{var ql;(ql=x.onProgress)==null||ql.call(x,{loaded:Wl.loaded,total:Wl.total})}),Q.resolve({isStreamingSupported:f.isStreamingSupported,isRangeSupported:f.isRangeSupported,contentLength:f.contentLength})},Q.reject),Q.promise}),i.on("GetRangeReader",(T,Q)=>{(0,_util.assert)(this._networkStream,"GetRangeReader - no `IPDFStream` instance available.");const f=this._networkStream.getRangeReader(T.begin,T.end);if(!f){Q.close();return}Q.onPull=()=>{f.read().then(function({value:I,done:Wl}){if(Wl){Q.close();return}(0,_util.assert)(I instanceof ArrayBuffer,"GetRangeReader - expected an ArrayBuffer."),Q.enqueue(new Uint8Array(I),1,[I])}).catch(I=>{Q.error(I)})},Q.onCancel=I=>{f.cancel(I),Q.ready.catch(Wl=>{if(!this.destroyed)throw Wl})}}),i.on("GetDoc",({pdfInfo:T})=>{this._numPages=T.numPages,this._htmlForXfa=T.htmlForXfa,delete T.htmlForXfa,x._capability.resolve(new PDFDocumentProxy(T,this))}),i.on("DocException",function(T){let Q;switch(T.name){case"PasswordException":Q=new _util.PasswordException(T.message,T.code);break;case"InvalidPDFException":Q=new _util.InvalidPDFException(T.message);break;case"MissingPDFException":Q=new _util.MissingPDFException(T.message);break;case"UnexpectedResponseException":Q=new _util.UnexpectedResponseException(T.message,T.status);break;case"UnknownErrorException":Q=new _util.UnknownErrorException(T.message,T.details);break;default:(0,_util.unreachable)("DocException - expected a valid Error.")}x._capability.reject(Q)}),i.on("PasswordRequest",T=>{if(Al(this,n,new _util.PromiseCapability),x.onPassword){const Q=f=>{f instanceof Error?l(this,n).reject(f):l(this,n).resolve({password:f})};try{x.onPassword(Q,T.code)}catch(f){l(this,n).reject(f)}}else l(this,n).reject(new _util.PasswordException(T.message,T.code));return l(this,n).promise}),i.on("DataLoaded",T=>{var Q;(Q=x.onProgress)==null||Q.call(x,{loaded:T.length,total:T.length}),this.downloadInfoCapability.resolve(T)}),i.on("StartRenderPage",T=>{if(this.destroyed)return;l(this,w).get(T.pageIndex)._startRenderPage(T.transparency,T.cacheKey)}),i.on("commonobj",([T,Q,f])=>{var I;if(!this.destroyed&&!this.commonObjs.has(T))switch(Q){case"Font":const Wl=this._params;if("error"in f){const v=f.error;(0,_util.warn)(`Error during font loading: ${v}`),this.commonObjs.resolve(T,v);break}const ql=Wl.pdfBug&&((I=globalThis.FontInspector)!=null&&I.enabled)?(v,tZ)=>globalThis.FontInspector.fontAdded(v,tZ):null,cZ=new _font_loader.FontFaceObject(f,{isEvalSupported:Wl.isEvalSupported,disableFontFace:Wl.disableFontFace,ignoreErrors:Wl.ignoreErrors,inspectFont:ql});this.fontLoader.bind(cZ).catch(v=>i.sendWithPromise("FontFallback",{id:T})).finally(()=>{!Wl.fontExtraProperties&&cZ.data&&(cZ.data=null),this.commonObjs.resolve(T,cZ)});break;case"FontPath":case"Image":case"Pattern":this.commonObjs.resolve(T,f);break;default:throw new Error(`Got unknown common object type ${Q}`)}}),i.on("obj",([T,Q,f,I])=>{var ql;if(this.destroyed)return;const Wl=l(this,w).get(Q);if(!Wl.objs.has(T))switch(f){case"Image":if(Wl.objs.resolve(T,I),I){let cZ;if(I.bitmap){const{width:v,height:tZ}=I;cZ=v*tZ*4}else cZ=((ql=I.data)==null?void 0:ql.length)||0;cZ>_util.MAX_IMAGE_SIZE_TO_CACHE&&(Wl._maybeCleanupAfterRender=!0)}break;case"Pattern":Wl.objs.resolve(T,I);break;default:throw new Error(`Got unknown object type ${f}`)}}),i.on("DocProgress",T=>{var Q;this.destroyed||(Q=x.onProgress)==null||Q.call(x,{loaded:T.loaded,total:T.total})}),i.on("FetchBuiltInCMap",T=>this.destroyed?Promise.reject(new Error("Worker was destroyed.")):this.cMapReaderFactory?this.cMapReaderFactory.fetch(T):Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter."))),i.on("FetchStandardFontData",T=>this.destroyed?Promise.reject(new Error("Worker was destroyed.")):this.standardFontDataFactory?this.standardFontDataFactory.fetch(T):Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")))}getData(){return this.messageHandler.sendWithPromise("GetData",null)}saveDocument(){var T;this.annotationStorage.size<=0&&(0,_util.warn)("saveDocument called while `annotationStorage` is empty, please use the getData-method instead.");const{map:i,transfers:x}=this.annotationStorage.serializable;return this.messageHandler.sendWithPromise("SaveDocument",{isPureXfa:!!this._htmlForXfa,numPages:this._numPages,annotationStorage:i,filename:((T=this._fullReader)==null?void 0:T.filename)??null},x).finally(()=>{this.annotationStorage.resetModified()})}getPage(i){if(!Number.isInteger(i)||i<=0||i>this._numPages)return Promise.reject(new Error("Invalid page request."));const x=i-1,T=l(this,L).get(x);if(T)return T;const Q=this.messageHandler.sendWithPromise("GetPage",{pageIndex:x}).then(f=>{if(this.destroyed)throw new Error("Transport destroyed");const I=new PDFPageProxy(x,f,this,this._params.pdfBug);return l(this,w).set(x,I),I});return l(this,L).set(x,Q),Q}getPageIndex(i){return typeof i!="object"||i===null||!Number.isInteger(i.num)||i.num<0||!Number.isInteger(i.gen)||i.gen<0?Promise.reject(new Error("Invalid pageIndex request.")):this.messageHandler.sendWithPromise("GetPageIndex",{num:i.num,gen:i.gen})}getAnnotations(i,x){return this.messageHandler.sendWithPromise("GetAnnotations",{pageIndex:i,intent:x})}getFieldObjects(){return Zl(this,u,nc).call(this,"GetFieldObjects")}hasJSActions(){return Zl(this,u,nc).call(this,"HasJSActions")}getCalculationOrderIds(){return this.messageHandler.sendWithPromise("GetCalculationOrderIds",null)}getDestinations(){return this.messageHandler.sendWithPromise("GetDestinations",null)}getDestination(i){return typeof i!="string"?Promise.reject(new Error("Invalid destination request.")):this.messageHandler.sendWithPromise("GetDestination",{id:i})}getPageLabels(){return this.messageHandler.sendWithPromise("GetPageLabels",null)}getPageLayout(){return this.messageHandler.sendWithPromise("GetPageLayout",null)}getPageMode(){return this.messageHandler.sendWithPromise("GetPageMode",null)}getViewerPreferences(){return this.messageHandler.sendWithPromise("GetViewerPreferences",null)}getOpenAction(){return this.messageHandler.sendWithPromise("GetOpenAction",null)}getAttachments(){return this.messageHandler.sendWithPromise("GetAttachments",null)}getDocJSActions(){return Zl(this,u,nc).call(this,"GetDocJSActions")}getPageJSActions(i){return this.messageHandler.sendWithPromise("GetPageJSActions",{pageIndex:i})}getStructTree(i){return this.messageHandler.sendWithPromise("GetStructTree",{pageIndex:i})}getOutline(){return this.messageHandler.sendWithPromise("GetOutline",null)}getOptionalContentConfig(){return this.messageHandler.sendWithPromise("GetOptionalContentConfig",null).then(i=>new _optional_content_config.OptionalContentConfig(i))}getPermissions(){return this.messageHandler.sendWithPromise("GetPermissions",null)}getMetadata(){const i="GetMetadata",x=l(this,k).get(i);if(x)return x;const T=this.messageHandler.sendWithPromise(i,null).then(Q=>{var f,I;return{info:Q[0],metadata:Q[1]?new _metadata.Metadata(Q[1]):null,contentDispositionFilename:((f=this._fullReader)==null?void 0:f.filename)??null,contentLength:((I=this._fullReader)==null?void 0:I.contentLength)??null}});return l(this,k).set(i,T),T}getMarkInfo(){return this.messageHandler.sendWithPromise("GetMarkInfo",null)}async startCleanup(i=!1){if(!this.destroyed){await this.messageHandler.sendWithPromise("Cleanup",null);for(const x of l(this,w).values())if(!x.cleanup())throw new Error(`startCleanup: Page ${x.pageNumber} is currently rendering.`);this.commonObjs.clear(),i||this.fontLoader.clear(),l(this,k).clear(),this.filterFactory.destroy(!0)}}get loadingParams(){const{disableAutoFetch:i,enableXfa:x}=this._params;return(0,_util.shadow)(this,"loadingParams",{disableAutoFetch:i,enableXfa:x})}}k=new WeakMap,w=new WeakMap,L=new WeakMap,n=new WeakMap,u=new WeakSet,nc=function(i,x=null){const T=l(this,k).get(i);if(T)return T;const Q=this.messageHandler.sendWithPromise(i,x);return l(this,k).set(i,Q),Q};class PDFObjects{constructor(){g(this,p);g(this,o,Object.create(null))}get(i,x=null){if(x){const Q=Zl(this,p,Dc).call(this,i);return Q.capability.promise.then(()=>x(Q.data)),null}const T=l(this,o)[i];if(!(T!=null&&T.capability.settled))throw new Error(`Requesting object that isn't resolved yet ${i}.`);return T.data}has(i){const x=l(this,o)[i];return(x==null?void 0:x.capability.settled)||!1}resolve(i,x=null){const T=Zl(this,p,Dc).call(this,i);T.data=x,T.capability.resolve()}clear(){var i;for(const x in l(this,o)){const{data:T}=l(this,o)[x];(i=T==null?void 0:T.bitmap)==null||i.close()}Al(this,o,Object.create(null))}}o=new WeakMap,p=new WeakSet,Dc=function(i){var x;return(x=l(this,o))[i]||(x[i]={capability:new _util.PromiseCapability,data:null})};class RenderTask{constructor(i){g(this,G,null);Al(this,G,i),this.onContinue=null}get promise(){return l(this,G).capability.promise}cancel(i=0){l(this,G).cancel(null,i)}get separateAnnots(){const{separateAnnots:i}=l(this,G).operatorList;if(!i)return!1;const{annotationCanvasMap:x}=l(this,G);return i.form||i.canvas&&(x==null?void 0:x.size)>0}}G=new WeakMap,exports.RenderTask=RenderTask;const z=class z{constructor({callback:i,params:x,objs:T,commonObjs:Q,annotationCanvasMap:f,operatorList:I,pageIndex:Wl,canvasFactory:ql,filterFactory:cZ,useRequestAnimationFrame:v=!1,pdfBug:tZ=!1,pageColors:WZ=null}){this.callback=i,this.params=x,this.objs=T,this.commonObjs=Q,this.annotationCanvasMap=f,this.operatorListIdx=null,this.operatorList=I,this._pageIndex=Wl,this.canvasFactory=ql,this.filterFactory=cZ,this._pdfBug=tZ,this.pageColors=WZ,this.running=!1,this.graphicsReadyCallback=null,this.graphicsReady=!1,this._useRequestAnimationFrame=v===!0&&typeof window<"u",this.cancelled=!1,this.capability=new _util.PromiseCapability,this.task=new RenderTask(this),this._cancelBound=this.cancel.bind(this),this._continueBound=this._continue.bind(this),this._scheduleNextBound=this._scheduleNext.bind(this),this._nextBound=this._next.bind(this),this._canvas=x.canvasContext.canvas}get completed(){return this.capability.promise.catch(function(){})}initializeGraphics({transparency:i=!1,optionalContentConfig:x}){var Wl,ql;if(this.cancelled)return;if(this._canvas){if(l(z,W).has(this._canvas))throw new Error("Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed.");l(z,W).add(this._canvas)}this._pdfBug&&((Wl=globalThis.StepperManager)!=null&&Wl.enabled)&&(this.stepper=globalThis.StepperManager.create(this._pageIndex),this.stepper.init(this.operatorList),this.stepper.nextBreakPoint=this.stepper.getNextBreakPoint());const{canvasContext:T,viewport:Q,transform:f,background:I}=this.params;this.gfx=new _canvas.CanvasGraphics(T,this.commonObjs,this.objs,this.canvasFactory,this.filterFactory,{optionalContentConfig:x},this.annotationCanvasMap,this.pageColors),this.gfx.beginDrawing({transform:f,viewport:Q,transparency:i,background:I}),this.operatorListIdx=0,this.graphicsReady=!0,(ql=this.graphicsReadyCallback)==null||ql.call(this)}cancel(i=null,x=0){var T;this.running=!1,this.cancelled=!0,(T=this.gfx)==null||T.endDrawing(),l(z,W).delete(this._canvas),this.callback(i||new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex+1}`,x))}operatorListChanged(){var i;if(!this.graphicsReady){this.graphicsReadyCallback||(this.graphicsReadyCallback=this._continueBound);return}(i=this.stepper)==null||i.updateOperatorList(this.operatorList),!this.running&&this._continue()}_continue(){this.running=!0,!this.cancelled&&(this.task.onContinue?this.task.onContinue(this._scheduleNextBound):this._scheduleNext())}_scheduleNext(){this._useRequestAnimationFrame?window.requestAnimationFrame(()=>{this._nextBound().catch(this._cancelBound)}):Promise.resolve().then(this._nextBound).catch(this._cancelBound)}async _next(){this.cancelled||(this.operatorListIdx=this.gfx.executeOperatorList(this.operatorList,this.operatorListIdx,this._continueBound,this.stepper),this.operatorListIdx===this.operatorList.argsArray.length&&(this.running=!1,this.operatorList.lastChunk&&(this.gfx.endDrawing(),l(z,W).delete(this._canvas),this.callback())))}};W=new WeakMap,g(z,W,new WeakSet);let InternalRenderTask=z;const version="3.11.174";exports.version=version;const build="ce8716743";exports.build=build},(H,m,O)=>{var D,N,j,Md,w;Object.defineProperty(m,"__esModule",{value:!0}),m.SerializableEmpty=m.PrintAnnotationStorage=m.AnnotationStorage=void 0;var s=O(1),Y=O(4),B=O(8);const r=Object.freeze({map:null,hash:"",transfers:void 0});m.SerializableEmpty=r;class ZZ{constructor(){g(this,j);g(this,D,!1);g(this,N,new Map);this.onSetModified=null,this.onResetModified=null,this.onAnnotationEditor=null}getValue(n,u){const y=l(this,N).get(n);return y===void 0?u:Object.assign(u,y)}getRawValue(n){return l(this,N).get(n)}remove(n){if(l(this,N).delete(n),l(this,N).size===0&&this.resetModified(),typeof this.onAnnotationEditor=="function"){for(const u of l(this,N).values())if(u instanceof Y.AnnotationEditor)return;this.onAnnotationEditor(null)}}setValue(n,u){const y=l(this,N).get(n);let o=!1;if(y!==void 0)for(const[p,e]of Object.entries(u))y[p]!==e&&(o=!0,y[p]=e);else o=!0,l(this,N).set(n,u);o&&Zl(this,j,Md).call(this),u instanceof Y.AnnotationEditor&&typeof this.onAnnotationEditor=="function"&&this.onAnnotationEditor(u.constructor._type)}has(n){return l(this,N).has(n)}getAll(){return l(this,N).size>0?(0,s.objectFromMap)(l(this,N)):null}setAll(n){for(const[u,y]of Object.entries(n))this.setValue(u,y)}get size(){return l(this,N).size}resetModified(){l(this,D)&&(Al(this,D,!1),typeof this.onResetModified=="function"&&this.onResetModified())}get print(){return new C(this)}get serializable(){if(l(this,N).size===0)return r;const n=new Map,u=new B.MurmurHash3_64,y=[],o=Object.create(null);let p=!1;for(const[e,G]of l(this,N)){const W=G instanceof Y.AnnotationEditor?G.serialize(!1,o):G;W&&(n.set(e,W),u.update(`${e}:${JSON.stringify(W)}`),p||(p=!!W.bitmap))}if(p)for(const e of n.values())e.bitmap&&y.push(e.bitmap);return n.size>0?{map:n,hash:u.hexdigest(),transfers:y}:r}}D=new WeakMap,N=new WeakMap,j=new WeakSet,Md=function(){l(this,D)||(Al(this,D,!0),typeof this.onSetModified=="function"&&this.onSetModified())},m.AnnotationStorage=ZZ;class C extends ZZ{constructor(u){super();g(this,w,void 0);const{map:y,hash:o,transfers:p}=u.serializable,e=structuredClone(y,p?{transfer:p}:null);Al(this,w,{map:e,hash:o,transfers:p})}get print(){(0,s.unreachable)("Should not call PrintAnnotationStorage.print")}get serializable(){return l(this,w)}}w=new WeakMap,m.PrintAnnotationStorage=C},(H,m,O)=>{var C,D,N,j,k,w,L,n,u,y,o,p,e,G,W,jc,M,kc,x,Jc,Q,Fc,I,Nd,ql,ud,v,Yd,WZ,Uc,VZ,Xd;Object.defineProperty(m,"__esModule",{value:!0}),m.AnnotationEditor=void 0;var s=O(5),Y=O(1),B=O(6);const c=class c{constructor(d){g(this,W);g(this,M);g(this,Q);g(this,I);g(this,ql);g(this,v);g(this,WZ);g(this,VZ);g(this,C,"");g(this,D,!1);g(this,N,null);g(this,j,null);g(this,k,null);g(this,w,!1);g(this,L,null);g(this,n,this.focusin.bind(this));g(this,u,this.focusout.bind(this));g(this,y,!1);g(this,o,!1);g(this,p,!1);AZ(this,"_initialOptions",Object.create(null));AZ(this,"_uiManager",null);AZ(this,"_focusEventsAllowed",!0);AZ(this,"_l10nPromise",null);g(this,e,!1);g(this,G,c._zIndex++);this.constructor===c&&(0,Y.unreachable)("Cannot initialize AnnotationEditor."),this.parent=d.parent,this.id=d.id,this.width=this.height=null,this.pageIndex=d.parent.pageIndex,this.name=d.name,this.div=null,this._uiManager=d.uiManager,this.annotationElementId=null,this._willKeepAspectRatio=!1,this._initialOptions.isCentered=d.isCentered,this._structTreeParentId=null;const{rotation:a,rawDims:{pageWidth:h,pageHeight:V,pageX:J,pageY:E}}=this.parent.viewport;this.rotation=a,this.pageRotation=(360+a-this._uiManager.viewParameters.rotation)%360,this.pageDimensions=[h,V],this.pageTranslation=[J,E];const[_l,el]=this.parentDimensions;this.x=d.x/_l,this.y=d.y/el,this.isAttachedToDOM=!1,this.deleted=!1}get editorType(){return Object.getPrototypeOf(this).constructor._type}static get _defaultLineColor(){return(0,Y.shadow)(this,"_defaultLineColor",this._colorManager.getHexCode("CanvasText"))}static deleteAnnotationElement(d){const a=new ZZ({id:d.parent.getNextId(),parent:d.parent,uiManager:d._uiManager});a.annotationElementId=d.annotationElementId,a.deleted=!0,a._uiManager.addToAnnotationStorage(a)}static initialize(d,a=null){if(c._l10nPromise||(c._l10nPromise=new Map(["editor_alt_text_button_label","editor_alt_text_edit_button_label","editor_alt_text_decorative_tooltip"].map(V=>[V,d.get(V)]))),a!=null&&a.strings)for(const V of a.strings)c._l10nPromise.set(V,d.get(V));if(c._borderLineWidth!==-1)return;const h=getComputedStyle(document.documentElement);c._borderLineWidth=parseFloat(h.getPropertyValue("--outline-width"))||0}static updateDefaultParams(d,a){}static get defaultPropertiesToUpdate(){return[]}static isHandlingMimeForPasting(d){return!1}static paste(d,a){(0,Y.unreachable)("Not implemented")}get propertiesToUpdate(){return[]}get _isDraggable(){return l(this,e)}set _isDraggable(d){var a;Al(this,e,d),(a=this.div)==null||a.classList.toggle("draggable",d)}center(){const[d,a]=this.pageDimensions;switch(this.parentRotation){case 90:this.x-=this.height*a/(d*2),this.y+=this.width*d/(a*2);break;case 180:this.x+=this.width/2,this.y+=this.height/2;break;case 270:this.x+=this.height*a/(d*2),this.y-=this.width*d/(a*2);break;default:this.x-=this.width/2,this.y-=this.height/2;break}this.fixAndSetPosition()}addCommands(d){this._uiManager.addCommands(d)}get currentLayer(){return this._uiManager.currentLayer}setInBackground(){this.div.style.zIndex=0}setInForeground(){this.div.style.zIndex=l(this,G)}setParent(d){d!==null&&(this.pageIndex=d.pageIndex,this.pageDimensions=d.pageDimensions),this.parent=d}focusin(d){this._focusEventsAllowed&&(l(this,y)?Al(this,y,!1):this.parent.setSelected(this))}focusout(d){var h;if(!this._focusEventsAllowed||!this.isAttachedToDOM)return;const a=d.relatedTarget;a!=null&&a.closest(`#${this.id}`)||(d.preventDefault(),(h=this.parent)!=null&&h.isMultipleSelection||this.commitOrRemove())}commitOrRemove(){this.isEmpty()?this.remove():this.commit()}commit(){this.addToAnnotationStorage()}addToAnnotationStorage(){this._uiManager.addToAnnotationStorage(this)}setAt(d,a,h,V){const[J,E]=this.parentDimensions;[h,V]=this.screenToPageTranslation(h,V),this.x=(d+h)/J,this.y=(a+V)/E,this.fixAndSetPosition()}translate(d,a){Zl(this,W,jc).call(this,this.parentDimensions,d,a)}translateInPage(d,a){Zl(this,W,jc).call(this,this.pageDimensions,d,a),this.div.scrollIntoView({block:"nearest"})}drag(d,a){const[h,V]=this.parentDimensions;if(this.x+=d/h,this.y+=a/V,this.parent&&(this.x<0||this.x>1||this.y<0||this.y>1)){const{x:lZ,y:bZ}=this.div.getBoundingClientRect();this.parent.findNewParent(this,lZ,bZ)&&(this.x-=Math.floor(this.x),this.y-=Math.floor(this.y))}let{x:J,y:E}=this;const[_l,el]=Zl(this,M,kc).call(this);J+=_l,E+=el,this.div.style.left=`${(100*J).toFixed(2)}%`,this.div.style.top=`${(100*E).toFixed(2)}%`,this.div.scrollIntoView({block:"nearest"})}fixAndSetPosition(){const[d,a]=this.pageDimensions;let{x:h,y:V,width:J,height:E}=this;switch(J*=d,E*=a,h*=d,V*=a,this.rotation){case 0:h=Math.max(0,Math.min(d-J,h)),V=Math.max(0,Math.min(a-E,V));break;case 90:h=Math.max(0,Math.min(d-E,h)),V=Math.min(a,Math.max(J,V));break;case 180:h=Math.min(d,Math.max(J,h)),V=Math.min(a,Math.max(E,V));break;case 270:h=Math.min(d,Math.max(E,h)),V=Math.max(0,Math.min(a-J,V));break}this.x=h/=d,this.y=V/=a;const[_l,el]=Zl(this,M,kc).call(this);h+=_l,V+=el;const{style:lZ}=this.div;lZ.left=`${(100*h).toFixed(2)}%`,lZ.top=`${(100*V).toFixed(2)}%`,this.moveInDOM()}screenToPageTranslation(d,a){var h;return Zl(h=c,x,Jc).call(h,d,a,this.parentRotation)}pageTranslationToScreen(d,a){var h;return Zl(h=c,x,Jc).call(h,d,a,360-this.parentRotation)}get parentScale(){return this._uiManager.viewParameters.realScale}get parentRotation(){return(this._uiManager.viewParameters.rotation+this.pageRotation)%360}get parentDimensions(){const{parentScale:d,pageDimensions:[a,h]}=this,V=a*d,J=h*d;return Y.FeatureTest.isCSSRoundSupported?[Math.round(V),Math.round(J)]:[V,J]}setDims(d,a){var J;const[h,V]=this.parentDimensions;this.div.style.width=`${(100*d/h).toFixed(2)}%`,l(this,w)||(this.div.style.height=`${(100*a/V).toFixed(2)}%`),(J=l(this,N))==null||J.classList.toggle("small",d<c.SMALL_EDITOR_SIZE||a<c.SMALL_EDITOR_SIZE)}fixDims(){const{style:d}=this.div,{height:a,width:h}=d,V=h.endsWith("%"),J=!l(this,w)&&a.endsWith("%");if(V&&J)return;const[E,_l]=this.parentDimensions;V||(d.width=`${(100*parseFloat(h)/E).toFixed(2)}%`),!l(this,w)&&!J&&(d.height=`${(100*parseFloat(a)/_l).toFixed(2)}%`)}getInitialTranslation(){return[0,0]}async addAltTextButton(){if(l(this,N))return;const d=Al(this,N,document.createElement("button"));d.className="altText";const a=await c._l10nPromise.get("editor_alt_text_button_label");d.textContent=a,d.setAttribute("aria-label",a),d.tabIndex="0",d.addEventListener("contextmenu",B.noContextMenu),d.addEventListener("pointerdown",h=>h.stopPropagation()),d.addEventListener("click",h=>{h.preventDefault(),this._uiManager.editAltText(this)},{capture:!0}),d.addEventListener("keydown",h=>{h.target===d&&h.key==="Enter"&&(h.preventDefault(),this._uiManager.editAltText(this))}),Zl(this,WZ,Uc).call(this),this.div.append(d),c.SMALL_EDITOR_SIZE||(c.SMALL_EDITOR_SIZE=Math.min(128,Math.round(d.getBoundingClientRect().width*1.4)))}getClientDimensions(){return this.div.getBoundingClientRect()}get altTextData(){return{altText:l(this,C),decorative:l(this,D)}}set altTextData({altText:d,decorative:a}){l(this,C)===d&&l(this,D)===a||(Al(this,C,d),Al(this,D,a),Zl(this,WZ,Uc).call(this))}render(){this.div=document.createElement("div"),this.div.setAttribute("data-editor-rotation",(360-this.rotation)%360),this.div.className=this.name,this.div.setAttribute("id",this.id),this.div.setAttribute("tabIndex",0),this.setInForeground(),this.div.addEventListener("focusin",l(this,n)),this.div.addEventListener("focusout",l(this,u));const[d,a]=this.parentDimensions;this.parentRotation%180!==0&&(this.div.style.maxWidth=`${(100*a/d).toFixed(2)}%`,this.div.style.maxHeight=`${(100*d/a).toFixed(2)}%`);const[h,V]=this.getInitialTranslation();return this.translate(h,V),(0,s.bindEvents)(this,this.div,["pointerdown"]),this.div}pointerdown(d){const{isMac:a}=Y.FeatureTest.platform;if(d.button!==0||d.ctrlKey&&a){d.preventDefault();return}Al(this,y,!0),Zl(this,VZ,Xd).call(this,d)}moveInDOM(){var d;(d=this.parent)==null||d.moveEditorInDOM(this)}_setParentAndPosition(d,a,h){d.changeParent(this),this.x=a,this.y=h,this.fixAndSetPosition()}getRect(d,a){const h=this.parentScale,[V,J]=this.pageDimensions,[E,_l]=this.pageTranslation,el=d/h,lZ=a/h,bZ=this.x*V,NZ=this.y*J,iZ=this.width*V,pZ=this.height*J;switch(this.rotation){case 0:return[bZ+el+E,J-NZ-lZ-pZ+_l,bZ+el+iZ+E,J-NZ-lZ+_l];case 90:return[bZ+lZ+E,J-NZ+el+_l,bZ+lZ+pZ+E,J-NZ+el+iZ+_l];case 180:return[bZ-el-iZ+E,J-NZ+lZ+_l,bZ-el+E,J-NZ+lZ+pZ+_l];case 270:return[bZ-lZ-pZ+E,J-NZ-el-iZ+_l,bZ-lZ+E,J-NZ-el+_l];default:throw new Error("Invalid rotation")}}getRectInCurrentCoords(d,a){const[h,V,J,E]=d,_l=J-h,el=E-V;switch(this.rotation){case 0:return[h,a-E,_l,el];case 90:return[h,a-V,el,_l];case 180:return[J,a-V,_l,el];case 270:return[J,a-E,el,_l];default:throw new Error("Invalid rotation")}}onceAdded(){}isEmpty(){return!1}enableEditMode(){Al(this,p,!0)}disableEditMode(){Al(this,p,!1)}isInEditMode(){return l(this,p)}shouldGetKeyboardEvents(){return!1}needsToBeRebuilt(){return this.div&&!this.isAttachedToDOM}rebuild(){var d,a;(d=this.div)==null||d.addEventListener("focusin",l(this,n)),(a=this.div)==null||a.addEventListener("focusout",l(this,u))}serialize(d=!1,a=null){(0,Y.unreachable)("An editor must be serializable")}static deserialize(d,a,h){const V=new this.prototype.constructor({parent:a,id:a.getNextId(),uiManager:h});V.rotation=d.rotation;const[J,E]=V.pageDimensions,[_l,el,lZ,bZ]=V.getRectInCurrentCoords(d.rect,E);return V.x=_l/J,V.y=el/E,V.width=lZ/J,V.height=bZ/E,V}remove(){var d;this.div.removeEventListener("focusin",l(this,n)),this.div.removeEventListener("focusout",l(this,u)),this.isEmpty()||this.commit(),this.parent?this.parent.remove(this):this._uiManager.removeEditor(this),(d=l(this,N))==null||d.remove(),Al(this,N,null),Al(this,j,null)}get isResizable(){return!1}makeResizable(){this.isResizable&&(Zl(this,I,Nd).call(this),l(this,L).classList.remove("hidden"))}select(){var d;this.makeResizable(),(d=this.div)==null||d.classList.add("selectedEditor")}unselect(){var d,a,h;(d=l(this,L))==null||d.classList.add("hidden"),(a=this.div)==null||a.classList.remove("selectedEditor"),(h=this.div)!=null&&h.contains(document.activeElement)&&this._uiManager.currentLayer.div.focus()}updateParams(d,a){}disableEditing(){l(this,N)&&(l(this,N).hidden=!0)}enableEditing(){l(this,N)&&(l(this,N).hidden=!1)}enterInEditMode(){}get contentDiv(){return this.div}get isEditing(){return l(this,o)}set isEditing(d){Al(this,o,d),this.parent&&(d?(this.parent.setSelected(this),this.parent.setActiveEditor(this)):this.parent.setActiveEditor(null))}setAspectRatio(d,a){Al(this,w,!0);const h=d/a,{style:V}=this.div;V.aspectRatio=h,V.height="auto"}static get MIN_SIZE(){return 16}};C=new WeakMap,D=new WeakMap,N=new WeakMap,j=new WeakMap,k=new WeakMap,w=new WeakMap,L=new WeakMap,n=new WeakMap,u=new WeakMap,y=new WeakMap,o=new WeakMap,p=new WeakMap,e=new WeakMap,G=new WeakMap,W=new WeakSet,jc=function([d,a],h,V){[h,V]=this.screenToPageTranslation(h,V),this.x+=h/d,this.y+=V/a,this.fixAndSetPosition()},M=new WeakSet,kc=function(){const[d,a]=this.parentDimensions,{_borderLineWidth:h}=c,V=h/d,J=h/a;switch(this.rotation){case 90:return[-V,J];case 180:return[V,J];case 270:return[V,-J];default:return[-V,-J]}},x=new WeakSet,Jc=function(d,a,h){switch(h){case 90:return[a,-d];case 180:return[-d,-a];case 270:return[-a,d];default:return[d,a]}},Q=new WeakSet,Fc=function(d){switch(d){case 90:{const[a,h]=this.pageDimensions;return[0,-a/h,h/a,0]}case 180:return[-1,0,0,-1];case 270:{const[a,h]=this.pageDimensions;return[0,a/h,-h/a,0]}default:return[1,0,0,1]}},I=new WeakSet,Nd=function(){if(l(this,L))return;Al(this,L,document.createElement("div")),l(this,L).classList.add("resizers");const d=["topLeft","topRight","bottomRight","bottomLeft"];this._willKeepAspectRatio||d.push("topMiddle","middleRight","bottomMiddle","middleLeft");for(const a of d){const h=document.createElement("div");l(this,L).append(h),h.classList.add("resizer",a),h.addEventListener("pointerdown",Zl(this,ql,ud).bind(this,a)),h.addEventListener("contextmenu",B.noContextMenu)}this.div.prepend(l(this,L))},ql=new WeakSet,ud=function(d,a){a.preventDefault();const{isMac:h}=Y.FeatureTest.platform;if(a.button!==0||a.ctrlKey&&h)return;const V=Zl(this,v,Yd).bind(this,d),J=this._isDraggable;this._isDraggable=!1;const E={passive:!0,capture:!0};window.addEventListener("pointermove",V,E);const _l=this.x,el=this.y,lZ=this.width,bZ=this.height,NZ=this.parent.div.style.cursor,iZ=this.div.style.cursor;this.div.style.cursor=this.parent.div.style.cursor=window.getComputedStyle(a.target).cursor;const pZ=()=>{this._isDraggable=J,window.removeEventListener("pointerup",pZ),window.removeEventListener("blur",pZ),window.removeEventListener("pointermove",V,E),this.parent.div.style.cursor=NZ,this.div.style.cursor=iZ;const DZ=this.x,YZ=this.y,IZ=this.width,mZ=this.height;DZ===_l&&YZ===el&&IZ===lZ&&mZ===bZ||this.addCommands({cmd:()=>{this.width=IZ,this.height=mZ,this.x=DZ,this.y=YZ;const[Xl,Vl]=this.parentDimensions;this.setDims(Xl*IZ,Vl*mZ),this.fixAndSetPosition()},undo:()=>{this.width=lZ,this.height=bZ,this.x=_l,this.y=el;const[Xl,Vl]=this.parentDimensions;this.setDims(Xl*lZ,Vl*bZ),this.fixAndSetPosition()},mustExec:!0})};window.addEventListener("pointerup",pZ),window.addEventListener("blur",pZ)},v=new WeakSet,Yd=function(d,a){const[h,V]=this.parentDimensions,J=this.x,E=this.y,_l=this.width,el=this.height,lZ=c.MIN_SIZE/h,bZ=c.MIN_SIZE/V,NZ=aZ=>Math.round(aZ*1e4)/1e4,iZ=Zl(this,Q,Fc).call(this,this.rotation),pZ=(aZ,MZ)=>[iZ[0]*aZ+iZ[2]*MZ,iZ[1]*aZ+iZ[3]*MZ],DZ=Zl(this,Q,Fc).call(this,360-this.rotation),YZ=(aZ,MZ)=>[DZ[0]*aZ+DZ[2]*MZ,DZ[1]*aZ+DZ[3]*MZ];let IZ,mZ,Xl=!1,Vl=!1;switch(d){case"topLeft":Xl=!0,IZ=(aZ,MZ)=>[0,0],mZ=(aZ,MZ)=>[aZ,MZ];break;case"topMiddle":IZ=(aZ,MZ)=>[aZ/2,0],mZ=(aZ,MZ)=>[aZ/2,MZ];break;case"topRight":Xl=!0,IZ=(aZ,MZ)=>[aZ,0],mZ=(aZ,MZ)=>[0,MZ];break;case"middleRight":Vl=!0,IZ=(aZ,MZ)=>[aZ,MZ/2],mZ=(aZ,MZ)=>[0,MZ/2];break;case"bottomRight":Xl=!0,IZ=(aZ,MZ)=>[aZ,MZ],mZ=(aZ,MZ)=>[0,0];break;case"bottomMiddle":IZ=(aZ,MZ)=>[aZ/2,MZ],mZ=(aZ,MZ)=>[aZ/2,0];break;case"bottomLeft":Xl=!0,IZ=(aZ,MZ)=>[0,MZ],mZ=(aZ,MZ)=>[aZ,0];break;case"middleLeft":Vl=!0,IZ=(aZ,MZ)=>[0,MZ/2],mZ=(aZ,MZ)=>[aZ,MZ/2];break}const sZ=IZ(_l,el),XZ=mZ(_l,el);let TZ=pZ(...XZ);const jZ=NZ(J+TZ[0]),UZ=NZ(E+TZ[1]);let JZ=1,CZ=1,[gZ,FZ]=this.screenToPageTranslation(a.movementX,a.movementY);if([gZ,FZ]=YZ(gZ/h,FZ/V),Xl){const aZ=Math.hypot(_l,el);JZ=CZ=Math.max(Math.min(Math.hypot(XZ[0]-sZ[0]-gZ,XZ[1]-sZ[1]-FZ)/aZ,1/_l,1/el),lZ/_l,bZ/el)}else Vl?JZ=Math.max(lZ,Math.min(1,Math.abs(XZ[0]-sZ[0]-gZ)))/_l:CZ=Math.max(bZ,Math.min(1,Math.abs(XZ[1]-sZ[1]-FZ)))/el;const rZ=NZ(_l*JZ),dZ=NZ(el*CZ);TZ=pZ(...mZ(rZ,dZ));const Yl=jZ-TZ[0],cl=UZ-TZ[1];this.width=rZ,this.height=dZ,this.x=Yl,this.y=cl,this.setDims(h*rZ,V*dZ),this.fixAndSetPosition()},WZ=new WeakSet,Uc=async function(){var h;const d=l(this,N);if(!d)return;if(!l(this,C)&&!l(this,D)){d.classList.remove("done"),(h=l(this,j))==null||h.remove();return}c._l10nPromise.get("editor_alt_text_edit_button_label").then(V=>{d.setAttribute("aria-label",V)});let a=l(this,j);if(!a){Al(this,j,a=document.createElement("span")),a.className="tooltip",a.setAttribute("role","tooltip");const V=a.id=`alt-text-tooltip-${this.id}`;d.setAttribute("aria-describedby",V);const J=100;d.addEventListener("mouseenter",()=>{Al(this,k,setTimeout(()=>{Al(this,k,null),l(this,j).classList.add("show"),this._uiManager._eventBus.dispatch("reporttelemetry",{source:this,details:{type:"editing",subtype:this.editorType,data:{action:"alt_text_tooltip"}}})},J))}),d.addEventListener("mouseleave",()=>{var E;clearTimeout(l(this,k)),Al(this,k,null),(E=l(this,j))==null||E.classList.remove("show")})}d.classList.add("done"),a.innerText=l(this,D)?await c._l10nPromise.get("editor_alt_text_decorative_tooltip"):l(this,C),a.parentNode||d.append(a)},VZ=new WeakSet,Xd=function(d){if(!this._isDraggable)return;const a=this._uiManager.isSelected(this);this._uiManager.setUpDragSession();let h,V;a&&(h={passive:!0,capture:!0},V=E=>{const[_l,el]=this.screenToPageTranslation(E.movementX,E.movementY);this._uiManager.dragSelectedEditors(_l,el)},window.addEventListener("pointermove",V,h));const J=()=>{if(window.removeEventListener("pointerup",J),window.removeEventListener("blur",J),a&&window.removeEventListener("pointermove",V,h),Al(this,y,!1),!this._uiManager.endDragSession()){const{isMac:E}=Y.FeatureTest.platform;d.ctrlKey&&!E||d.shiftKey||d.metaKey&&E?this.parent.toggleSelected(this):this.parent.setSelected(this)}};window.addEventListener("pointerup",J),window.addEventListener("blur",J)},g(c,x),AZ(c,"_borderLineWidth",-1),AZ(c,"_colorManager",new s.ColorManager),AZ(c,"_zIndex",1),AZ(c,"SMALL_EDITOR_SIZE",0);let r=c;m.AnnotationEditor=r;class ZZ extends r{constructor(d){super(d),this.annotationElementId=d.annotationElementId,this.deleted=!0}serialize(){return{id:this.annotationElementId,deleted:!0,pageIndex:this.pageIndex}}}},(H,m,O)=>{var w,L,n,u,y,Oc,e,G,W,z,M,nd,T,Q,f,I,Wl,ql,cZ,v,tZ,WZ,nZ,VZ,R,c,b,d,a,h,V,J,E,_l,el,lZ,bZ,NZ,iZ,pZ,DZ,YZ,IZ,mZ,Xl,Vl,sZ,Td,TZ,Cc,UZ,gc,CZ,Tc,FZ,Kc,dZ,rc,cl,$Z,MZ,Gc,vZ,yd,uZ,Ld,yZ,Ec,xZ,ac,hZ,Qc;Object.defineProperty(m,"__esModule",{value:!0}),m.KeyboardManager=m.CommandManager=m.ColorManager=m.AnnotationEditorUIManager=void 0,m.bindEvents=B,m.opacityToHex=r;var s=O(1),Y=O(6);function B(F,Z,X){for(const U of X)Z.addEventListener(U,F[U].bind(F))}function r(F){return Math.round(Math.min(255,Math.max(1,255*F))).toString(16).padStart(2,"0")}class ZZ{constructor(){g(this,w,0)}getId(){return`${s.AnnotationEditorPrefix}${Wc(this,w)._++}`}}w=new WeakMap;const p=class p{constructor(){g(this,y);g(this,L,(0,s.getUuid)());g(this,n,0);g(this,u,null)}static get _isSVGFittingCanvas(){const Z='data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 1 1" width="1" height="1" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" style="fill:red;"/></svg>',U=new OffscreenCanvas(1,3).getContext("2d"),P=new Image;P.src=Z;const Ml=P.decode().then(()=>(U.drawImage(P,0,0,1,1,0,0,1,3),new Uint32Array(U.getImageData(0,0,1,1).data.buffer)[0]===0));return(0,s.shadow)(this,"_isSVGFittingCanvas",Ml)}async getFromFile(Z){const{lastModified:X,name:U,size:P,type:Ml}=Z;return Zl(this,y,Oc).call(this,`${X}_${U}_${P}_${Ml}`,Z)}async getFromUrl(Z){return Zl(this,y,Oc).call(this,Z,Z)}async getFromId(Z){l(this,u)||Al(this,u,new Map);const X=l(this,u).get(Z);return X?X.bitmap?(X.refCounter+=1,X):X.file?this.getFromFile(X.file):this.getFromUrl(X.url):null}getSvgUrl(Z){const X=l(this,u).get(Z);return X!=null&&X.isSvg?X.svgUrl:null}deleteId(Z){l(this,u)||Al(this,u,new Map);const X=l(this,u).get(Z);X&&(X.refCounter-=1,X.refCounter===0&&(X.bitmap=null))}isValidId(Z){return Z.startsWith(`image_${l(this,L)}_`)}};L=new WeakMap,n=new WeakMap,u=new WeakMap,y=new WeakSet,Oc=async function(Z,X){l(this,u)||Al(this,u,new Map);let U=l(this,u).get(Z);if(U===null)return null;if(U!=null&&U.bitmap)return U.refCounter+=1,U;try{U||(U={bitmap:null,id:`image_${l(this,L)}_${Wc(this,n)._++}`,refCounter:0,isSvg:!1});let P;if(typeof X=="string"){U.url=X;const Ml=await fetch(X);if(!Ml.ok)throw new Error(Ml.statusText);P=await Ml.blob()}else P=U.file=X;if(P.type==="image/svg+xml"){const Ml=p._isSVGFittingCanvas,$l=new FileReader,GZ=new Image,eZ=new Promise((LZ,OZ)=>{GZ.onload=()=>{U.bitmap=GZ,U.isSvg=!0,LZ()},$l.onload=async()=>{const zZ=U.svgUrl=$l.result;GZ.src=await Ml?`${zZ}#svgView(preserveAspectRatio(none))`:zZ},GZ.onerror=$l.onerror=OZ});$l.readAsDataURL(P),await eZ}else U.bitmap=await createImageBitmap(P);U.refCounter=1}catch(P){console.error(P),U=null}return l(this,u).set(Z,U),U&&l(this,u).set(U.id,U),U};let C=p;class D{constructor(Z=128){g(this,e,[]);g(this,G,!1);g(this,W,void 0);g(this,z,-1);Al(this,W,Z)}add({cmd:Z,undo:X,mustExec:U,type:P=NaN,overwriteIfSameType:Ml=!1,keepUndo:$l=!1}){if(U&&Z(),l(this,G))return;const GZ={cmd:Z,undo:X,type:P};if(l(this,z)===-1){l(this,e).length>0&&(l(this,e).length=0),Al(this,z,0),l(this,e).push(GZ);return}if(Ml&&l(this,e)[l(this,z)].type===P){$l&&(GZ.undo=l(this,e)[l(this,z)].undo),l(this,e)[l(this,z)]=GZ;return}const eZ=l(this,z)+1;eZ===l(this,W)?l(this,e).splice(0,1):(Al(this,z,eZ),eZ<l(this,e).length&&l(this,e).splice(eZ)),l(this,e).push(GZ)}undo(){l(this,z)!==-1&&(Al(this,G,!0),l(this,e)[l(this,z)].undo(),Al(this,G,!1),Al(this,z,l(this,z)-1))}redo(){l(this,z)<l(this,e).length-1&&(Al(this,z,l(this,z)+1),Al(this,G,!0),l(this,e)[l(this,z)].cmd(),Al(this,G,!1))}hasSomethingToUndo(){return l(this,z)!==-1}hasSomethingToRedo(){return l(this,z)<l(this,e).length-1}destroy(){Al(this,e,null)}}e=new WeakMap,G=new WeakMap,W=new WeakMap,z=new WeakMap,m.CommandManager=D;class N{constructor(Z){g(this,M);this.buffer=[],this.callbacks=new Map,this.allKeys=new Set;const{isMac:X}=s.FeatureTest.platform;for(const[U,P,Ml={}]of Z)for(const $l of U){const GZ=$l.startsWith("mac+");X&&GZ?(this.callbacks.set($l.slice(4),{callback:P,options:Ml}),this.allKeys.add($l.split("+").at(-1))):!X&&!GZ&&(this.callbacks.set($l,{callback:P,options:Ml}),this.allKeys.add($l.split("+").at(-1)))}}exec(Z,X){if(!this.allKeys.has(X.key))return;const U=this.callbacks.get(Zl(this,M,nd).call(this,X));if(!U)return;const{callback:P,options:{bubbles:Ml=!1,args:$l=[],checker:GZ=null}}=U;GZ&&!GZ(Z,X)||(P.bind(Z,...$l)(),Ml||(X.stopPropagation(),X.preventDefault()))}}M=new WeakSet,nd=function(Z){Z.altKey&&this.buffer.push("alt"),Z.ctrlKey&&this.buffer.push("ctrl"),Z.metaKey&&this.buffer.push("meta"),Z.shiftKey&&this.buffer.push("shift"),this.buffer.push(Z.key);const X=this.buffer.join("+");return this.buffer.length=0,X},m.KeyboardManager=N;const x=class x{get _colors(){const Z=new Map([["CanvasText",null],["Canvas",null]]);return(0,Y.getColorValues)(Z),(0,s.shadow)(this,"_colors",Z)}convert(Z){const X=(0,Y.getRGB)(Z);if(!window.matchMedia("(forced-colors: active)").matches)return X;for(const[U,P]of this._colors)if(P.every((Ml,$l)=>Ml===X[$l]))return x._colorsMapping.get(U);return X}getHexCode(Z){const X=this._colors.get(Z);return X?s.Util.makeHexColor(...X):Z}};AZ(x,"_colorsMapping",new Map([["CanvasText",[0,0,0]],["Canvas",[255,255,255]]]));let j=x;m.ColorManager=j;const RZ=class RZ{constructor(Z,X,U,P,Ml,$l){g(this,sZ);g(this,TZ);g(this,UZ);g(this,CZ);g(this,FZ);g(this,dZ);g(this,cl);g(this,MZ);g(this,vZ);g(this,uZ);g(this,yZ);g(this,xZ);g(this,hZ);g(this,T,null);g(this,Q,new Map);g(this,f,new Map);g(this,I,null);g(this,Wl,null);g(this,ql,new D);g(this,cZ,0);g(this,v,new Set);g(this,tZ,null);g(this,WZ,null);g(this,nZ,new Set);g(this,VZ,null);g(this,R,new ZZ);g(this,c,!1);g(this,b,!1);g(this,d,null);g(this,a,s.AnnotationEditorType.NONE);g(this,h,new Set);g(this,V,null);g(this,J,this.blur.bind(this));g(this,E,this.focus.bind(this));g(this,_l,this.copy.bind(this));g(this,el,this.cut.bind(this));g(this,lZ,this.paste.bind(this));g(this,bZ,this.keydown.bind(this));g(this,NZ,this.onEditingAction.bind(this));g(this,iZ,this.onPageChanging.bind(this));g(this,pZ,this.onScaleChanging.bind(this));g(this,DZ,this.onRotationChanging.bind(this));g(this,YZ,{isEditing:!1,isEmpty:!0,hasSomethingToUndo:!1,hasSomethingToRedo:!1,hasSelectedEditor:!1});g(this,IZ,[0,0]);g(this,mZ,null);g(this,Xl,null);g(this,Vl,null);Al(this,Xl,Z),Al(this,Vl,X),Al(this,I,U),this._eventBus=P,this._eventBus._on("editingaction",l(this,NZ)),this._eventBus._on("pagechanging",l(this,iZ)),this._eventBus._on("scalechanging",l(this,pZ)),this._eventBus._on("rotationchanging",l(this,DZ)),Al(this,Wl,Ml.annotationStorage),Al(this,VZ,Ml.filterFactory),Al(this,V,$l),this.viewParameters={realScale:Y.PixelsPerInch.PDF_TO_CSS_UNITS,rotation:0}}static get _keyboardManager(){const Z=RZ.prototype,X=Ml=>{const{activeElement:$l}=document;return $l&&l(Ml,Xl).contains($l)&&Ml.hasSomethingToControl()},U=this.TRANSLATE_SMALL,P=this.TRANSLATE_BIG;return(0,s.shadow)(this,"_keyboardManager",new N([[["ctrl+a","mac+meta+a"],Z.selectAll],[["ctrl+z","mac+meta+z"],Z.undo],[["ctrl+y","ctrl+shift+z","mac+meta+shift+z","ctrl+shift+Z","mac+meta+shift+Z"],Z.redo],[["Backspace","alt+Backspace","ctrl+Backspace","shift+Backspace","mac+Backspace","mac+alt+Backspace","mac+ctrl+Backspace","Delete","ctrl+Delete","shift+Delete","mac+Delete"],Z.delete],[["Escape","mac+Escape"],Z.unselectAll],[["ArrowLeft","mac+ArrowLeft"],Z.translateSelectedEditors,{args:[-U,0],checker:X}],[["ctrl+ArrowLeft","mac+shift+ArrowLeft"],Z.translateSelectedEditors,{args:[-P,0],checker:X}],[["ArrowRight","mac+ArrowRight"],Z.translateSelectedEditors,{args:[U,0],checker:X}],[["ctrl+ArrowRight","mac+shift+ArrowRight"],Z.translateSelectedEditors,{args:[P,0],checker:X}],[["ArrowUp","mac+ArrowUp"],Z.translateSelectedEditors,{args:[0,-U],checker:X}],[["ctrl+ArrowUp","mac+shift+ArrowUp"],Z.translateSelectedEditors,{args:[0,-P],checker:X}],[["ArrowDown","mac+ArrowDown"],Z.translateSelectedEditors,{args:[0,U],checker:X}],[["ctrl+ArrowDown","mac+shift+ArrowDown"],Z.translateSelectedEditors,{args:[0,P],checker:X}]]))}destroy(){Zl(this,CZ,Tc).call(this),Zl(this,TZ,Cc).call(this),this._eventBus._off("editingaction",l(this,NZ)),this._eventBus._off("pagechanging",l(this,iZ)),this._eventBus._off("scalechanging",l(this,pZ)),this._eventBus._off("rotationchanging",l(this,DZ));for(const Z of l(this,f).values())Z.destroy();l(this,f).clear(),l(this,Q).clear(),l(this,nZ).clear(),Al(this,T,null),l(this,h).clear(),l(this,ql).destroy(),l(this,I).destroy()}get hcmFilter(){return(0,s.shadow)(this,"hcmFilter",l(this,V)?l(this,VZ).addHCMFilter(l(this,V).foreground,l(this,V).background):"none")}get direction(){return(0,s.shadow)(this,"direction",getComputedStyle(l(this,Xl)).direction)}editAltText(Z){var X;(X=l(this,I))==null||X.editAltText(this,Z)}onPageChanging({pageNumber:Z}){Al(this,cZ,Z-1)}focusMainContainer(){l(this,Xl).focus()}findParent(Z,X){for(const U of l(this,f).values()){const{x:P,y:Ml,width:$l,height:GZ}=U.div.getBoundingClientRect();if(Z>=P&&Z<=P+$l&&X>=Ml&&X<=Ml+GZ)return U}return null}disableUserSelect(Z=!1){l(this,Vl).classList.toggle("noUserSelect",Z)}addShouldRescale(Z){l(this,nZ).add(Z)}removeShouldRescale(Z){l(this,nZ).delete(Z)}onScaleChanging({scale:Z}){this.commitOrRemove(),this.viewParameters.realScale=Z*Y.PixelsPerInch.PDF_TO_CSS_UNITS;for(const X of l(this,nZ))X.onScaleChanging()}onRotationChanging({pagesRotation:Z}){this.commitOrRemove(),this.viewParameters.rotation=Z}addToAnnotationStorage(Z){!Z.isEmpty()&&l(this,Wl)&&!l(this,Wl).has(Z.id)&&l(this,Wl).setValue(Z.id,Z)}blur(){if(!this.hasSelection)return;const{activeElement:Z}=document;for(const X of l(this,h))if(X.div.contains(Z)){Al(this,d,[X,Z]),X._focusEventsAllowed=!1;break}}focus(){if(!l(this,d))return;const[Z,X]=l(this,d);Al(this,d,null),X.addEventListener("focusin",()=>{Z._focusEventsAllowed=!0},{once:!0}),X.focus()}addEditListeners(){Zl(this,UZ,gc).call(this),Zl(this,FZ,Kc).call(this)}removeEditListeners(){Zl(this,CZ,Tc).call(this),Zl(this,dZ,rc).call(this)}copy(Z){var U;if(Z.preventDefault(),(U=l(this,T))==null||U.commitOrRemove(),!this.hasSelection)return;const X=[];for(const P of l(this,h)){const Ml=P.serialize(!0);Ml&&X.push(Ml)}X.length!==0&&Z.clipboardData.setData("application/pdfjs",JSON.stringify(X))}cut(Z){this.copy(Z),this.delete()}paste(Z){Z.preventDefault();const{clipboardData:X}=Z;for(const Ml of X.items)for(const $l of l(this,WZ))if($l.isHandlingMimeForPasting(Ml.type)){$l.paste(Ml,this.currentLayer);return}let U=X.getData("application/pdfjs");if(!U)return;try{U=JSON.parse(U)}catch(Ml){(0,s.warn)(`paste: "${Ml.message}".`);return}if(!Array.isArray(U))return;this.unselectAll();const P=this.currentLayer;try{const Ml=[];for(const eZ of U){const LZ=P.deserialize(eZ);if(!LZ)return;Ml.push(LZ)}const $l=()=>{for(const eZ of Ml)Zl(this,yZ,Ec).call(this,eZ);Zl(this,hZ,Qc).call(this,Ml)},GZ=()=>{for(const eZ of Ml)eZ.remove()};this.addCommands({cmd:$l,undo:GZ,mustExec:!0})}catch(Ml){(0,s.warn)(`paste: "${Ml.message}".`)}}keydown(Z){var X;(X=this.getActive())!=null&&X.shouldGetKeyboardEvents()||RZ._keyboardManager.exec(this,Z)}onEditingAction(Z){["undo","redo","delete","selectAll"].includes(Z.name)&&this[Z.name]()}setEditingState(Z){Z?(Zl(this,sZ,Td).call(this),Zl(this,UZ,gc).call(this),Zl(this,FZ,Kc).call(this),Zl(this,cl,$Z).call(this,{isEditing:l(this,a)!==s.AnnotationEditorType.NONE,isEmpty:Zl(this,xZ,ac).call(this),hasSomethingToUndo:l(this,ql).hasSomethingToUndo(),hasSomethingToRedo:l(this,ql).hasSomethingToRedo(),hasSelectedEditor:!1})):(Zl(this,TZ,Cc).call(this),Zl(this,CZ,Tc).call(this),Zl(this,dZ,rc).call(this),Zl(this,cl,$Z).call(this,{isEditing:!1}),this.disableUserSelect(!1))}registerEditorTypes(Z){if(!l(this,WZ)){Al(this,WZ,Z);for(const X of l(this,WZ))Zl(this,MZ,Gc).call(this,X.defaultPropertiesToUpdate)}}getId(){return l(this,R).getId()}get currentLayer(){return l(this,f).get(l(this,cZ))}getLayer(Z){return l(this,f).get(Z)}get currentPageIndex(){return l(this,cZ)}addLayer(Z){l(this,f).set(Z.pageIndex,Z),l(this,c)?Z.enable():Z.disable()}removeLayer(Z){l(this,f).delete(Z.pageIndex)}updateMode(Z,X=null){if(l(this,a)!==Z){if(Al(this,a,Z),Z===s.AnnotationEditorType.NONE){this.setEditingState(!1),Zl(this,uZ,Ld).call(this);return}this.setEditingState(!0),Zl(this,vZ,yd).call(this),this.unselectAll();for(const U of l(this,f).values())U.updateMode(Z);if(X){for(const U of l(this,Q).values())if(U.annotationElementId===X){this.setSelected(U),U.enterInEditMode();break}}}}updateToolbar(Z){Z!==l(this,a)&&this._eventBus.dispatch("switchannotationeditormode",{source:this,mode:Z})}updateParams(Z,X){if(l(this,WZ)){if(Z===s.AnnotationEditorParamsType.CREATE){this.currentLayer.addNewEditor(Z);return}for(const U of l(this,h))U.updateParams(Z,X);for(const U of l(this,WZ))U.updateDefaultParams(Z,X)}}enableWaiting(Z=!1){if(l(this,b)!==Z){Al(this,b,Z);for(const X of l(this,f).values())Z?X.disableClick():X.enableClick(),X.div.classList.toggle("waiting",Z)}}getEditors(Z){const X=[];for(const U of l(this,Q).values())U.pageIndex===Z&&X.push(U);return X}getEditor(Z){return l(this,Q).get(Z)}addEditor(Z){l(this,Q).set(Z.id,Z)}removeEditor(Z){var X;l(this,Q).delete(Z.id),this.unselect(Z),(!Z.annotationElementId||!l(this,v).has(Z.annotationElementId))&&((X=l(this,Wl))==null||X.remove(Z.id))}addDeletedAnnotationElement(Z){l(this,v).add(Z.annotationElementId),Z.deleted=!0}isDeletedAnnotationElement(Z){return l(this,v).has(Z)}removeDeletedAnnotationElement(Z){l(this,v).delete(Z.annotationElementId),Z.deleted=!1}setActiveEditor(Z){l(this,T)!==Z&&(Al(this,T,Z),Z&&Zl(this,MZ,Gc).call(this,Z.propertiesToUpdate))}toggleSelected(Z){if(l(this,h).has(Z)){l(this,h).delete(Z),Z.unselect(),Zl(this,cl,$Z).call(this,{hasSelectedEditor:this.hasSelection});return}l(this,h).add(Z),Z.select(),Zl(this,MZ,Gc).call(this,Z.propertiesToUpdate),Zl(this,cl,$Z).call(this,{hasSelectedEditor:!0})}setSelected(Z){for(const X of l(this,h))X!==Z&&X.unselect();l(this,h).clear(),l(this,h).add(Z),Z.select(),Zl(this,MZ,Gc).call(this,Z.propertiesToUpdate),Zl(this,cl,$Z).call(this,{hasSelectedEditor:!0})}isSelected(Z){return l(this,h).has(Z)}unselect(Z){Z.unselect(),l(this,h).delete(Z),Zl(this,cl,$Z).call(this,{hasSelectedEditor:this.hasSelection})}get hasSelection(){return l(this,h).size!==0}undo(){l(this,ql).undo(),Zl(this,cl,$Z).call(this,{hasSomethingToUndo:l(this,ql).hasSomethingToUndo(),hasSomethingToRedo:!0,isEmpty:Zl(this,xZ,ac).call(this)})}redo(){l(this,ql).redo(),Zl(this,cl,$Z).call(this,{hasSomethingToUndo:!0,hasSomethingToRedo:l(this,ql).hasSomethingToRedo(),isEmpty:Zl(this,xZ,ac).call(this)})}addCommands(Z){l(this,ql).add(Z),Zl(this,cl,$Z).call(this,{hasSomethingToUndo:!0,hasSomethingToRedo:!1,isEmpty:Zl(this,xZ,ac).call(this)})}delete(){if(this.commitOrRemove(),!this.hasSelection)return;const Z=[...l(this,h)],X=()=>{for(const P of Z)P.remove()},U=()=>{for(const P of Z)Zl(this,yZ,Ec).call(this,P)};this.addCommands({cmd:X,undo:U,mustExec:!0})}commitOrRemove(){var Z;(Z=l(this,T))==null||Z.commitOrRemove()}hasSomethingToControl(){return l(this,T)||this.hasSelection}selectAll(){for(const Z of l(this,h))Z.commit();Zl(this,hZ,Qc).call(this,l(this,Q).values())}unselectAll(){if(l(this,T)){l(this,T).commitOrRemove();return}if(this.hasSelection){for(const Z of l(this,h))Z.unselect();l(this,h).clear(),Zl(this,cl,$Z).call(this,{hasSelectedEditor:!1})}}translateSelectedEditors(Z,X,U=!1){if(U||this.commitOrRemove(),!this.hasSelection)return;l(this,IZ)[0]+=Z,l(this,IZ)[1]+=X;const[P,Ml]=l(this,IZ),$l=[...l(this,h)],GZ=1e3;l(this,mZ)&&clearTimeout(l(this,mZ)),Al(this,mZ,setTimeout(()=>{Al(this,mZ,null),l(this,IZ)[0]=l(this,IZ)[1]=0,this.addCommands({cmd:()=>{for(const eZ of $l)l(this,Q).has(eZ.id)&&eZ.translateInPage(P,Ml)},undo:()=>{for(const eZ of $l)l(this,Q).has(eZ.id)&&eZ.translateInPage(-P,-Ml)},mustExec:!1})},GZ));for(const eZ of $l)eZ.translateInPage(Z,X)}setUpDragSession(){if(this.hasSelection){this.disableUserSelect(!0),Al(this,tZ,new Map);for(const Z of l(this,h))l(this,tZ).set(Z,{savedX:Z.x,savedY:Z.y,savedPageIndex:Z.pageIndex,newX:0,newY:0,newPageIndex:-1})}}endDragSession(){if(!l(this,tZ))return!1;this.disableUserSelect(!1);const Z=l(this,tZ);Al(this,tZ,null);let X=!1;for(const[{x:P,y:Ml,pageIndex:$l},GZ]of Z)GZ.newX=P,GZ.newY=Ml,GZ.newPageIndex=$l,X||(X=P!==GZ.savedX||Ml!==GZ.savedY||$l!==GZ.savedPageIndex);if(!X)return!1;const U=(P,Ml,$l,GZ)=>{if(l(this,Q).has(P.id)){const eZ=l(this,f).get(GZ);eZ?P._setParentAndPosition(eZ,Ml,$l):(P.pageIndex=GZ,P.x=Ml,P.y=$l)}};return this.addCommands({cmd:()=>{for(const[P,{newX:Ml,newY:$l,newPageIndex:GZ}]of Z)U(P,Ml,$l,GZ)},undo:()=>{for(const[P,{savedX:Ml,savedY:$l,savedPageIndex:GZ}]of Z)U(P,Ml,$l,GZ)},mustExec:!0}),!0}dragSelectedEditors(Z,X){if(l(this,tZ))for(const U of l(this,tZ).keys())U.drag(Z,X)}rebuild(Z){if(Z.parent===null){const X=this.getLayer(Z.pageIndex);X?(X.changeParent(Z),X.addOrRebuild(Z)):(this.addEditor(Z),this.addToAnnotationStorage(Z),Z.rebuild())}else Z.parent.addOrRebuild(Z)}isActive(Z){return l(this,T)===Z}getActive(){return l(this,T)}getMode(){return l(this,a)}get imageManager(){return(0,s.shadow)(this,"imageManager",new C)}};T=new WeakMap,Q=new WeakMap,f=new WeakMap,I=new WeakMap,Wl=new WeakMap,ql=new WeakMap,cZ=new WeakMap,v=new WeakMap,tZ=new WeakMap,WZ=new WeakMap,nZ=new WeakMap,VZ=new WeakMap,R=new WeakMap,c=new WeakMap,b=new WeakMap,d=new WeakMap,a=new WeakMap,h=new WeakMap,V=new WeakMap,J=new WeakMap,E=new WeakMap,_l=new WeakMap,el=new WeakMap,lZ=new WeakMap,bZ=new WeakMap,NZ=new WeakMap,iZ=new WeakMap,pZ=new WeakMap,DZ=new WeakMap,YZ=new WeakMap,IZ=new WeakMap,mZ=new WeakMap,Xl=new WeakMap,Vl=new WeakMap,sZ=new WeakSet,Td=function(){window.addEventListener("focus",l(this,E)),window.addEventListener("blur",l(this,J))},TZ=new WeakSet,Cc=function(){window.removeEventListener("focus",l(this,E)),window.removeEventListener("blur",l(this,J))},UZ=new WeakSet,gc=function(){window.addEventListener("keydown",l(this,bZ),{capture:!0})},CZ=new WeakSet,Tc=function(){window.removeEventListener("keydown",l(this,bZ),{capture:!0})},FZ=new WeakSet,Kc=function(){document.addEventListener("copy",l(this,_l)),document.addEventListener("cut",l(this,el)),document.addEventListener("paste",l(this,lZ))},dZ=new WeakSet,rc=function(){document.removeEventListener("copy",l(this,_l)),document.removeEventListener("cut",l(this,el)),document.removeEventListener("paste",l(this,lZ))},cl=new WeakSet,$Z=function(Z){Object.entries(Z).some(([U,P])=>l(this,YZ)[U]!==P)&&this._eventBus.dispatch("annotationeditorstateschanged",{source:this,details:Object.assign(l(this,YZ),Z)})},MZ=new WeakSet,Gc=function(Z){this._eventBus.dispatch("annotationeditorparamschanged",{source:this,details:Z})},vZ=new WeakSet,yd=function(){if(!l(this,c)){Al(this,c,!0);for(const Z of l(this,f).values())Z.enable()}},uZ=new WeakSet,Ld=function(){if(this.unselectAll(),l(this,c)){Al(this,c,!1);for(const Z of l(this,f).values())Z.disable()}},yZ=new WeakSet,Ec=function(Z){const X=l(this,f).get(Z.pageIndex);X?X.addOrRebuild(Z):this.addEditor(Z)},xZ=new WeakSet,ac=function(){if(l(this,Q).size===0)return!0;if(l(this,Q).size===1)for(const Z of l(this,Q).values())return Z.isEmpty();return!1},hZ=new WeakSet,Qc=function(Z){l(this,h).clear();for(const X of Z)X.isEmpty()||(l(this,h).add(X),X.select());Zl(this,cl,$Z).call(this,{hasSelectedEditor:!0})},AZ(RZ,"TRANSLATE_SMALL",1),AZ(RZ,"TRANSLATE_BIG",10);let k=RZ;m.AnnotationEditorUIManager=k},(H,m,O)=>{var cZ,v,tZ,WZ,nZ,VZ,R,c,b,d,a,h,bc,J,sc,_l,Hc,lZ,yc,NZ,Lc,pZ,hc,YZ,Mc;Object.defineProperty(m,"__esModule",{value:!0}),m.StatTimer=m.RenderingCancelledException=m.PixelsPerInch=m.PageViewport=m.PDFDateString=m.DOMStandardFontDataFactory=m.DOMSVGFactory=m.DOMFilterFactory=m.DOMCanvasFactory=m.DOMCMapReaderFactory=void 0,m.deprecated=z,m.getColorValues=Q,m.getCurrentTransform=f,m.getCurrentTransformInverse=I,m.getFilenameFromUrl=y,m.getPdfFilenameFromUrl=o,m.getRGB=T,m.getXfaPageViewport=x,m.isDataScheme=n,m.isPdfFile=u,m.isValidFetchUrl=e,m.loadScript=W,m.noContextMenu=G,m.setLayerDimensions=Wl;var s=O(7),Y=O(1);const B="http://www.w3.org/2000/svg",ql=class ql{};AZ(ql,"CSS",96),AZ(ql,"PDF",72),AZ(ql,"PDF_TO_CSS_UNITS",ql.CSS/ql.PDF);let r=ql;m.PixelsPerInch=r;class ZZ extends s.BaseFilterFactory{constructor({docId:Vl,ownerDocument:sZ=globalThis.document}={}){super();g(this,h);g(this,J);g(this,_l);g(this,lZ);g(this,NZ);g(this,pZ);g(this,YZ);g(this,cZ,void 0);g(this,v,void 0);g(this,tZ,void 0);g(this,WZ,void 0);g(this,nZ,void 0);g(this,VZ,void 0);g(this,R,void 0);g(this,c,void 0);g(this,b,void 0);g(this,d,void 0);g(this,a,0);Al(this,tZ,Vl),Al(this,WZ,sZ)}addFilter(Vl){if(!Vl)return"none";let sZ=l(this,h,bc).get(Vl);if(sZ)return sZ;let XZ,TZ,jZ,UZ;if(Vl.length===1){const FZ=Vl[0],rZ=new Array(256);for(let dZ=0;dZ<256;dZ++)rZ[dZ]=FZ[dZ]/255;UZ=XZ=TZ=jZ=rZ.join(",")}else{const[FZ,rZ,dZ]=Vl,Yl=new Array(256),cl=new Array(256),aZ=new Array(256);for(let MZ=0;MZ<256;MZ++)Yl[MZ]=FZ[MZ]/255,cl[MZ]=rZ[MZ]/255,aZ[MZ]=dZ[MZ]/255;XZ=Yl.join(","),TZ=cl.join(","),jZ=aZ.join(","),UZ=`${XZ}${TZ}${jZ}`}if(sZ=l(this,h,bc).get(UZ),sZ)return l(this,h,bc).set(Vl,sZ),sZ;const JZ=`g_${l(this,tZ)}_transfer_map_${Wc(this,a)._++}`,CZ=`url(#${JZ})`;l(this,h,bc).set(Vl,CZ),l(this,h,bc).set(UZ,CZ);const gZ=Zl(this,lZ,yc).call(this,JZ);return Zl(this,pZ,hc).call(this,XZ,TZ,jZ,gZ),CZ}addHCMFilter(Vl,sZ){var rZ;const XZ=`${Vl}-${sZ}`;if(l(this,VZ)===XZ)return l(this,R);if(Al(this,VZ,XZ),Al(this,R,"none"),(rZ=l(this,nZ))==null||rZ.remove(),!Vl||!sZ)return l(this,R);const TZ=Zl(this,YZ,Mc).call(this,Vl);Vl=Y.Util.makeHexColor(...TZ);const jZ=Zl(this,YZ,Mc).call(this,sZ);if(sZ=Y.Util.makeHexColor(...jZ),l(this,J,sc).style.color="",Vl==="#000000"&&sZ==="#ffffff"||Vl===sZ)return l(this,R);const UZ=new Array(256);for(let dZ=0;dZ<=255;dZ++){const Yl=dZ/255;UZ[dZ]=Yl<=.03928?Yl/12.92:((Yl+.055)/1.055)**2.4}const JZ=UZ.join(","),CZ=`g_${l(this,tZ)}_hcm_filter`,gZ=Al(this,c,Zl(this,lZ,yc).call(this,CZ));Zl(this,pZ,hc).call(this,JZ,JZ,JZ,gZ),Zl(this,_l,Hc).call(this,gZ);const FZ=(dZ,Yl)=>{const cl=TZ[dZ]/255,aZ=jZ[dZ]/255,MZ=new Array(Yl+1);for(let BZ=0;BZ<=Yl;BZ++)MZ[BZ]=cl+BZ/Yl*(aZ-cl);return MZ.join(",")};return Zl(this,pZ,hc).call(this,FZ(0,5),FZ(1,5),FZ(2,5),gZ),Al(this,R,`url(#${CZ})`),l(this,R)}addHighlightHCMFilter(Vl,sZ,XZ,TZ){var aZ;const jZ=`${Vl}-${sZ}-${XZ}-${TZ}`;if(l(this,b)===jZ)return l(this,d);if(Al(this,b,jZ),Al(this,d,"none"),(aZ=l(this,c))==null||aZ.remove(),!Vl||!sZ)return l(this,d);const[UZ,JZ]=[Vl,sZ].map(Zl(this,YZ,Mc).bind(this));let CZ=Math.round(.2126*UZ[0]+.7152*UZ[1]+.0722*UZ[2]),gZ=Math.round(.2126*JZ[0]+.7152*JZ[1]+.0722*JZ[2]),[FZ,rZ]=[XZ,TZ].map(Zl(this,YZ,Mc).bind(this));gZ<CZ&&([CZ,gZ,FZ,rZ]=[gZ,CZ,rZ,FZ]),l(this,J,sc).style.color="";const dZ=(MZ,BZ,vZ)=>{const Nl=new Array(256),uZ=(gZ-CZ)/vZ,SZ=MZ/255,yZ=(BZ-MZ)/(255*vZ);let wZ=0;for(let xZ=0;xZ<=vZ;xZ++){const HZ=Math.round(CZ+xZ*uZ),hZ=SZ+xZ*yZ;for(let EZ=wZ;EZ<=HZ;EZ++)Nl[EZ]=hZ;wZ=HZ+1}for(let xZ=wZ;xZ<256;xZ++)Nl[xZ]=Nl[wZ-1];return Nl.join(",")},Yl=`g_${l(this,tZ)}_hcm_highlight_filter`,cl=Al(this,c,Zl(this,lZ,yc).call(this,Yl));return Zl(this,_l,Hc).call(this,cl),Zl(this,pZ,hc).call(this,dZ(FZ[0],rZ[0],5),dZ(FZ[1],rZ[1],5),dZ(FZ[2],rZ[2],5),cl),Al(this,d,`url(#${Yl})`),l(this,d)}destroy(Vl=!1){Vl&&(l(this,R)||l(this,d))||(l(this,v)&&(l(this,v).parentNode.parentNode.remove(),Al(this,v,null)),l(this,cZ)&&(l(this,cZ).clear(),Al(this,cZ,null)),Al(this,a,0))}}cZ=new WeakMap,v=new WeakMap,tZ=new WeakMap,WZ=new WeakMap,nZ=new WeakMap,VZ=new WeakMap,R=new WeakMap,c=new WeakMap,b=new WeakMap,d=new WeakMap,a=new WeakMap,h=new WeakSet,bc=function(){return l(this,cZ)||Al(this,cZ,new Map)},J=new WeakSet,sc=function(){if(!l(this,v)){const Vl=l(this,WZ).createElement("div"),{style:sZ}=Vl;sZ.visibility="hidden",sZ.contain="strict",sZ.width=sZ.height=0,sZ.position="absolute",sZ.top=sZ.left=0,sZ.zIndex=-1;const XZ=l(this,WZ).createElementNS(B,"svg");XZ.setAttribute("width",0),XZ.setAttribute("height",0),Al(this,v,l(this,WZ).createElementNS(B,"defs")),Vl.append(XZ),XZ.append(l(this,v)),l(this,WZ).body.append(Vl)}return l(this,v)},_l=new WeakSet,Hc=function(Vl){const sZ=l(this,WZ).createElementNS(B,"feColorMatrix");sZ.setAttribute("type","matrix"),sZ.setAttribute("values","0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"),Vl.append(sZ)},lZ=new WeakSet,yc=function(Vl){const sZ=l(this,WZ).createElementNS(B,"filter");return sZ.setAttribute("color-interpolation-filters","sRGB"),sZ.setAttribute("id",Vl),l(this,J,sc).append(sZ),sZ},NZ=new WeakSet,Lc=function(Vl,sZ,XZ){const TZ=l(this,WZ).createElementNS(B,sZ);TZ.setAttribute("type","discrete"),TZ.setAttribute("tableValues",XZ),Vl.append(TZ)},pZ=new WeakSet,hc=function(Vl,sZ,XZ,TZ){const jZ=l(this,WZ).createElementNS(B,"feComponentTransfer");TZ.append(jZ),Zl(this,NZ,Lc).call(this,jZ,"feFuncR",Vl),Zl(this,NZ,Lc).call(this,jZ,"feFuncG",sZ),Zl(this,NZ,Lc).call(this,jZ,"feFuncB",XZ)},YZ=new WeakSet,Mc=function(Vl){return l(this,J,sc).style.color=Vl,T(getComputedStyle(l(this,J,sc)).getPropertyValue("color"))},m.DOMFilterFactory=ZZ;class C extends s.BaseCanvasFactory{constructor({ownerDocument:Xl=globalThis.document}={}){super(),this._document=Xl}_createCanvas(Xl,Vl){const sZ=this._document.createElement("canvas");return sZ.width=Xl,sZ.height=Vl,sZ}}m.DOMCanvasFactory=C;async function D(mZ,Xl=!1){if(e(mZ,document.baseURI)){const Vl=await fetch(mZ);if(!Vl.ok)throw new Error(Vl.statusText);return Xl?new Uint8Array(await Vl.arrayBuffer()):(0,Y.stringToBytes)(await Vl.text())}return new Promise((Vl,sZ)=>{const XZ=new XMLHttpRequest;XZ.open("GET",mZ,!0),Xl&&(XZ.responseType="arraybuffer"),XZ.onreadystatechange=()=>{if(XZ.readyState===XMLHttpRequest.DONE){if(XZ.status===200||XZ.status===0){let TZ;if(Xl&&XZ.response?TZ=new Uint8Array(XZ.response):!Xl&&XZ.responseText&&(TZ=(0,Y.stringToBytes)(XZ.responseText)),TZ){Vl(TZ);return}}sZ(new Error(XZ.statusText))}},XZ.send(null)})}class N extends s.BaseCMapReaderFactory{_fetchData(Xl,Vl){return D(Xl,this.isCompressed).then(sZ=>({cMapData:sZ,compressionType:Vl}))}}m.DOMCMapReaderFactory=N;class j extends s.BaseStandardFontDataFactory{_fetchData(Xl){return D(Xl,!0)}}m.DOMStandardFontDataFactory=j;class k extends s.BaseSVGFactory{_createSVG(Xl){return document.createElementNS(B,Xl)}}m.DOMSVGFactory=k;class w{constructor({viewBox:Xl,scale:Vl,rotation:sZ,offsetX:XZ=0,offsetY:TZ=0,dontFlip:jZ=!1}){this.viewBox=Xl,this.scale=Vl,this.rotation=sZ,this.offsetX=XZ,this.offsetY=TZ;const UZ=(Xl[2]+Xl[0])/2,JZ=(Xl[3]+Xl[1])/2;let CZ,gZ,FZ,rZ;switch(sZ%=360,sZ<0&&(sZ+=360),sZ){case 180:CZ=-1,gZ=0,FZ=0,rZ=1;break;case 90:CZ=0,gZ=1,FZ=1,rZ=0;break;case 270:CZ=0,gZ=-1,FZ=-1,rZ=0;break;case 0:CZ=1,gZ=0,FZ=0,rZ=-1;break;default:throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.")}jZ&&(FZ=-FZ,rZ=-rZ);let dZ,Yl,cl,aZ;CZ===0?(dZ=Math.abs(JZ-Xl[1])*Vl+XZ,Yl=Math.abs(UZ-Xl[0])*Vl+TZ,cl=(Xl[3]-Xl[1])*Vl,aZ=(Xl[2]-Xl[0])*Vl):(dZ=Math.abs(UZ-Xl[0])*Vl+XZ,Yl=Math.abs(JZ-Xl[1])*Vl+TZ,cl=(Xl[2]-Xl[0])*Vl,aZ=(Xl[3]-Xl[1])*Vl),this.transform=[CZ*Vl,gZ*Vl,FZ*Vl,rZ*Vl,dZ-CZ*Vl*UZ-FZ*Vl*JZ,Yl-gZ*Vl*UZ-rZ*Vl*JZ],this.width=cl,this.height=aZ}get rawDims(){const{viewBox:Xl}=this;return(0,Y.shadow)(this,"rawDims",{pageWidth:Xl[2]-Xl[0],pageHeight:Xl[3]-Xl[1],pageX:Xl[0],pageY:Xl[1]})}clone({scale:Xl=this.scale,rotation:Vl=this.rotation,offsetX:sZ=this.offsetX,offsetY:XZ=this.offsetY,dontFlip:TZ=!1}={}){return new w({viewBox:this.viewBox.slice(),scale:Xl,rotation:Vl,offsetX:sZ,offsetY:XZ,dontFlip:TZ})}convertToViewportPoint(Xl,Vl){return Y.Util.applyTransform([Xl,Vl],this.transform)}convertToViewportRectangle(Xl){const Vl=Y.Util.applyTransform([Xl[0],Xl[1]],this.transform),sZ=Y.Util.applyTransform([Xl[2],Xl[3]],this.transform);return[Vl[0],Vl[1],sZ[0],sZ[1]]}convertToPdfPoint(Xl,Vl){return Y.Util.applyInverseTransform([Xl,Vl],this.transform)}}m.PageViewport=w;class L extends Y.BaseException{constructor(Xl,Vl=0){super(Xl,"RenderingCancelledException"),this.extraDelay=Vl}}m.RenderingCancelledException=L;function n(mZ){const Xl=mZ.length;let Vl=0;for(;Vl<Xl&&mZ[Vl].trim()==="";)Vl++;return mZ.substring(Vl,Vl+5).toLowerCase()==="data:"}function u(mZ){return typeof mZ=="string"&&/\.pdf$/i.test(mZ)}function y(mZ,Xl=!1){return Xl||([mZ]=mZ.split(/[#?]/,1)),mZ.substring(mZ.lastIndexOf("/")+1)}function o(mZ,Xl="document.pdf"){if(typeof mZ!="string")return Xl;if(n(mZ))return(0,Y.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'),Xl;const Vl=/^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/,sZ=/[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i,XZ=Vl.exec(mZ);let TZ=sZ.exec(XZ[1])||sZ.exec(XZ[2])||sZ.exec(XZ[3]);if(TZ&&(TZ=TZ[0],TZ.includes("%")))try{TZ=sZ.exec(decodeURIComponent(TZ))[0]}catch{}return TZ||Xl}class p{constructor(){AZ(this,"started",Object.create(null));AZ(this,"times",[])}time(Xl){Xl in this.started&&(0,Y.warn)(`Timer is already running for ${Xl}`),this.started[Xl]=Date.now()}timeEnd(Xl){Xl in this.started||(0,Y.warn)(`Timer has not been started for ${Xl}`),this.times.push({name:Xl,start:this.started[Xl],end:Date.now()}),delete this.started[Xl]}toString(){const Xl=[];let Vl=0;for(const{name:sZ}of this.times)Vl=Math.max(sZ.length,Vl);for(const{name:sZ,start:XZ,end:TZ}of this.times)Xl.push(`${sZ.padEnd(Vl)} ${TZ-XZ}ms
|
|
2
|
-
`);return Xl.join("")}}m.StatTimer=p;function e(mZ,Xl){try{const{protocol:Vl}=Xl?new URL(mZ,Xl):new URL(mZ);return Vl==="http:"||Vl==="https:"}catch{return!1}}function G(mZ){mZ.preventDefault()}function W(mZ,Xl=!1){return new Promise((Vl,sZ)=>{const XZ=document.createElement("script");XZ.src=mZ,XZ.onload=function(TZ){Xl&&XZ.remove(),Vl(TZ)},XZ.onerror=function(){sZ(new Error(`Cannot load script at: ${XZ.src}`))},(document.head||document.documentElement).append(XZ)})}function z(mZ){console.log("Deprecated API usage: "+mZ)}let M;class i{static toDateObject(Xl){if(!Xl||typeof Xl!="string")return null;M||(M=new RegExp("^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?"));const Vl=M.exec(Xl);if(!Vl)return null;const sZ=parseInt(Vl[1],10);let XZ=parseInt(Vl[2],10);XZ=XZ>=1&&XZ<=12?XZ-1:0;let TZ=parseInt(Vl[3],10);TZ=TZ>=1&&TZ<=31?TZ:1;let jZ=parseInt(Vl[4],10);jZ=jZ>=0&&jZ<=23?jZ:0;let UZ=parseInt(Vl[5],10);UZ=UZ>=0&&UZ<=59?UZ:0;let JZ=parseInt(Vl[6],10);JZ=JZ>=0&&JZ<=59?JZ:0;const CZ=Vl[7]||"Z";let gZ=parseInt(Vl[8],10);gZ=gZ>=0&&gZ<=23?gZ:0;let FZ=parseInt(Vl[9],10)||0;return FZ=FZ>=0&&FZ<=59?FZ:0,CZ==="-"?(jZ+=gZ,UZ+=FZ):CZ==="+"&&(jZ-=gZ,UZ-=FZ),new Date(Date.UTC(sZ,XZ,TZ,jZ,UZ,JZ))}}m.PDFDateString=i;function x(mZ,{scale:Xl=1,rotation:Vl=0}){const{width:sZ,height:XZ}=mZ.attributes.style,TZ=[0,0,parseInt(sZ),parseInt(XZ)];return new w({viewBox:TZ,scale:Xl,rotation:Vl})}function T(mZ){if(mZ.startsWith("#")){const Xl=parseInt(mZ.slice(1),16);return[(Xl&16711680)>>16,(Xl&65280)>>8,Xl&255]}return mZ.startsWith("rgb(")?mZ.slice(4,-1).split(",").map(Xl=>parseInt(Xl)):mZ.startsWith("rgba(")?mZ.slice(5,-1).split(",").map(Xl=>parseInt(Xl)).slice(0,3):((0,Y.warn)(`Not a valid color format: "${mZ}"`),[0,0,0])}function Q(mZ){const Xl=document.createElement("span");Xl.style.visibility="hidden",document.body.append(Xl);for(const Vl of mZ.keys()){Xl.style.color=Vl;const sZ=window.getComputedStyle(Xl).color;mZ.set(Vl,T(sZ))}Xl.remove()}function f(mZ){const{a:Xl,b:Vl,c:sZ,d:XZ,e:TZ,f:jZ}=mZ.getTransform();return[Xl,Vl,sZ,XZ,TZ,jZ]}function I(mZ){const{a:Xl,b:Vl,c:sZ,d:XZ,e:TZ,f:jZ}=mZ.getTransform().invertSelf();return[Xl,Vl,sZ,XZ,TZ,jZ]}function Wl(mZ,Xl,Vl=!1,sZ=!0){if(Xl instanceof w){const{pageWidth:XZ,pageHeight:TZ}=Xl.rawDims,{style:jZ}=mZ,UZ=Y.FeatureTest.isCSSRoundSupported,JZ=`var(--scale-factor) * ${XZ}px`,CZ=`var(--scale-factor) * ${TZ}px`,gZ=UZ?`round(${JZ}, 1px)`:`calc(${JZ})`,FZ=UZ?`round(${CZ}, 1px)`:`calc(${CZ})`;!Vl||Xl.rotation%180===0?(jZ.width=gZ,jZ.height=FZ):(jZ.width=FZ,jZ.height=gZ)}sZ&&mZ.setAttribute("data-main-rotation",Xl.rotation)}},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.BaseStandardFontDataFactory=m.BaseSVGFactory=m.BaseFilterFactory=m.BaseCanvasFactory=m.BaseCMapReaderFactory=void 0;var s=O(1);class Y{constructor(){this.constructor===Y&&(0,s.unreachable)("Cannot initialize BaseFilterFactory.")}addFilter(N){return"none"}addHCMFilter(N,j){return"none"}addHighlightHCMFilter(N,j,k,w){return"none"}destroy(N=!1){}}m.BaseFilterFactory=Y;class B{constructor(){this.constructor===B&&(0,s.unreachable)("Cannot initialize BaseCanvasFactory.")}create(N,j){if(N<=0||j<=0)throw new Error("Invalid canvas size");const k=this._createCanvas(N,j);return{canvas:k,context:k.getContext("2d")}}reset(N,j,k){if(!N.canvas)throw new Error("Canvas is not specified");if(j<=0||k<=0)throw new Error("Invalid canvas size");N.canvas.width=j,N.canvas.height=k}destroy(N){if(!N.canvas)throw new Error("Canvas is not specified");N.canvas.width=0,N.canvas.height=0,N.canvas=null,N.context=null}_createCanvas(N,j){(0,s.unreachable)("Abstract method `_createCanvas` called.")}}m.BaseCanvasFactory=B;class r{constructor({baseUrl:N=null,isCompressed:j=!0}){this.constructor===r&&(0,s.unreachable)("Cannot initialize BaseCMapReaderFactory."),this.baseUrl=N,this.isCompressed=j}async fetch({name:N}){if(!this.baseUrl)throw new Error('The CMap "baseUrl" parameter must be specified, ensure that the "cMapUrl" and "cMapPacked" API parameters are provided.');if(!N)throw new Error("CMap name must be specified.");const j=this.baseUrl+N+(this.isCompressed?".bcmap":""),k=this.isCompressed?s.CMapCompressionType.BINARY:s.CMapCompressionType.NONE;return this._fetchData(j,k).catch(w=>{throw new Error(`Unable to load ${this.isCompressed?"binary ":""}CMap at: ${j}`)})}_fetchData(N,j){(0,s.unreachable)("Abstract method `_fetchData` called.")}}m.BaseCMapReaderFactory=r;class ZZ{constructor({baseUrl:N=null}){this.constructor===ZZ&&(0,s.unreachable)("Cannot initialize BaseStandardFontDataFactory."),this.baseUrl=N}async fetch({filename:N}){if(!this.baseUrl)throw new Error('The standard font "baseUrl" parameter must be specified, ensure that the "standardFontDataUrl" API parameter is provided.');if(!N)throw new Error("Font filename must be specified.");const j=`${this.baseUrl}${N}`;return this._fetchData(j).catch(k=>{throw new Error(`Unable to load font data at: ${j}`)})}_fetchData(N){(0,s.unreachable)("Abstract method `_fetchData` called.")}}m.BaseStandardFontDataFactory=ZZ;class C{constructor(){this.constructor===C&&(0,s.unreachable)("Cannot initialize BaseSVGFactory.")}create(N,j,k=!1){if(N<=0||j<=0)throw new Error("Invalid SVG dimensions");const w=this._createSVG("svg:svg");return w.setAttribute("version","1.1"),k||(w.setAttribute("width",`${N}px`),w.setAttribute("height",`${j}px`)),w.setAttribute("preserveAspectRatio","none"),w.setAttribute("viewBox",`0 0 ${N} ${j}`),w}createElement(N){if(typeof N!="string")throw new Error("Invalid SVG element type");return this._createSVG(N)}_createSVG(N){(0,s.unreachable)("Abstract method `_createSVG` called.")}}m.BaseSVGFactory=C},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.MurmurHash3_64=void 0;var s=O(1);const Y=3285377520,B=4294901760,r=65535;class ZZ{constructor(D){this.h1=D?D&4294967295:Y,this.h2=D?D&4294967295:Y}update(D){let N,j;if(typeof D=="string"){N=new Uint8Array(D.length*2),j=0;for(let z=0,M=D.length;z<M;z++){const i=D.charCodeAt(z);i<=255?N[j++]=i:(N[j++]=i>>>8,N[j++]=i&255)}}else if((0,s.isArrayBuffer)(D))N=D.slice(),j=N.byteLength;else throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");const k=j>>2,w=j-k*4,L=new Uint32Array(N.buffer,0,k);let n=0,u=0,y=this.h1,o=this.h2;const p=3432918353,e=461845907,G=p&r,W=e&r;for(let z=0;z<k;z++)z&1?(n=L[z],n=n*p&B|n*G&r,n=n<<15|n>>>17,n=n*e&B|n*W&r,y^=n,y=y<<13|y>>>19,y=y*5+3864292196):(u=L[z],u=u*p&B|u*G&r,u=u<<15|u>>>17,u=u*e&B|u*W&r,o^=u,o=o<<13|o>>>19,o=o*5+3864292196);switch(n=0,w){case 3:n^=N[k*4+2]<<16;case 2:n^=N[k*4+1]<<8;case 1:n^=N[k*4],n=n*p&B|n*G&r,n=n<<15|n>>>17,n=n*e&B|n*W&r,k&1?y^=n:o^=n}this.h1=y,this.h2=o}hexdigest(){let D=this.h1,N=this.h2;return D^=N>>>1,D=D*3981806797&B|D*36045&r,N=N*4283543511&B|((N<<16|D>>>16)*2950163797&B)>>>16,D^=N>>>1,D=D*444984403&B|D*60499&r,N=N*3301882366&B|((N<<16|D>>>16)*3120437893&B)>>>16,D^=N>>>1,(D>>>0).toString(16).padStart(8,"0")+(N>>>0).toString(16).padStart(8,"0")}}m.MurmurHash3_64=ZZ},(H,m,O)=>{var r;Object.defineProperty(m,"__esModule",{value:!0}),m.FontLoader=m.FontFaceObject=void 0;var s=O(1);class Y{constructor({ownerDocument:C=globalThis.document,styleElement:D=null}){g(this,r,new Set);this._document=C,this.nativeFontFaces=new Set,this.styleElement=null,this.loadingRequests=[],this.loadTestFontId=0}addNativeFontFace(C){this.nativeFontFaces.add(C),this._document.fonts.add(C)}removeNativeFontFace(C){this.nativeFontFaces.delete(C),this._document.fonts.delete(C)}insertRule(C){this.styleElement||(this.styleElement=this._document.createElement("style"),this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement));const D=this.styleElement.sheet;D.insertRule(C,D.cssRules.length)}clear(){for(const C of this.nativeFontFaces)this._document.fonts.delete(C);this.nativeFontFaces.clear(),l(this,r).clear(),this.styleElement&&(this.styleElement.remove(),this.styleElement=null)}async loadSystemFont(C){if(!(!C||l(this,r).has(C.loadedName))){if((0,s.assert)(!this.disableFontFace,"loadSystemFont shouldn't be called when `disableFontFace` is set."),this.isFontLoadingAPISupported){const{loadedName:D,src:N,style:j}=C,k=new FontFace(D,N,j);this.addNativeFontFace(k);try{await k.load(),l(this,r).add(D)}catch{(0,s.warn)(`Cannot load system font: ${C.baseFontName}, installing it could help to improve PDF rendering.`),this.removeNativeFontFace(k)}return}(0,s.unreachable)("Not implemented: loadSystemFont without the Font Loading API.")}}async bind(C){if(C.attached||C.missingFile&&!C.systemFontInfo)return;if(C.attached=!0,C.systemFontInfo){await this.loadSystemFont(C.systemFontInfo);return}if(this.isFontLoadingAPISupported){const N=C.createNativeFontFace();if(N){this.addNativeFontFace(N);try{await N.loaded}catch(j){throw(0,s.warn)(`Failed to load font '${N.family}': '${j}'.`),C.disableFontFace=!0,j}}return}const D=C.createFontFaceRule();if(D){if(this.insertRule(D),this.isSyncFontLoadingSupported)return;await new Promise(N=>{const j=this._queueLoadingCallback(N);this._prepareFontLoadEvent(C,j)})}}get isFontLoadingAPISupported(){var D;const C=!!((D=this._document)!=null&&D.fonts);return(0,s.shadow)(this,"isFontLoadingAPISupported",C)}get isSyncFontLoadingSupported(){let C=!1;return(s.isNodeJS||typeof navigator<"u"&&/Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent))&&(C=!0),(0,s.shadow)(this,"isSyncFontLoadingSupported",C)}_queueLoadingCallback(C){function D(){for((0,s.assert)(!j.done,"completeRequest() cannot be called twice."),j.done=!0;N.length>0&&N[0].done;){const k=N.shift();setTimeout(k.callback,0)}}const{loadingRequests:N}=this,j={done:!1,complete:D,callback:C};return N.push(j),j}get _loadTestFont(){const C=atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");return(0,s.shadow)(this,"_loadTestFont",C)}_prepareFontLoadEvent(C,D){function N(T,Q){return T.charCodeAt(Q)<<24|T.charCodeAt(Q+1)<<16|T.charCodeAt(Q+2)<<8|T.charCodeAt(Q+3)&255}function j(T,Q,f,I){const Wl=T.substring(0,Q),ql=T.substring(Q+f);return Wl+I+ql}let k,w;const L=this._document.createElement("canvas");L.width=1,L.height=1;const n=L.getContext("2d");let u=0;function y(T,Q){if(++u>30){(0,s.warn)("Load test font never loaded."),Q();return}if(n.font="30px "+T,n.fillText(".",0,20),n.getImageData(0,0,1,1).data[3]>0){Q();return}setTimeout(y.bind(null,T,Q))}const o=`lt${Date.now()}${this.loadTestFontId++}`;let p=this._loadTestFont;p=j(p,976,o.length,o);const G=16,W=1482184792;let z=N(p,G);for(k=0,w=o.length-3;k<w;k+=4)z=z-W+N(o,k)|0;k<o.length&&(z=z-W+N(o+"XXX",k)|0),p=j(p,G,4,(0,s.string32)(z));const M=`url(data:font/opentype;base64,${btoa(p)});`,i=`@font-face {font-family:"${o}";src:${M}}`;this.insertRule(i);const x=this._document.createElement("div");x.style.visibility="hidden",x.style.width=x.style.height="10px",x.style.position="absolute",x.style.top=x.style.left="0px";for(const T of[C.loadedName,o]){const Q=this._document.createElement("span");Q.textContent="Hi",Q.style.fontFamily=T,x.append(Q)}this._document.body.append(x),y(o,()=>{x.remove(),D.complete()})}}r=new WeakMap,m.FontLoader=Y;class B{constructor(C,{isEvalSupported:D=!0,disableFontFace:N=!1,ignoreErrors:j=!1,inspectFont:k=null}){this.compiledGlyphs=Object.create(null);for(const w in C)this[w]=C[w];this.isEvalSupported=D!==!1,this.disableFontFace=N===!0,this.ignoreErrors=j===!0,this._inspectFont=k}createNativeFontFace(){var D;if(!this.data||this.disableFontFace)return null;let C;if(!this.cssFontInfo)C=new FontFace(this.loadedName,this.data,{});else{const N={weight:this.cssFontInfo.fontWeight};this.cssFontInfo.italicAngle&&(N.style=`oblique ${this.cssFontInfo.italicAngle}deg`),C=new FontFace(this.cssFontInfo.fontFamily,this.data,N)}return(D=this._inspectFont)==null||D.call(this,this),C}createFontFaceRule(){var j;if(!this.data||this.disableFontFace)return null;const C=(0,s.bytesToString)(this.data),D=`url(data:${this.mimetype};base64,${btoa(C)});`;let N;if(!this.cssFontInfo)N=`@font-face {font-family:"${this.loadedName}";src:${D}}`;else{let k=`font-weight: ${this.cssFontInfo.fontWeight};`;this.cssFontInfo.italicAngle&&(k+=`font-style: oblique ${this.cssFontInfo.italicAngle}deg;`),N=`@font-face {font-family:"${this.cssFontInfo.fontFamily}";${k}src:${D}}`}return(j=this._inspectFont)==null||j.call(this,this,D),N}getPathGenerator(C,D){if(this.compiledGlyphs[D]!==void 0)return this.compiledGlyphs[D];let N;try{N=C.get(this.loadedName+"_path_"+D)}catch(j){if(!this.ignoreErrors)throw j;return(0,s.warn)(`getPathGenerator - ignoring character: "${j}".`),this.compiledGlyphs[D]=function(k,w){}}if(this.isEvalSupported&&s.FeatureTest.isEvalSupported){const j=[];for(const k of N){const w=k.args!==void 0?k.args.join(","):"";j.push("c.",k.cmd,"(",w,`);
|
|
3
|
-
`)}return this.compiledGlyphs[D]=new Function("c","size",j.join(""))}return this.compiledGlyphs[D]=function(j,k){for(const w of N)w.cmd==="scale"&&(w.args=[k,-k]),j[w.cmd].apply(j,w.args)}}}m.FontFaceObject=B},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.NodeStandardFontDataFactory=m.NodeFilterFactory=m.NodeCanvasFactory=m.NodeCMapReaderFactory=void 0;var s=O(7);O(1);const Y=function(D){return new Promise((N,j)=>{require$$5.readFile(D,(w,L)=>{if(w||!L){j(new Error(w));return}N(new Uint8Array(L))})})};class B extends s.BaseFilterFactory{}m.NodeFilterFactory=B;class r extends s.BaseCanvasFactory{_createCanvas(N,j){return require$$5.createCanvas(N,j)}}m.NodeCanvasFactory=r;class ZZ extends s.BaseCMapReaderFactory{_fetchData(N,j){return Y(N).then(k=>({cMapData:k,compressionType:j}))}}m.NodeCMapReaderFactory=ZZ;class C extends s.BaseStandardFontDataFactory{_fetchData(N){return Y(N)}}m.NodeStandardFontDataFactory=C},(H,m,O)=>{var v,Pc,WZ,vc;Object.defineProperty(m,"__esModule",{value:!0}),m.CanvasGraphics=void 0;var s=O(1),Y=O(6),B=O(12),r=O(13);const ZZ=16,C=100,D=4096,N=15,j=10,k=1e3,w=16;function L(R,c){if(R._removeMirroring)throw new Error("Context is already forwarding operations.");R.__originalSave=R.save,R.__originalRestore=R.restore,R.__originalRotate=R.rotate,R.__originalScale=R.scale,R.__originalTranslate=R.translate,R.__originalTransform=R.transform,R.__originalSetTransform=R.setTransform,R.__originalResetTransform=R.resetTransform,R.__originalClip=R.clip,R.__originalMoveTo=R.moveTo,R.__originalLineTo=R.lineTo,R.__originalBezierCurveTo=R.bezierCurveTo,R.__originalRect=R.rect,R.__originalClosePath=R.closePath,R.__originalBeginPath=R.beginPath,R._removeMirroring=()=>{R.save=R.__originalSave,R.restore=R.__originalRestore,R.rotate=R.__originalRotate,R.scale=R.__originalScale,R.translate=R.__originalTranslate,R.transform=R.__originalTransform,R.setTransform=R.__originalSetTransform,R.resetTransform=R.__originalResetTransform,R.clip=R.__originalClip,R.moveTo=R.__originalMoveTo,R.lineTo=R.__originalLineTo,R.bezierCurveTo=R.__originalBezierCurveTo,R.rect=R.__originalRect,R.closePath=R.__originalClosePath,R.beginPath=R.__originalBeginPath,delete R._removeMirroring},R.save=function(){c.save(),this.__originalSave()},R.restore=function(){c.restore(),this.__originalRestore()},R.translate=function(d,a){c.translate(d,a),this.__originalTranslate(d,a)},R.scale=function(d,a){c.scale(d,a),this.__originalScale(d,a)},R.transform=function(d,a,h,V,J,E){c.transform(d,a,h,V,J,E),this.__originalTransform(d,a,h,V,J,E)},R.setTransform=function(d,a,h,V,J,E){c.setTransform(d,a,h,V,J,E),this.__originalSetTransform(d,a,h,V,J,E)},R.resetTransform=function(){c.resetTransform(),this.__originalResetTransform()},R.rotate=function(d){c.rotate(d),this.__originalRotate(d)},R.clip=function(d){c.clip(d),this.__originalClip(d)},R.moveTo=function(b,d){c.moveTo(b,d),this.__originalMoveTo(b,d)},R.lineTo=function(b,d){c.lineTo(b,d),this.__originalLineTo(b,d)},R.bezierCurveTo=function(b,d,a,h,V,J){c.bezierCurveTo(b,d,a,h,V,J),this.__originalBezierCurveTo(b,d,a,h,V,J)},R.rect=function(b,d,a,h){c.rect(b,d,a,h),this.__originalRect(b,d,a,h)},R.closePath=function(){c.closePath(),this.__originalClosePath()},R.beginPath=function(){c.beginPath(),this.__originalBeginPath()}}class n{constructor(c){this.canvasFactory=c,this.cache=Object.create(null)}getCanvas(c,b,d){let a;return this.cache[c]!==void 0?(a=this.cache[c],this.canvasFactory.reset(a,b,d)):(a=this.canvasFactory.create(b,d),this.cache[c]=a),a}delete(c){delete this.cache[c]}clear(){for(const c in this.cache){const b=this.cache[c];this.canvasFactory.destroy(b),delete this.cache[c]}}}function u(R,c,b,d,a,h,V,J,E,_l){const[el,lZ,bZ,NZ,iZ,pZ]=(0,Y.getCurrentTransform)(R);if(lZ===0&&bZ===0){const IZ=V*el+iZ,mZ=Math.round(IZ),Xl=J*NZ+pZ,Vl=Math.round(Xl),sZ=(V+E)*el+iZ,XZ=Math.abs(Math.round(sZ)-mZ)||1,TZ=(J+_l)*NZ+pZ,jZ=Math.abs(Math.round(TZ)-Vl)||1;return R.setTransform(Math.sign(el),0,0,Math.sign(NZ),mZ,Vl),R.drawImage(c,b,d,a,h,0,0,XZ,jZ),R.setTransform(el,lZ,bZ,NZ,iZ,pZ),[XZ,jZ]}if(el===0&&NZ===0){const IZ=J*bZ+iZ,mZ=Math.round(IZ),Xl=V*lZ+pZ,Vl=Math.round(Xl),sZ=(J+_l)*bZ+iZ,XZ=Math.abs(Math.round(sZ)-mZ)||1,TZ=(V+E)*lZ+pZ,jZ=Math.abs(Math.round(TZ)-Vl)||1;return R.setTransform(0,Math.sign(lZ),Math.sign(bZ),0,mZ,Vl),R.drawImage(c,b,d,a,h,0,0,jZ,XZ),R.setTransform(el,lZ,bZ,NZ,iZ,pZ),[jZ,XZ]}R.drawImage(c,b,d,a,h,V,J,E,_l);const DZ=Math.hypot(el,lZ),YZ=Math.hypot(bZ,NZ);return[DZ*E,YZ*_l]}function y(R){const{width:c,height:b}=R;if(c>k||b>k)return null;const d=1e3,a=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),h=c+1;let V=new Uint8Array(h*(b+1)),J,E,_l;const el=c+7&-8;let lZ=new Uint8Array(el*b),bZ=0;for(const YZ of R.data){let IZ=128;for(;IZ>0;)lZ[bZ++]=YZ&IZ?0:255,IZ>>=1}let NZ=0;for(bZ=0,lZ[bZ]!==0&&(V[0]=1,++NZ),E=1;E<c;E++)lZ[bZ]!==lZ[bZ+1]&&(V[E]=lZ[bZ]?2:1,++NZ),bZ++;for(lZ[bZ]!==0&&(V[E]=2,++NZ),J=1;J<b;J++){bZ=J*el,_l=J*h,lZ[bZ-el]!==lZ[bZ]&&(V[_l]=lZ[bZ]?1:8,++NZ);let YZ=(lZ[bZ]?4:0)+(lZ[bZ-el]?8:0);for(E=1;E<c;E++)YZ=(YZ>>2)+(lZ[bZ+1]?4:0)+(lZ[bZ-el+1]?8:0),a[YZ]&&(V[_l+E]=a[YZ],++NZ),bZ++;if(lZ[bZ-el]!==lZ[bZ]&&(V[_l+E]=lZ[bZ]?2:4,++NZ),NZ>d)return null}for(bZ=el*(b-1),_l=J*h,lZ[bZ]!==0&&(V[_l]=8,++NZ),E=1;E<c;E++)lZ[bZ]!==lZ[bZ+1]&&(V[_l+E]=lZ[bZ]?4:8,++NZ),bZ++;if(lZ[bZ]!==0&&(V[_l+E]=4,++NZ),NZ>d)return null;const iZ=new Int32Array([0,h,-1,0,-h,0,0,0,1]),pZ=new Path2D;for(J=0;NZ&&J<=b;J++){let YZ=J*h;const IZ=YZ+c;for(;YZ<IZ&&!V[YZ];)YZ++;if(YZ===IZ)continue;pZ.moveTo(YZ%h,J);const mZ=YZ;let Xl=V[YZ];do{const Vl=iZ[Xl];do YZ+=Vl;while(!V[YZ]);const sZ=V[YZ];sZ!==5&&sZ!==10?(Xl=sZ,V[YZ]=0):(Xl=sZ&51*Xl>>4,V[YZ]&=Xl>>2|Xl<<2),pZ.lineTo(YZ%h,YZ/h|0),V[YZ]||--NZ}while(mZ!==YZ);--J}return lZ=null,V=null,function(YZ){YZ.save(),YZ.scale(1/c,-1/b),YZ.translate(0,-b),YZ.fill(pZ),YZ.beginPath(),YZ.restore()}}class o{constructor(c,b){this.alphaIsShape=!1,this.fontSize=0,this.fontSizeScale=1,this.textMatrix=s.IDENTITY_MATRIX,this.textMatrixScale=1,this.fontMatrix=s.FONT_IDENTITY_MATRIX,this.leading=0,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRenderingMode=s.TextRenderingMode.FILL,this.textRise=0,this.fillColor="#000000",this.strokeColor="#000000",this.patternFill=!1,this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.activeSMask=null,this.transferMaps="none",this.startNewPathAndClipBox([0,0,c,b])}clone(){const c=Object.create(this);return c.clipBox=this.clipBox.slice(),c}setCurrentPoint(c,b){this.x=c,this.y=b}updatePathMinMax(c,b,d){[b,d]=s.Util.applyTransform([b,d],c),this.minX=Math.min(this.minX,b),this.minY=Math.min(this.minY,d),this.maxX=Math.max(this.maxX,b),this.maxY=Math.max(this.maxY,d)}updateRectMinMax(c,b){const d=s.Util.applyTransform(b,c),a=s.Util.applyTransform(b.slice(2),c);this.minX=Math.min(this.minX,d[0],a[0]),this.minY=Math.min(this.minY,d[1],a[1]),this.maxX=Math.max(this.maxX,d[0],a[0]),this.maxY=Math.max(this.maxY,d[1],a[1])}updateScalingPathMinMax(c,b){s.Util.scaleMinMax(c,b),this.minX=Math.min(this.minX,b[0]),this.maxX=Math.max(this.maxX,b[1]),this.minY=Math.min(this.minY,b[2]),this.maxY=Math.max(this.maxY,b[3])}updateCurvePathMinMax(c,b,d,a,h,V,J,E,_l,el){const lZ=s.Util.bezierBoundingBox(b,d,a,h,V,J,E,_l);if(el){el[0]=Math.min(el[0],lZ[0],lZ[2]),el[1]=Math.max(el[1],lZ[0],lZ[2]),el[2]=Math.min(el[2],lZ[1],lZ[3]),el[3]=Math.max(el[3],lZ[1],lZ[3]);return}this.updateRectMinMax(c,lZ)}getPathBoundingBox(c=B.PathType.FILL,b=null){const d=[this.minX,this.minY,this.maxX,this.maxY];if(c===B.PathType.STROKE){b||(0,s.unreachable)("Stroke bounding box must include transform.");const a=s.Util.singularValueDecompose2dScale(b),h=a[0]*this.lineWidth/2,V=a[1]*this.lineWidth/2;d[0]-=h,d[1]-=V,d[2]+=h,d[3]+=V}return d}updateClipFromPath(){const c=s.Util.intersect(this.clipBox,this.getPathBoundingBox());this.startNewPathAndClipBox(c||[0,0,0,0])}isEmptyClip(){return this.minX===1/0}startNewPathAndClipBox(c){this.clipBox=c,this.minX=1/0,this.minY=1/0,this.maxX=0,this.maxY=0}getClippedPathBoundingBox(c=B.PathType.FILL,b=null){return s.Util.intersect(this.clipBox,this.getPathBoundingBox(c,b))}}function p(R,c){if(typeof ImageData<"u"&&c instanceof ImageData){R.putImageData(c,0,0);return}const b=c.height,d=c.width,a=b%w,h=(b-a)/w,V=a===0?h:h+1,J=R.createImageData(d,w);let E=0,_l;const el=c.data,lZ=J.data;let bZ,NZ,iZ,pZ;if(c.kind===s.ImageKind.GRAYSCALE_1BPP){const DZ=el.byteLength,YZ=new Uint32Array(lZ.buffer,0,lZ.byteLength>>2),IZ=YZ.length,mZ=d+7>>3,Xl=4294967295,Vl=s.FeatureTest.isLittleEndian?4278190080:255;for(bZ=0;bZ<V;bZ++){for(iZ=bZ<h?w:a,_l=0,NZ=0;NZ<iZ;NZ++){const sZ=DZ-E;let XZ=0;const TZ=sZ>mZ?d:sZ*8-7,jZ=TZ&-8;let UZ=0,JZ=0;for(;XZ<jZ;XZ+=8)JZ=el[E++],YZ[_l++]=JZ&128?Xl:Vl,YZ[_l++]=JZ&64?Xl:Vl,YZ[_l++]=JZ&32?Xl:Vl,YZ[_l++]=JZ&16?Xl:Vl,YZ[_l++]=JZ&8?Xl:Vl,YZ[_l++]=JZ&4?Xl:Vl,YZ[_l++]=JZ&2?Xl:Vl,YZ[_l++]=JZ&1?Xl:Vl;for(;XZ<TZ;XZ++)UZ===0&&(JZ=el[E++],UZ=128),YZ[_l++]=JZ&UZ?Xl:Vl,UZ>>=1}for(;_l<IZ;)YZ[_l++]=0;R.putImageData(J,0,bZ*w)}}else if(c.kind===s.ImageKind.RGBA_32BPP){for(NZ=0,pZ=d*w*4,bZ=0;bZ<h;bZ++)lZ.set(el.subarray(E,E+pZ)),E+=pZ,R.putImageData(J,0,NZ),NZ+=w;bZ<V&&(pZ=d*a*4,lZ.set(el.subarray(E,E+pZ)),R.putImageData(J,0,NZ))}else if(c.kind===s.ImageKind.RGB_24BPP)for(iZ=w,pZ=d*iZ,bZ=0;bZ<V;bZ++){for(bZ>=h&&(iZ=a,pZ=d*iZ),_l=0,NZ=pZ;NZ--;)lZ[_l++]=el[E++],lZ[_l++]=el[E++],lZ[_l++]=el[E++],lZ[_l++]=255;R.putImageData(J,0,bZ*w)}else throw new Error(`bad image kind: ${c.kind}`)}function e(R,c){if(c.bitmap){R.drawImage(c.bitmap,0,0);return}const b=c.height,d=c.width,a=b%w,h=(b-a)/w,V=a===0?h:h+1,J=R.createImageData(d,w);let E=0;const _l=c.data,el=J.data;for(let lZ=0;lZ<V;lZ++){const bZ=lZ<h?w:a;({srcPos:E}=(0,r.convertBlackAndWhiteToRGBA)({src:_l,srcPos:E,dest:el,width:d,height:bZ,nonBlackColor:0})),R.putImageData(J,0,lZ*w)}}function G(R,c){const b=["strokeStyle","fillStyle","fillRule","globalAlpha","lineWidth","lineCap","lineJoin","miterLimit","globalCompositeOperation","font","filter"];for(const d of b)R[d]!==void 0&&(c[d]=R[d]);R.setLineDash!==void 0&&(c.setLineDash(R.getLineDash()),c.lineDashOffset=R.lineDashOffset)}function W(R){if(R.strokeStyle=R.fillStyle="#000000",R.fillRule="nonzero",R.globalAlpha=1,R.lineWidth=1,R.lineCap="butt",R.lineJoin="miter",R.miterLimit=10,R.globalCompositeOperation="source-over",R.font="10px sans-serif",R.setLineDash!==void 0&&(R.setLineDash([]),R.lineDashOffset=0),!s.isNodeJS){const{filter:c}=R;c!=="none"&&c!==""&&(R.filter="none")}}function z(R,c,b,d){const a=R.length;for(let h=3;h<a;h+=4){const V=R[h];if(V===0)R[h-3]=c,R[h-2]=b,R[h-1]=d;else if(V<255){const J=255-V;R[h-3]=R[h-3]*V+c*J>>8,R[h-2]=R[h-2]*V+b*J>>8,R[h-1]=R[h-1]*V+d*J>>8}}}function M(R,c,b){const d=R.length,a=1/255;for(let h=3;h<d;h+=4){const V=b?b[R[h]]:R[h];c[h]=c[h]*V*a|0}}function i(R,c,b){const d=R.length;for(let a=3;a<d;a+=4){const h=R[a-3]*77+R[a-2]*152+R[a-1]*28;c[a]=b?c[a]*b[h>>8]>>8:c[a]*h>>16}}function x(R,c,b,d,a,h,V,J,E,_l,el){const lZ=!!h,bZ=lZ?h[0]:0,NZ=lZ?h[1]:0,iZ=lZ?h[2]:0,pZ=a==="Luminosity"?i:M,YZ=Math.min(d,Math.ceil(1048576/b));for(let IZ=0;IZ<d;IZ+=YZ){const mZ=Math.min(YZ,d-IZ),Xl=R.getImageData(J-_l,IZ+(E-el),b,mZ),Vl=c.getImageData(J,IZ+E,b,mZ);lZ&&z(Xl.data,bZ,NZ,iZ),pZ(Xl.data,Vl.data,V),c.putImageData(Vl,J,IZ+E)}}function T(R,c,b,d){const a=d[0],h=d[1],V=d[2]-a,J=d[3]-h;V===0||J===0||(x(c.context,b,V,J,c.subtype,c.backdrop,c.transferMap,a,h,c.offsetX,c.offsetY),R.save(),R.globalAlpha=1,R.globalCompositeOperation="source-over",R.setTransform(1,0,0,1,0,0),R.drawImage(b.canvas,0,0),R.restore())}function Q(R,c){const b=s.Util.singularValueDecompose2dScale(R);b[0]=Math.fround(b[0]),b[1]=Math.fround(b[1]);const d=Math.fround((globalThis.devicePixelRatio||1)*Y.PixelsPerInch.PDF_TO_CSS_UNITS);return c!==void 0?c:b[0]<=d||b[1]<=d}const f=["butt","round","square"],I=["miter","round","bevel"],Wl={},ql={},VZ=class VZ{constructor(c,b,d,a,h,{optionalContentConfig:V,markedContentStack:J=null},E,_l){g(this,v);g(this,WZ);this.ctx=c,this.current=new o(this.ctx.canvas.width,this.ctx.canvas.height),this.stateStack=[],this.pendingClip=null,this.pendingEOFill=!1,this.res=null,this.xobjs=null,this.commonObjs=b,this.objs=d,this.canvasFactory=a,this.filterFactory=h,this.groupStack=[],this.processingType3=null,this.baseTransform=null,this.baseTransformStack=[],this.groupLevel=0,this.smaskStack=[],this.smaskCounter=0,this.tempSMask=null,this.suspendedCtx=null,this.contentVisible=!0,this.markedContentStack=J||[],this.optionalContentConfig=V,this.cachedCanvases=new n(this.canvasFactory),this.cachedPatterns=new Map,this.annotationCanvasMap=E,this.viewportScale=1,this.outputScaleX=1,this.outputScaleY=1,this.pageColors=_l,this._cachedScaleForStroking=[-1,0],this._cachedGetSinglePixelWidth=null,this._cachedBitmapsMap=new Map}getObject(c,b=null){return typeof c=="string"?c.startsWith("g_")?this.commonObjs.get(c):this.objs.get(c):b}beginDrawing({transform:c,viewport:b,transparency:d=!1,background:a=null}){const h=this.ctx.canvas.width,V=this.ctx.canvas.height,J=this.ctx.fillStyle;if(this.ctx.fillStyle=a||"#ffffff",this.ctx.fillRect(0,0,h,V),this.ctx.fillStyle=J,d){const E=this.cachedCanvases.getCanvas("transparent",h,V);this.compositeCtx=this.ctx,this.transparentCanvas=E.canvas,this.ctx=E.context,this.ctx.save(),this.ctx.transform(...(0,Y.getCurrentTransform)(this.compositeCtx))}this.ctx.save(),W(this.ctx),c&&(this.ctx.transform(...c),this.outputScaleX=c[0],this.outputScaleY=c[0]),this.ctx.transform(...b.transform),this.viewportScale=b.scale,this.baseTransform=(0,Y.getCurrentTransform)(this.ctx)}executeOperatorList(c,b,d,a){const h=c.argsArray,V=c.fnArray;let J=b||0;const E=h.length;if(E===J)return J;const _l=E-J>j&&typeof d=="function",el=_l?Date.now()+N:0;let lZ=0;const bZ=this.commonObjs,NZ=this.objs;let iZ;for(;;){if(a!==void 0&&J===a.nextBreakPoint)return a.breakIt(J,d),J;if(iZ=V[J],iZ!==s.OPS.dependency)this[iZ].apply(this,h[J]);else for(const pZ of h[J]){const DZ=pZ.startsWith("g_")?bZ:NZ;if(!DZ.has(pZ))return DZ.get(pZ,d),J}if(J++,J===E)return J;if(_l&&++lZ>j){if(Date.now()>el)return d(),J;lZ=0}}}endDrawing(){Zl(this,v,Pc).call(this),this.cachedCanvases.clear(),this.cachedPatterns.clear();for(const c of this._cachedBitmapsMap.values()){for(const b of c.values())typeof HTMLCanvasElement<"u"&&b instanceof HTMLCanvasElement&&(b.width=b.height=0);c.clear()}this._cachedBitmapsMap.clear(),Zl(this,WZ,vc).call(this)}_scaleImage(c,b){const d=c.width,a=c.height;let h=Math.max(Math.hypot(b[0],b[1]),1),V=Math.max(Math.hypot(b[2],b[3]),1),J=d,E=a,_l="prescale1",el,lZ;for(;h>2&&J>1||V>2&&E>1;){let bZ=J,NZ=E;h>2&&J>1&&(bZ=J>=16384?Math.floor(J/2)-1||1:Math.ceil(J/2),h/=J/bZ),V>2&&E>1&&(NZ=E>=16384?Math.floor(E/2)-1||1:Math.ceil(E)/2,V/=E/NZ),el=this.cachedCanvases.getCanvas(_l,bZ,NZ),lZ=el.context,lZ.clearRect(0,0,bZ,NZ),lZ.drawImage(c,0,0,J,E,0,0,bZ,NZ),c=el.canvas,J=bZ,E=NZ,_l=_l==="prescale1"?"prescale2":"prescale1"}return{img:c,paintWidth:J,paintHeight:E}}_createMaskCanvas(c){const b=this.ctx,{width:d,height:a}=c,h=this.current.fillColor,V=this.current.patternFill,J=(0,Y.getCurrentTransform)(b);let E,_l,el,lZ;if((c.bitmap||c.data)&&c.count>1){const XZ=c.bitmap||c.data.buffer;_l=JSON.stringify(V?J:[J.slice(0,4),h]),E=this._cachedBitmapsMap.get(XZ),E||(E=new Map,this._cachedBitmapsMap.set(XZ,E));const TZ=E.get(_l);if(TZ&&!V){const jZ=Math.round(Math.min(J[0],J[2])+J[4]),UZ=Math.round(Math.min(J[1],J[3])+J[5]);return{canvas:TZ,offsetX:jZ,offsetY:UZ}}el=TZ}el||(lZ=this.cachedCanvases.getCanvas("maskCanvas",d,a),e(lZ.context,c));let bZ=s.Util.transform(J,[1/d,0,0,-1/a,0,0]);bZ=s.Util.transform(bZ,[1,0,0,1,0,-a]);const NZ=s.Util.applyTransform([0,0],bZ),iZ=s.Util.applyTransform([d,a],bZ),pZ=s.Util.normalizeRect([NZ[0],NZ[1],iZ[0],iZ[1]]),DZ=Math.round(pZ[2]-pZ[0])||1,YZ=Math.round(pZ[3]-pZ[1])||1,IZ=this.cachedCanvases.getCanvas("fillCanvas",DZ,YZ),mZ=IZ.context,Xl=Math.min(NZ[0],iZ[0]),Vl=Math.min(NZ[1],iZ[1]);mZ.translate(-Xl,-Vl),mZ.transform(...bZ),el||(el=this._scaleImage(lZ.canvas,(0,Y.getCurrentTransformInverse)(mZ)),el=el.img,E&&V&&E.set(_l,el)),mZ.imageSmoothingEnabled=Q((0,Y.getCurrentTransform)(mZ),c.interpolate),u(mZ,el,0,0,el.width,el.height,0,0,d,a),mZ.globalCompositeOperation="source-in";const sZ=s.Util.transform((0,Y.getCurrentTransformInverse)(mZ),[1,0,0,1,-Xl,-Vl]);return mZ.fillStyle=V?h.getPattern(b,this,sZ,B.PathType.FILL):h,mZ.fillRect(0,0,d,a),E&&!V&&(this.cachedCanvases.delete("fillCanvas"),E.set(_l,IZ.canvas)),{canvas:IZ.canvas,offsetX:Math.round(Xl),offsetY:Math.round(Vl)}}setLineWidth(c){c!==this.current.lineWidth&&(this._cachedScaleForStroking[0]=-1),this.current.lineWidth=c,this.ctx.lineWidth=c}setLineCap(c){this.ctx.lineCap=f[c]}setLineJoin(c){this.ctx.lineJoin=I[c]}setMiterLimit(c){this.ctx.miterLimit=c}setDash(c,b){const d=this.ctx;d.setLineDash!==void 0&&(d.setLineDash(c),d.lineDashOffset=b)}setRenderingIntent(c){}setFlatness(c){}setGState(c){for(const[b,d]of c)switch(b){case"LW":this.setLineWidth(d);break;case"LC":this.setLineCap(d);break;case"LJ":this.setLineJoin(d);break;case"ML":this.setMiterLimit(d);break;case"D":this.setDash(d[0],d[1]);break;case"RI":this.setRenderingIntent(d);break;case"FL":this.setFlatness(d);break;case"Font":this.setFont(d[0],d[1]);break;case"CA":this.current.strokeAlpha=d;break;case"ca":this.current.fillAlpha=d,this.ctx.globalAlpha=d;break;case"BM":this.ctx.globalCompositeOperation=d;break;case"SMask":this.current.activeSMask=d?this.tempSMask:null,this.tempSMask=null,this.checkSMaskState();break;case"TR":this.ctx.filter=this.current.transferMaps=this.filterFactory.addFilter(d);break}}get inSMaskMode(){return!!this.suspendedCtx}checkSMaskState(){const c=this.inSMaskMode;this.current.activeSMask&&!c?this.beginSMaskMode():!this.current.activeSMask&&c&&this.endSMaskMode()}beginSMaskMode(){if(this.inSMaskMode)throw new Error("beginSMaskMode called while already in smask mode");const c=this.ctx.canvas.width,b=this.ctx.canvas.height,d="smaskGroupAt"+this.groupLevel,a=this.cachedCanvases.getCanvas(d,c,b);this.suspendedCtx=this.ctx,this.ctx=a.context;const h=this.ctx;h.setTransform(...(0,Y.getCurrentTransform)(this.suspendedCtx)),G(this.suspendedCtx,h),L(h,this.suspendedCtx),this.setGState([["BM","source-over"],["ca",1],["CA",1]])}endSMaskMode(){if(!this.inSMaskMode)throw new Error("endSMaskMode called while not in smask mode");this.ctx._removeMirroring(),G(this.ctx,this.suspendedCtx),this.ctx=this.suspendedCtx,this.suspendedCtx=null}compose(c){if(!this.current.activeSMask)return;c?(c[0]=Math.floor(c[0]),c[1]=Math.floor(c[1]),c[2]=Math.ceil(c[2]),c[3]=Math.ceil(c[3])):c=[0,0,this.ctx.canvas.width,this.ctx.canvas.height];const b=this.current.activeSMask,d=this.suspendedCtx;T(d,b,this.ctx,c),this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.ctx.restore()}save(){this.inSMaskMode?(G(this.ctx,this.suspendedCtx),this.suspendedCtx.save()):this.ctx.save();const c=this.current;this.stateStack.push(c),this.current=c.clone()}restore(){this.stateStack.length===0&&this.inSMaskMode&&this.endSMaskMode(),this.stateStack.length!==0&&(this.current=this.stateStack.pop(),this.inSMaskMode?(this.suspendedCtx.restore(),G(this.suspendedCtx,this.ctx)):this.ctx.restore(),this.checkSMaskState(),this.pendingClip=null,this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null)}transform(c,b,d,a,h,V){this.ctx.transform(c,b,d,a,h,V),this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null}constructPath(c,b,d){const a=this.ctx,h=this.current;let V=h.x,J=h.y,E,_l;const el=(0,Y.getCurrentTransform)(a),lZ=el[0]===0&&el[3]===0||el[1]===0&&el[2]===0,bZ=lZ?d.slice(0):null;for(let NZ=0,iZ=0,pZ=c.length;NZ<pZ;NZ++)switch(c[NZ]|0){case s.OPS.rectangle:V=b[iZ++],J=b[iZ++];const DZ=b[iZ++],YZ=b[iZ++],IZ=V+DZ,mZ=J+YZ;a.moveTo(V,J),DZ===0||YZ===0?a.lineTo(IZ,mZ):(a.lineTo(IZ,J),a.lineTo(IZ,mZ),a.lineTo(V,mZ)),lZ||h.updateRectMinMax(el,[V,J,IZ,mZ]),a.closePath();break;case s.OPS.moveTo:V=b[iZ++],J=b[iZ++],a.moveTo(V,J),lZ||h.updatePathMinMax(el,V,J);break;case s.OPS.lineTo:V=b[iZ++],J=b[iZ++],a.lineTo(V,J),lZ||h.updatePathMinMax(el,V,J);break;case s.OPS.curveTo:E=V,_l=J,V=b[iZ+4],J=b[iZ+5],a.bezierCurveTo(b[iZ],b[iZ+1],b[iZ+2],b[iZ+3],V,J),h.updateCurvePathMinMax(el,E,_l,b[iZ],b[iZ+1],b[iZ+2],b[iZ+3],V,J,bZ),iZ+=6;break;case s.OPS.curveTo2:E=V,_l=J,a.bezierCurveTo(V,J,b[iZ],b[iZ+1],b[iZ+2],b[iZ+3]),h.updateCurvePathMinMax(el,E,_l,V,J,b[iZ],b[iZ+1],b[iZ+2],b[iZ+3],bZ),V=b[iZ+2],J=b[iZ+3],iZ+=4;break;case s.OPS.curveTo3:E=V,_l=J,V=b[iZ+2],J=b[iZ+3],a.bezierCurveTo(b[iZ],b[iZ+1],V,J,V,J),h.updateCurvePathMinMax(el,E,_l,b[iZ],b[iZ+1],V,J,V,J,bZ),iZ+=4;break;case s.OPS.closePath:a.closePath();break}lZ&&h.updateScalingPathMinMax(el,bZ),h.setCurrentPoint(V,J)}closePath(){this.ctx.closePath()}stroke(c=!0){const b=this.ctx,d=this.current.strokeColor;b.globalAlpha=this.current.strokeAlpha,this.contentVisible&&(typeof d=="object"&&(d!=null&&d.getPattern)?(b.save(),b.strokeStyle=d.getPattern(b,this,(0,Y.getCurrentTransformInverse)(b),B.PathType.STROKE),this.rescaleAndStroke(!1),b.restore()):this.rescaleAndStroke(!0)),c&&this.consumePath(this.current.getClippedPathBoundingBox()),b.globalAlpha=this.current.fillAlpha}closeStroke(){this.closePath(),this.stroke()}fill(c=!0){const b=this.ctx,d=this.current.fillColor,a=this.current.patternFill;let h=!1;a&&(b.save(),b.fillStyle=d.getPattern(b,this,(0,Y.getCurrentTransformInverse)(b),B.PathType.FILL),h=!0);const V=this.current.getClippedPathBoundingBox();this.contentVisible&&V!==null&&(this.pendingEOFill?(b.fill("evenodd"),this.pendingEOFill=!1):b.fill()),h&&b.restore(),c&&this.consumePath(V)}eoFill(){this.pendingEOFill=!0,this.fill()}fillStroke(){this.fill(!1),this.stroke(!1),this.consumePath()}eoFillStroke(){this.pendingEOFill=!0,this.fillStroke()}closeFillStroke(){this.closePath(),this.fillStroke()}closeEOFillStroke(){this.pendingEOFill=!0,this.closePath(),this.fillStroke()}endPath(){this.consumePath()}clip(){this.pendingClip=Wl}eoClip(){this.pendingClip=ql}beginText(){this.current.textMatrix=s.IDENTITY_MATRIX,this.current.textMatrixScale=1,this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}endText(){const c=this.pendingTextPaths,b=this.ctx;if(c===void 0){b.beginPath();return}b.save(),b.beginPath();for(const d of c)b.setTransform(...d.transform),b.translate(d.x,d.y),d.addToPath(b,d.fontSize);b.restore(),b.clip(),b.beginPath(),delete this.pendingTextPaths}setCharSpacing(c){this.current.charSpacing=c}setWordSpacing(c){this.current.wordSpacing=c}setHScale(c){this.current.textHScale=c/100}setLeading(c){this.current.leading=-c}setFont(c,b){var el;const d=this.commonObjs.get(c),a=this.current;if(!d)throw new Error(`Can't find font for ${c}`);if(a.fontMatrix=d.fontMatrix||s.FONT_IDENTITY_MATRIX,(a.fontMatrix[0]===0||a.fontMatrix[3]===0)&&(0,s.warn)("Invalid font matrix for font "+c),b<0?(b=-b,a.fontDirection=-1):a.fontDirection=1,this.current.font=d,this.current.fontSize=b,d.isType3Font)return;const h=d.loadedName||"sans-serif",V=((el=d.systemFontInfo)==null?void 0:el.css)||`"${h}", ${d.fallbackName}`;let J="normal";d.black?J="900":d.bold&&(J="bold");const E=d.italic?"italic":"normal";let _l=b;b<ZZ?_l=ZZ:b>C&&(_l=C),this.current.fontSizeScale=b/_l,this.ctx.font=`${E} ${J} ${_l}px ${V}`}setTextRenderingMode(c){this.current.textRenderingMode=c}setTextRise(c){this.current.textRise=c}moveText(c,b){this.current.x=this.current.lineX+=c,this.current.y=this.current.lineY+=b}setLeadingMoveText(c,b){this.setLeading(-b),this.moveText(c,b)}setTextMatrix(c,b,d,a,h,V){this.current.textMatrix=[c,b,d,a,h,V],this.current.textMatrixScale=Math.hypot(c,b),this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}nextLine(){this.moveText(0,this.current.leading)}paintChar(c,b,d,a){const h=this.ctx,V=this.current,J=V.font,E=V.textRenderingMode,_l=V.fontSize/V.fontSizeScale,el=E&s.TextRenderingMode.FILL_STROKE_MASK,lZ=!!(E&s.TextRenderingMode.ADD_TO_PATH_FLAG),bZ=V.patternFill&&!J.missingFile;let NZ;(J.disableFontFace||lZ||bZ)&&(NZ=J.getPathGenerator(this.commonObjs,c)),J.disableFontFace||bZ?(h.save(),h.translate(b,d),h.beginPath(),NZ(h,_l),a&&h.setTransform(...a),(el===s.TextRenderingMode.FILL||el===s.TextRenderingMode.FILL_STROKE)&&h.fill(),(el===s.TextRenderingMode.STROKE||el===s.TextRenderingMode.FILL_STROKE)&&h.stroke(),h.restore()):((el===s.TextRenderingMode.FILL||el===s.TextRenderingMode.FILL_STROKE)&&h.fillText(c,b,d),(el===s.TextRenderingMode.STROKE||el===s.TextRenderingMode.FILL_STROKE)&&h.strokeText(c,b,d)),lZ&&(this.pendingTextPaths||(this.pendingTextPaths=[])).push({transform:(0,Y.getCurrentTransform)(h),x:b,y:d,fontSize:_l,addToPath:NZ})}get isFontSubpixelAAEnabled(){const{context:c}=this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled",10,10);c.scale(1.5,1),c.fillText("I",0,10);const b=c.getImageData(0,0,10,10).data;let d=!1;for(let a=3;a<b.length;a+=4)if(b[a]>0&&b[a]<255){d=!0;break}return(0,s.shadow)(this,"isFontSubpixelAAEnabled",d)}showText(c){const b=this.current,d=b.font;if(d.isType3Font)return this.showType3Text(c);const a=b.fontSize;if(a===0)return;const h=this.ctx,V=b.fontSizeScale,J=b.charSpacing,E=b.wordSpacing,_l=b.fontDirection,el=b.textHScale*_l,lZ=c.length,bZ=d.vertical,NZ=bZ?1:-1,iZ=d.defaultVMetrics,pZ=a*b.fontMatrix[0],DZ=b.textRenderingMode===s.TextRenderingMode.FILL&&!d.disableFontFace&&!b.patternFill;h.save(),h.transform(...b.textMatrix),h.translate(b.x,b.y+b.textRise),_l>0?h.scale(el,-1):h.scale(el,1);let YZ;if(b.patternFill){h.save();const sZ=b.fillColor.getPattern(h,this,(0,Y.getCurrentTransformInverse)(h),B.PathType.FILL);YZ=(0,Y.getCurrentTransform)(h),h.restore(),h.fillStyle=sZ}let IZ=b.lineWidth;const mZ=b.textMatrixScale;if(mZ===0||IZ===0){const sZ=b.textRenderingMode&s.TextRenderingMode.FILL_STROKE_MASK;(sZ===s.TextRenderingMode.STROKE||sZ===s.TextRenderingMode.FILL_STROKE)&&(IZ=this.getSinglePixelWidth())}else IZ/=mZ;if(V!==1&&(h.scale(V,V),IZ/=V),h.lineWidth=IZ,d.isInvalidPDFjsFont){const sZ=[];let XZ=0;for(const TZ of c)sZ.push(TZ.unicode),XZ+=TZ.width;h.fillText(sZ.join(""),0,0),b.x+=XZ*pZ*el,h.restore(),this.compose();return}let Xl=0,Vl;for(Vl=0;Vl<lZ;++Vl){const sZ=c[Vl];if(typeof sZ=="number"){Xl+=NZ*sZ*a/1e3;continue}let XZ=!1;const TZ=(sZ.isSpace?E:0)+J,jZ=sZ.fontChar,UZ=sZ.accent;let JZ,CZ,gZ=sZ.width;if(bZ){const rZ=sZ.vmetric||iZ,dZ=-(sZ.vmetric?rZ[1]:gZ*.5)*pZ,Yl=rZ[2]*pZ;gZ=rZ?-rZ[0]:gZ,JZ=dZ/V,CZ=(Xl+Yl)/V}else JZ=Xl/V,CZ=0;if(d.remeasure&&gZ>0){const rZ=h.measureText(jZ).width*1e3/a*V;if(gZ<rZ&&this.isFontSubpixelAAEnabled){const dZ=gZ/rZ;XZ=!0,h.save(),h.scale(dZ,1),JZ/=dZ}else gZ!==rZ&&(JZ+=(gZ-rZ)/2e3*a/V)}if(this.contentVisible&&(sZ.isInFont||d.missingFile)){if(DZ&&!UZ)h.fillText(jZ,JZ,CZ);else if(this.paintChar(jZ,JZ,CZ,YZ),UZ){const rZ=JZ+a*UZ.offset.x/V,dZ=CZ-a*UZ.offset.y/V;this.paintChar(UZ.fontChar,rZ,dZ,YZ)}}const FZ=bZ?gZ*pZ-TZ*_l:gZ*pZ+TZ*_l;Xl+=FZ,XZ&&h.restore()}bZ?b.y-=Xl:b.x+=Xl*el,h.restore(),this.compose()}showType3Text(c){const b=this.ctx,d=this.current,a=d.font,h=d.fontSize,V=d.fontDirection,J=a.vertical?1:-1,E=d.charSpacing,_l=d.wordSpacing,el=d.textHScale*V,lZ=d.fontMatrix||s.FONT_IDENTITY_MATRIX,bZ=c.length,NZ=d.textRenderingMode===s.TextRenderingMode.INVISIBLE;let iZ,pZ,DZ,YZ;if(!(NZ||h===0)){for(this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null,b.save(),b.transform(...d.textMatrix),b.translate(d.x,d.y),b.scale(el,V),iZ=0;iZ<bZ;++iZ){if(pZ=c[iZ],typeof pZ=="number"){YZ=J*pZ*h/1e3,this.ctx.translate(YZ,0),d.x+=YZ*el;continue}const IZ=(pZ.isSpace?_l:0)+E,mZ=a.charProcOperatorList[pZ.operatorListId];if(!mZ){(0,s.warn)(`Type3 character "${pZ.operatorListId}" is not available.`);continue}this.contentVisible&&(this.processingType3=pZ,this.save(),b.scale(h,h),b.transform(...lZ),this.executeOperatorList(mZ),this.restore()),DZ=s.Util.applyTransform([pZ.width,0],lZ)[0]*h+IZ,b.translate(DZ,0),d.x+=DZ*el}b.restore(),this.processingType3=null}}setCharWidth(c,b){}setCharWidthAndBounds(c,b,d,a,h,V){this.ctx.rect(d,a,h-d,V-a),this.ctx.clip(),this.endPath()}getColorN_Pattern(c){let b;if(c[0]==="TilingPattern"){const d=c[1],a=this.baseTransform||(0,Y.getCurrentTransform)(this.ctx),h={createCanvasGraphics:V=>new VZ(V,this.commonObjs,this.objs,this.canvasFactory,this.filterFactory,{optionalContentConfig:this.optionalContentConfig,markedContentStack:this.markedContentStack})};b=new B.TilingPattern(c,d,this.ctx,h,a)}else b=this._getPattern(c[1],c[2]);return b}setStrokeColorN(){this.current.strokeColor=this.getColorN_Pattern(arguments)}setFillColorN(){this.current.fillColor=this.getColorN_Pattern(arguments),this.current.patternFill=!0}setStrokeRGBColor(c,b,d){const a=s.Util.makeHexColor(c,b,d);this.ctx.strokeStyle=a,this.current.strokeColor=a}setFillRGBColor(c,b,d){const a=s.Util.makeHexColor(c,b,d);this.ctx.fillStyle=a,this.current.fillColor=a,this.current.patternFill=!1}_getPattern(c,b=null){let d;return this.cachedPatterns.has(c)?d=this.cachedPatterns.get(c):(d=(0,B.getShadingPattern)(this.getObject(c)),this.cachedPatterns.set(c,d)),b&&(d.matrix=b),d}shadingFill(c){if(!this.contentVisible)return;const b=this.ctx;this.save();const d=this._getPattern(c);b.fillStyle=d.getPattern(b,this,(0,Y.getCurrentTransformInverse)(b),B.PathType.SHADING);const a=(0,Y.getCurrentTransformInverse)(b);if(a){const{width:h,height:V}=b.canvas,[J,E,_l,el]=s.Util.getAxialAlignedBoundingBox([0,0,h,V],a);this.ctx.fillRect(J,E,_l-J,el-E)}else this.ctx.fillRect(-1e10,-1e10,2e10,2e10);this.compose(this.current.getClippedPathBoundingBox()),this.restore()}beginInlineImage(){(0,s.unreachable)("Should not call beginInlineImage")}beginImageData(){(0,s.unreachable)("Should not call beginImageData")}paintFormXObjectBegin(c,b){if(this.contentVisible&&(this.save(),this.baseTransformStack.push(this.baseTransform),Array.isArray(c)&&c.length===6&&this.transform(...c),this.baseTransform=(0,Y.getCurrentTransform)(this.ctx),b)){const d=b[2]-b[0],a=b[3]-b[1];this.ctx.rect(b[0],b[1],d,a),this.current.updateRectMinMax((0,Y.getCurrentTransform)(this.ctx),b),this.clip(),this.endPath()}}paintFormXObjectEnd(){this.contentVisible&&(this.restore(),this.baseTransform=this.baseTransformStack.pop())}beginGroup(c){if(!this.contentVisible)return;this.save(),this.inSMaskMode&&(this.endSMaskMode(),this.current.activeSMask=null);const b=this.ctx;c.isolated||(0,s.info)("TODO: Support non-isolated groups."),c.knockout&&(0,s.warn)("Knockout groups not supported.");const d=(0,Y.getCurrentTransform)(b);if(c.matrix&&b.transform(...c.matrix),!c.bbox)throw new Error("Bounding box is required.");let a=s.Util.getAxialAlignedBoundingBox(c.bbox,(0,Y.getCurrentTransform)(b));const h=[0,0,b.canvas.width,b.canvas.height];a=s.Util.intersect(a,h)||[0,0,0,0];const V=Math.floor(a[0]),J=Math.floor(a[1]);let E=Math.max(Math.ceil(a[2])-V,1),_l=Math.max(Math.ceil(a[3])-J,1),el=1,lZ=1;E>D&&(el=E/D,E=D),_l>D&&(lZ=_l/D,_l=D),this.current.startNewPathAndClipBox([0,0,E,_l]);let bZ="groupAt"+this.groupLevel;c.smask&&(bZ+="_smask_"+this.smaskCounter++%2);const NZ=this.cachedCanvases.getCanvas(bZ,E,_l),iZ=NZ.context;iZ.scale(1/el,1/lZ),iZ.translate(-V,-J),iZ.transform(...d),c.smask?this.smaskStack.push({canvas:NZ.canvas,context:iZ,offsetX:V,offsetY:J,scaleX:el,scaleY:lZ,subtype:c.smask.subtype,backdrop:c.smask.backdrop,transferMap:c.smask.transferMap||null,startTransformInverse:null}):(b.setTransform(1,0,0,1,0,0),b.translate(V,J),b.scale(el,lZ),b.save()),G(b,iZ),this.ctx=iZ,this.setGState([["BM","source-over"],["ca",1],["CA",1]]),this.groupStack.push(b),this.groupLevel++}endGroup(c){if(!this.contentVisible)return;this.groupLevel--;const b=this.ctx,d=this.groupStack.pop();if(this.ctx=d,this.ctx.imageSmoothingEnabled=!1,c.smask)this.tempSMask=this.smaskStack.pop(),this.restore();else{this.ctx.restore();const a=(0,Y.getCurrentTransform)(this.ctx);this.restore(),this.ctx.save(),this.ctx.setTransform(...a);const h=s.Util.getAxialAlignedBoundingBox([0,0,b.canvas.width,b.canvas.height],a);this.ctx.drawImage(b.canvas,0,0),this.ctx.restore(),this.compose(h)}}beginAnnotation(c,b,d,a,h){if(Zl(this,v,Pc).call(this),W(this.ctx),this.ctx.save(),this.save(),this.baseTransform&&this.ctx.setTransform(...this.baseTransform),Array.isArray(b)&&b.length===4){const V=b[2]-b[0],J=b[3]-b[1];if(h&&this.annotationCanvasMap){d=d.slice(),d[4]-=b[0],d[5]-=b[1],b=b.slice(),b[0]=b[1]=0,b[2]=V,b[3]=J;const[E,_l]=s.Util.singularValueDecompose2dScale((0,Y.getCurrentTransform)(this.ctx)),{viewportScale:el}=this,lZ=Math.ceil(V*this.outputScaleX*el),bZ=Math.ceil(J*this.outputScaleY*el);this.annotationCanvas=this.canvasFactory.create(lZ,bZ);const{canvas:NZ,context:iZ}=this.annotationCanvas;this.annotationCanvasMap.set(c,NZ),this.annotationCanvas.savedCtx=this.ctx,this.ctx=iZ,this.ctx.save(),this.ctx.setTransform(E,0,0,-_l,0,J*_l),W(this.ctx)}else W(this.ctx),this.ctx.rect(b[0],b[1],V,J),this.ctx.clip(),this.endPath()}this.current=new o(this.ctx.canvas.width,this.ctx.canvas.height),this.transform(...d),this.transform(...a)}endAnnotation(){this.annotationCanvas&&(this.ctx.restore(),Zl(this,WZ,vc).call(this),this.ctx=this.annotationCanvas.savedCtx,delete this.annotationCanvas.savedCtx,delete this.annotationCanvas)}paintImageMaskXObject(c){if(!this.contentVisible)return;const b=c.count;c=this.getObject(c.data,c),c.count=b;const d=this.ctx,a=this.processingType3;if(a&&(a.compiled===void 0&&(a.compiled=y(c)),a.compiled)){a.compiled(d);return}const h=this._createMaskCanvas(c),V=h.canvas;d.save(),d.setTransform(1,0,0,1,0,0),d.drawImage(V,h.offsetX,h.offsetY),d.restore(),this.compose()}paintImageMaskXObjectRepeat(c,b,d=0,a=0,h,V){if(!this.contentVisible)return;c=this.getObject(c.data,c);const J=this.ctx;J.save();const E=(0,Y.getCurrentTransform)(J);J.transform(b,d,a,h,0,0);const _l=this._createMaskCanvas(c);J.setTransform(1,0,0,1,_l.offsetX-E[4],_l.offsetY-E[5]);for(let el=0,lZ=V.length;el<lZ;el+=2){const bZ=s.Util.transform(E,[b,d,a,h,V[el],V[el+1]]),[NZ,iZ]=s.Util.applyTransform([0,0],bZ);J.drawImage(_l.canvas,NZ,iZ)}J.restore(),this.compose()}paintImageMaskXObjectGroup(c){if(!this.contentVisible)return;const b=this.ctx,d=this.current.fillColor,a=this.current.patternFill;for(const h of c){const{data:V,width:J,height:E,transform:_l}=h,el=this.cachedCanvases.getCanvas("maskCanvas",J,E),lZ=el.context;lZ.save();const bZ=this.getObject(V,h);e(lZ,bZ),lZ.globalCompositeOperation="source-in",lZ.fillStyle=a?d.getPattern(lZ,this,(0,Y.getCurrentTransformInverse)(b),B.PathType.FILL):d,lZ.fillRect(0,0,J,E),lZ.restore(),b.save(),b.transform(..._l),b.scale(1,-1),u(b,el.canvas,0,0,J,E,0,-1,1,1),b.restore()}this.compose()}paintImageXObject(c){if(!this.contentVisible)return;const b=this.getObject(c);if(!b){(0,s.warn)("Dependent image isn't ready yet");return}this.paintInlineImageXObject(b)}paintImageXObjectRepeat(c,b,d,a){if(!this.contentVisible)return;const h=this.getObject(c);if(!h){(0,s.warn)("Dependent image isn't ready yet");return}const V=h.width,J=h.height,E=[];for(let _l=0,el=a.length;_l<el;_l+=2)E.push({transform:[b,0,0,d,a[_l],a[_l+1]],x:0,y:0,w:V,h:J});this.paintInlineImageXObjectGroup(h,E)}applyTransferMapsToCanvas(c){return this.current.transferMaps!=="none"&&(c.filter=this.current.transferMaps,c.drawImage(c.canvas,0,0),c.filter="none"),c.canvas}applyTransferMapsToBitmap(c){if(this.current.transferMaps==="none")return c.bitmap;const{bitmap:b,width:d,height:a}=c,h=this.cachedCanvases.getCanvas("inlineImage",d,a),V=h.context;return V.filter=this.current.transferMaps,V.drawImage(b,0,0),V.filter="none",h.canvas}paintInlineImageXObject(c){if(!this.contentVisible)return;const b=c.width,d=c.height,a=this.ctx;if(this.save(),!s.isNodeJS){const{filter:J}=a;J!=="none"&&J!==""&&(a.filter="none")}a.scale(1/b,-1/d);let h;if(c.bitmap)h=this.applyTransferMapsToBitmap(c);else if(typeof HTMLElement=="function"&&c instanceof HTMLElement||!c.data)h=c;else{const E=this.cachedCanvases.getCanvas("inlineImage",b,d).context;p(E,c),h=this.applyTransferMapsToCanvas(E)}const V=this._scaleImage(h,(0,Y.getCurrentTransformInverse)(a));a.imageSmoothingEnabled=Q((0,Y.getCurrentTransform)(a),c.interpolate),u(a,V.img,0,0,V.paintWidth,V.paintHeight,0,-d,b,d),this.compose(),this.restore()}paintInlineImageXObjectGroup(c,b){if(!this.contentVisible)return;const d=this.ctx;let a;if(c.bitmap)a=c.bitmap;else{const h=c.width,V=c.height,E=this.cachedCanvases.getCanvas("inlineImage",h,V).context;p(E,c),a=this.applyTransferMapsToCanvas(E)}for(const h of b)d.save(),d.transform(...h.transform),d.scale(1,-1),u(d,a,h.x,h.y,h.w,h.h,0,-1,1,1),d.restore();this.compose()}paintSolidColorImageMask(){this.contentVisible&&(this.ctx.fillRect(0,0,1,1),this.compose())}markPoint(c){}markPointProps(c,b){}beginMarkedContent(c){this.markedContentStack.push({visible:!0})}beginMarkedContentProps(c,b){c==="OC"?this.markedContentStack.push({visible:this.optionalContentConfig.isVisible(b)}):this.markedContentStack.push({visible:!0}),this.contentVisible=this.isContentVisible()}endMarkedContent(){this.markedContentStack.pop(),this.contentVisible=this.isContentVisible()}beginCompat(){}endCompat(){}consumePath(c){const b=this.current.isEmptyClip();this.pendingClip&&this.current.updateClipFromPath(),this.pendingClip||this.compose(c);const d=this.ctx;this.pendingClip&&(b||(this.pendingClip===ql?d.clip("evenodd"):d.clip()),this.pendingClip=null),this.current.startNewPathAndClipBox(this.current.clipBox),d.beginPath()}getSinglePixelWidth(){if(!this._cachedGetSinglePixelWidth){const c=(0,Y.getCurrentTransform)(this.ctx);if(c[1]===0&&c[2]===0)this._cachedGetSinglePixelWidth=1/Math.min(Math.abs(c[0]),Math.abs(c[3]));else{const b=Math.abs(c[0]*c[3]-c[2]*c[1]),d=Math.hypot(c[0],c[2]),a=Math.hypot(c[1],c[3]);this._cachedGetSinglePixelWidth=Math.max(d,a)/b}}return this._cachedGetSinglePixelWidth}getScaleForStroking(){if(this._cachedScaleForStroking[0]===-1){const{lineWidth:c}=this.current,{a:b,b:d,c:a,d:h}=this.ctx.getTransform();let V,J;if(d===0&&a===0){const E=Math.abs(b),_l=Math.abs(h);if(E===_l)if(c===0)V=J=1/E;else{const el=E*c;V=J=el<1?1/el:1}else if(c===0)V=1/E,J=1/_l;else{const el=E*c,lZ=_l*c;V=el<1?1/el:1,J=lZ<1?1/lZ:1}}else{const E=Math.abs(b*h-d*a),_l=Math.hypot(b,d),el=Math.hypot(a,h);if(c===0)V=el/E,J=_l/E;else{const lZ=c*E;V=el>lZ?el/lZ:1,J=_l>lZ?_l/lZ:1}}this._cachedScaleForStroking[0]=V,this._cachedScaleForStroking[1]=J}return this._cachedScaleForStroking}rescaleAndStroke(c){const{ctx:b}=this,{lineWidth:d}=this.current,[a,h]=this.getScaleForStroking();if(b.lineWidth=d||1,a===1&&h===1){b.stroke();return}const V=b.getLineDash();if(c&&b.save(),b.scale(a,h),V.length>0){const J=Math.max(a,h);b.setLineDash(V.map(E=>E/J)),b.lineDashOffset/=J}b.stroke(),c&&b.restore()}isContentVisible(){for(let c=this.markedContentStack.length-1;c>=0;c--)if(!this.markedContentStack[c].visible)return!1;return!0}};v=new WeakSet,Pc=function(){for(;this.stateStack.length||this.inSMaskMode;)this.restore();this.ctx.restore(),this.transparentCanvas&&(this.ctx=this.compositeCtx,this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.drawImage(this.transparentCanvas,0,0),this.ctx.restore(),this.transparentCanvas=null)},WZ=new WeakSet,vc=function(){if(this.pageColors){const c=this.filterFactory.addHCMFilter(this.pageColors.foreground,this.pageColors.background);if(c!=="none"){const b=this.ctx.filter;this.ctx.filter=c,this.ctx.drawImage(this.ctx.canvas,0,0),this.ctx.filter=b}}};let cZ=VZ;m.CanvasGraphics=cZ;for(const R in s.OPS)cZ.prototype[R]!==void 0&&(cZ.prototype[s.OPS[R]]=cZ.prototype[R])},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.TilingPattern=m.PathType=void 0,m.getShadingPattern=w;var s=O(1),Y=O(6);const B={FILL:"Fill",STROKE:"Stroke",SHADING:"Shading"};m.PathType=B;function r(y,o){if(!o)return;const p=o[2]-o[0],e=o[3]-o[1],G=new Path2D;G.rect(o[0],o[1],p,e),y.clip(G)}class ZZ{constructor(){this.constructor===ZZ&&(0,s.unreachable)("Cannot initialize BaseShadingPattern.")}getPattern(){(0,s.unreachable)("Abstract method `getPattern` called.")}}class C extends ZZ{constructor(o){super(),this._type=o[1],this._bbox=o[2],this._colorStops=o[3],this._p0=o[4],this._p1=o[5],this._r0=o[6],this._r1=o[7],this.matrix=null}_createGradient(o){let p;this._type==="axial"?p=o.createLinearGradient(this._p0[0],this._p0[1],this._p1[0],this._p1[1]):this._type==="radial"&&(p=o.createRadialGradient(this._p0[0],this._p0[1],this._r0,this._p1[0],this._p1[1],this._r1));for(const e of this._colorStops)p.addColorStop(e[0],e[1]);return p}getPattern(o,p,e,G){let W;if(G===B.STROKE||G===B.FILL){const z=p.current.getClippedPathBoundingBox(G,(0,Y.getCurrentTransform)(o))||[0,0,0,0],M=Math.ceil(z[2]-z[0])||1,i=Math.ceil(z[3]-z[1])||1,x=p.cachedCanvases.getCanvas("pattern",M,i,!0),T=x.context;T.clearRect(0,0,T.canvas.width,T.canvas.height),T.beginPath(),T.rect(0,0,T.canvas.width,T.canvas.height),T.translate(-z[0],-z[1]),e=s.Util.transform(e,[1,0,0,1,z[0],z[1]]),T.transform(...p.baseTransform),this.matrix&&T.transform(...this.matrix),r(T,this._bbox),T.fillStyle=this._createGradient(T),T.fill(),W=o.createPattern(x.canvas,"no-repeat");const Q=new DOMMatrix(e);W.setTransform(Q)}else r(o,this._bbox),W=this._createGradient(o);return W}}function D(y,o,p,e,G,W,z,M){const i=o.coords,x=o.colors,T=y.data,Q=y.width*4;let f;i[p+1]>i[e+1]&&(f=p,p=e,e=f,f=W,W=z,z=f),i[e+1]>i[G+1]&&(f=e,e=G,G=f,f=z,z=M,M=f),i[p+1]>i[e+1]&&(f=p,p=e,e=f,f=W,W=z,z=f);const I=(i[p]+o.offsetX)*o.scaleX,Wl=(i[p+1]+o.offsetY)*o.scaleY,ql=(i[e]+o.offsetX)*o.scaleX,cZ=(i[e+1]+o.offsetY)*o.scaleY,v=(i[G]+o.offsetX)*o.scaleX,tZ=(i[G+1]+o.offsetY)*o.scaleY;if(Wl>=tZ)return;const WZ=x[W],nZ=x[W+1],VZ=x[W+2],R=x[z],c=x[z+1],b=x[z+2],d=x[M],a=x[M+1],h=x[M+2],V=Math.round(Wl),J=Math.round(tZ);let E,_l,el,lZ,bZ,NZ,iZ,pZ;for(let DZ=V;DZ<=J;DZ++){if(DZ<cZ){const Vl=DZ<Wl?0:(Wl-DZ)/(Wl-cZ);E=I-(I-ql)*Vl,_l=WZ-(WZ-R)*Vl,el=nZ-(nZ-c)*Vl,lZ=VZ-(VZ-b)*Vl}else{let Vl;DZ>tZ?Vl=1:cZ===tZ?Vl=0:Vl=(cZ-DZ)/(cZ-tZ),E=ql-(ql-v)*Vl,_l=R-(R-d)*Vl,el=c-(c-a)*Vl,lZ=b-(b-h)*Vl}let YZ;DZ<Wl?YZ=0:DZ>tZ?YZ=1:YZ=(Wl-DZ)/(Wl-tZ),bZ=I-(I-v)*YZ,NZ=WZ-(WZ-d)*YZ,iZ=nZ-(nZ-a)*YZ,pZ=VZ-(VZ-h)*YZ;const IZ=Math.round(Math.min(E,bZ)),mZ=Math.round(Math.max(E,bZ));let Xl=Q*DZ+IZ*4;for(let Vl=IZ;Vl<=mZ;Vl++)YZ=(E-Vl)/(E-bZ),YZ<0?YZ=0:YZ>1&&(YZ=1),T[Xl++]=_l-(_l-NZ)*YZ|0,T[Xl++]=el-(el-iZ)*YZ|0,T[Xl++]=lZ-(lZ-pZ)*YZ|0,T[Xl++]=255}}function N(y,o,p){const e=o.coords,G=o.colors;let W,z;switch(o.type){case"lattice":const M=o.verticesPerRow,i=Math.floor(e.length/M)-1,x=M-1;for(W=0;W<i;W++){let T=W*M;for(let Q=0;Q<x;Q++,T++)D(y,p,e[T],e[T+1],e[T+M],G[T],G[T+1],G[T+M]),D(y,p,e[T+M+1],e[T+1],e[T+M],G[T+M+1],G[T+1],G[T+M])}break;case"triangles":for(W=0,z=e.length;W<z;W+=3)D(y,p,e[W],e[W+1],e[W+2],G[W],G[W+1],G[W+2]);break;default:throw new Error("illegal figure")}}class j extends ZZ{constructor(o){super(),this._coords=o[2],this._colors=o[3],this._figures=o[4],this._bounds=o[5],this._bbox=o[7],this._background=o[8],this.matrix=null}_createMeshCanvas(o,p,e){const M=Math.floor(this._bounds[0]),i=Math.floor(this._bounds[1]),x=Math.ceil(this._bounds[2])-M,T=Math.ceil(this._bounds[3])-i,Q=Math.min(Math.ceil(Math.abs(x*o[0]*1.1)),3e3),f=Math.min(Math.ceil(Math.abs(T*o[1]*1.1)),3e3),I=x/Q,Wl=T/f,ql={coords:this._coords,colors:this._colors,offsetX:-M,offsetY:-i,scaleX:1/I,scaleY:1/Wl},cZ=Q+2*2,v=f+2*2,tZ=e.getCanvas("mesh",cZ,v,!1),WZ=tZ.context,nZ=WZ.createImageData(Q,f);if(p){const R=nZ.data;for(let c=0,b=R.length;c<b;c+=4)R[c]=p[0],R[c+1]=p[1],R[c+2]=p[2],R[c+3]=255}for(const R of this._figures)N(nZ,R,ql);return WZ.putImageData(nZ,2,2),{canvas:tZ.canvas,offsetX:M-2*I,offsetY:i-2*Wl,scaleX:I,scaleY:Wl}}getPattern(o,p,e,G){r(o,this._bbox);let W;if(G===B.SHADING)W=s.Util.singularValueDecompose2dScale((0,Y.getCurrentTransform)(o));else if(W=s.Util.singularValueDecompose2dScale(p.baseTransform),this.matrix){const M=s.Util.singularValueDecompose2dScale(this.matrix);W=[W[0]*M[0],W[1]*M[1]]}const z=this._createMeshCanvas(W,G===B.SHADING?null:this._background,p.cachedCanvases);return G!==B.SHADING&&(o.setTransform(...p.baseTransform),this.matrix&&o.transform(...this.matrix)),o.translate(z.offsetX,z.offsetY),o.scale(z.scaleX,z.scaleY),o.createPattern(z.canvas,"no-repeat")}}class k extends ZZ{getPattern(){return"hotpink"}}function w(y){switch(y[0]){case"RadialAxial":return new C(y);case"Mesh":return new j(y);case"Dummy":return new k}throw new Error(`Unknown IR type: ${y[0]}`)}const L={COLORED:1,UNCOLORED:2},u=class u{constructor(o,p,e,G,W){this.operatorList=o[2],this.matrix=o[3]||[1,0,0,1,0,0],this.bbox=o[4],this.xstep=o[5],this.ystep=o[6],this.paintType=o[7],this.tilingType=o[8],this.color=p,this.ctx=e,this.canvasGraphicsFactory=G,this.baseTransform=W}createPatternCanvas(o){const p=this.operatorList,e=this.bbox,G=this.xstep,W=this.ystep,z=this.paintType,M=this.tilingType,i=this.color,x=this.canvasGraphicsFactory;(0,s.info)("TilingType: "+M);const T=e[0],Q=e[1],f=e[2],I=e[3],Wl=s.Util.singularValueDecompose2dScale(this.matrix),ql=s.Util.singularValueDecompose2dScale(this.baseTransform),cZ=[Wl[0]*ql[0],Wl[1]*ql[1]],v=this.getSizeAndScale(G,this.ctx.canvas.width,cZ[0]),tZ=this.getSizeAndScale(W,this.ctx.canvas.height,cZ[1]),WZ=o.cachedCanvases.getCanvas("pattern",v.size,tZ.size,!0),nZ=WZ.context,VZ=x.createCanvasGraphics(nZ);VZ.groupLevel=o.groupLevel,this.setFillAndStrokeStyleToContext(VZ,z,i);let R=T,c=Q,b=f,d=I;return T<0&&(R=0,b+=Math.abs(T)),Q<0&&(c=0,d+=Math.abs(Q)),nZ.translate(-(v.scale*R),-(tZ.scale*c)),VZ.transform(v.scale,0,0,tZ.scale,0,0),nZ.save(),this.clipBbox(VZ,R,c,b,d),VZ.baseTransform=(0,Y.getCurrentTransform)(VZ.ctx),VZ.executeOperatorList(p),VZ.endDrawing(),{canvas:WZ.canvas,scaleX:v.scale,scaleY:tZ.scale,offsetX:R,offsetY:c}}getSizeAndScale(o,p,e){o=Math.abs(o);const G=Math.max(u.MAX_PATTERN_SIZE,p);let W=Math.ceil(o*e);return W>=G?W=G:e=W/o,{scale:e,size:W}}clipBbox(o,p,e,G,W){const z=G-p,M=W-e;o.ctx.rect(p,e,z,M),o.current.updateRectMinMax((0,Y.getCurrentTransform)(o.ctx),[p,e,G,W]),o.clip(),o.endPath()}setFillAndStrokeStyleToContext(o,p,e){const G=o.ctx,W=o.current;switch(p){case L.COLORED:const z=this.ctx;G.fillStyle=z.fillStyle,G.strokeStyle=z.strokeStyle,W.fillColor=z.fillStyle,W.strokeColor=z.strokeStyle;break;case L.UNCOLORED:const M=s.Util.makeHexColor(e[0],e[1],e[2]);G.fillStyle=M,G.strokeStyle=M,W.fillColor=M,W.strokeColor=M;break;default:throw new s.FormatError(`Unsupported paint type: ${p}`)}}getPattern(o,p,e,G){let W=e;G!==B.SHADING&&(W=s.Util.transform(W,p.baseTransform),this.matrix&&(W=s.Util.transform(W,this.matrix)));const z=this.createPatternCanvas(p);let M=new DOMMatrix(W);M=M.translate(z.offsetX,z.offsetY),M=M.scale(1/z.scaleX,1/z.scaleY);const i=o.createPattern(z.canvas,"repeat");return i.setTransform(M),i}};AZ(u,"MAX_PATTERN_SIZE",3e3);let n=u;m.TilingPattern=n},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.convertBlackAndWhiteToRGBA=B,m.convertToRGBA=Y,m.grayToRGBA=ZZ;var s=O(1);function Y(C){switch(C.kind){case s.ImageKind.GRAYSCALE_1BPP:return B(C);case s.ImageKind.RGB_24BPP:return r(C)}return null}function B({src:C,srcPos:D=0,dest:N,width:j,height:k,nonBlackColor:w=4294967295,inverseDecode:L=!1}){const n=s.FeatureTest.isLittleEndian?4278190080:255,[u,y]=L?[w,n]:[n,w],o=j>>3,p=j&7,e=C.length;N=new Uint32Array(N.buffer);let G=0;for(let W=0;W<k;W++){for(const M=D+o;D<M;D++){const i=D<e?C[D]:255;N[G++]=i&128?y:u,N[G++]=i&64?y:u,N[G++]=i&32?y:u,N[G++]=i&16?y:u,N[G++]=i&8?y:u,N[G++]=i&4?y:u,N[G++]=i&2?y:u,N[G++]=i&1?y:u}if(p===0)continue;const z=D<e?C[D++]:255;for(let M=0;M<p;M++)N[G++]=z&1<<7-M?y:u}return{srcPos:D,destPos:G}}function r({src:C,srcPos:D=0,dest:N,destPos:j=0,width:k,height:w}){let L=0;const n=C.length>>2,u=new Uint32Array(C.buffer,D,n);if(s.FeatureTest.isLittleEndian){for(;L<n-2;L+=3,j+=4){const y=u[L],o=u[L+1],p=u[L+2];N[j]=y|4278190080,N[j+1]=y>>>24|o<<8|4278190080,N[j+2]=o>>>16|p<<16|4278190080,N[j+3]=p>>>8|4278190080}for(let y=L*4,o=C.length;y<o;y+=3)N[j++]=C[y]|C[y+1]<<8|C[y+2]<<16|4278190080}else{for(;L<n-2;L+=3,j+=4){const y=u[L],o=u[L+1],p=u[L+2];N[j]=y|255,N[j+1]=y<<24|o>>>8|255,N[j+2]=o<<16|p>>>16|255,N[j+3]=p<<8|255}for(let y=L*4,o=C.length;y<o;y+=3)N[j++]=C[y]<<24|C[y+1]<<16|C[y+2]<<8|255}return{srcPos:D,destPos:j}}function ZZ(C,D){if(s.FeatureTest.isLittleEndian)for(let N=0,j=C.length;N<j;N++)D[N]=C[N]*65793|4278190080;else for(let N=0,j=C.length;N<j;N++)D[N]=C[N]*16843008|255}},(H,m)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.GlobalWorkerOptions=void 0;const O=Object.create(null);m.GlobalWorkerOptions=O,O.workerPort=null,O.workerSrc=""},(H,m,O)=>{var C,Vd,N,ed,k,Vc;Object.defineProperty(m,"__esModule",{value:!0}),m.MessageHandler=void 0;var s=O(1);const Y={UNKNOWN:0,DATA:1,ERROR:2},B={UNKNOWN:0,CANCEL:1,CANCEL_COMPLETE:2,CLOSE:3,ENQUEUE:4,ERROR:5,PULL:6,PULL_COMPLETE:7,START_COMPLETE:8};function r(L){switch(L instanceof Error||typeof L=="object"&&L!==null||(0,s.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'),L.name){case"AbortException":return new s.AbortException(L.message);case"MissingPDFException":return new s.MissingPDFException(L.message);case"PasswordException":return new s.PasswordException(L.message,L.code);case"UnexpectedResponseException":return new s.UnexpectedResponseException(L.message,L.status);case"UnknownErrorException":return new s.UnknownErrorException(L.message,L.details);default:return new s.UnknownErrorException(L.message,L.toString())}}class ZZ{constructor(n,u,y){g(this,C);g(this,N);g(this,k);this.sourceName=n,this.targetName=u,this.comObj=y,this.callbackId=1,this.streamId=1,this.streamSinks=Object.create(null),this.streamControllers=Object.create(null),this.callbackCapabilities=Object.create(null),this.actionHandler=Object.create(null),this._onComObjOnMessage=o=>{const p=o.data;if(p.targetName!==this.sourceName)return;if(p.stream){Zl(this,N,ed).call(this,p);return}if(p.callback){const G=p.callbackId,W=this.callbackCapabilities[G];if(!W)throw new Error(`Cannot resolve callback ${G}`);if(delete this.callbackCapabilities[G],p.callback===Y.DATA)W.resolve(p.data);else if(p.callback===Y.ERROR)W.reject(r(p.reason));else throw new Error("Unexpected callback case");return}const e=this.actionHandler[p.action];if(!e)throw new Error(`Unknown action from worker: ${p.action}`);if(p.callbackId){const G=this.sourceName,W=p.sourceName;new Promise(function(z){z(e(p.data))}).then(function(z){y.postMessage({sourceName:G,targetName:W,callback:Y.DATA,callbackId:p.callbackId,data:z})},function(z){y.postMessage({sourceName:G,targetName:W,callback:Y.ERROR,callbackId:p.callbackId,reason:r(z)})});return}if(p.streamId){Zl(this,C,Vd).call(this,p);return}e(p.data)},y.addEventListener("message",this._onComObjOnMessage)}on(n,u){const y=this.actionHandler;if(y[n])throw new Error(`There is already an actionName called "${n}"`);y[n]=u}send(n,u,y){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:n,data:u},y)}sendWithPromise(n,u,y){const o=this.callbackId++,p=new s.PromiseCapability;this.callbackCapabilities[o]=p;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:n,callbackId:o,data:u},y)}catch(e){p.reject(e)}return p.promise}sendWithStream(n,u,y,o){const p=this.streamId++,e=this.sourceName,G=this.targetName,W=this.comObj;return new ReadableStream({start:z=>{const M=new s.PromiseCapability;return this.streamControllers[p]={controller:z,startCall:M,pullCall:null,cancelCall:null,isClosed:!1},W.postMessage({sourceName:e,targetName:G,action:n,streamId:p,data:u,desiredSize:z.desiredSize},o),M.promise},pull:z=>{const M=new s.PromiseCapability;return this.streamControllers[p].pullCall=M,W.postMessage({sourceName:e,targetName:G,stream:B.PULL,streamId:p,desiredSize:z.desiredSize}),M.promise},cancel:z=>{(0,s.assert)(z instanceof Error,"cancel must have a valid reason");const M=new s.PromiseCapability;return this.streamControllers[p].cancelCall=M,this.streamControllers[p].isClosed=!0,W.postMessage({sourceName:e,targetName:G,stream:B.CANCEL,streamId:p,reason:r(z)}),M.promise}},y)}destroy(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}}C=new WeakSet,Vd=function(n){const u=n.streamId,y=this.sourceName,o=n.sourceName,p=this.comObj,e=this,G=this.actionHandler[n.action],W={enqueue(z,M=1,i){if(this.isCancelled)return;const x=this.desiredSize;this.desiredSize-=M,x>0&&this.desiredSize<=0&&(this.sinkCapability=new s.PromiseCapability,this.ready=this.sinkCapability.promise),p.postMessage({sourceName:y,targetName:o,stream:B.ENQUEUE,streamId:u,chunk:z},i)},close(){this.isCancelled||(this.isCancelled=!0,p.postMessage({sourceName:y,targetName:o,stream:B.CLOSE,streamId:u}),delete e.streamSinks[u])},error(z){(0,s.assert)(z instanceof Error,"error must have a valid reason"),!this.isCancelled&&(this.isCancelled=!0,p.postMessage({sourceName:y,targetName:o,stream:B.ERROR,streamId:u,reason:r(z)}))},sinkCapability:new s.PromiseCapability,onPull:null,onCancel:null,isCancelled:!1,desiredSize:n.desiredSize,ready:null};W.sinkCapability.resolve(),W.ready=W.sinkCapability.promise,this.streamSinks[u]=W,new Promise(function(z){z(G(n.data,W))}).then(function(){p.postMessage({sourceName:y,targetName:o,stream:B.START_COMPLETE,streamId:u,success:!0})},function(z){p.postMessage({sourceName:y,targetName:o,stream:B.START_COMPLETE,streamId:u,reason:r(z)})})},N=new WeakSet,ed=function(n){const u=n.streamId,y=this.sourceName,o=n.sourceName,p=this.comObj,e=this.streamControllers[u],G=this.streamSinks[u];switch(n.stream){case B.START_COMPLETE:n.success?e.startCall.resolve():e.startCall.reject(r(n.reason));break;case B.PULL_COMPLETE:n.success?e.pullCall.resolve():e.pullCall.reject(r(n.reason));break;case B.PULL:if(!G){p.postMessage({sourceName:y,targetName:o,stream:B.PULL_COMPLETE,streamId:u,success:!0});break}G.desiredSize<=0&&n.desiredSize>0&&G.sinkCapability.resolve(),G.desiredSize=n.desiredSize,new Promise(function(W){var z;W((z=G.onPull)==null?void 0:z.call(G))}).then(function(){p.postMessage({sourceName:y,targetName:o,stream:B.PULL_COMPLETE,streamId:u,success:!0})},function(W){p.postMessage({sourceName:y,targetName:o,stream:B.PULL_COMPLETE,streamId:u,reason:r(W)})});break;case B.ENQUEUE:if((0,s.assert)(e,"enqueue should have stream controller"),e.isClosed)break;e.controller.enqueue(n.chunk);break;case B.CLOSE:if((0,s.assert)(e,"close should have stream controller"),e.isClosed)break;e.isClosed=!0,e.controller.close(),Zl(this,k,Vc).call(this,e,u);break;case B.ERROR:(0,s.assert)(e,"error should have stream controller"),e.controller.error(r(n.reason)),Zl(this,k,Vc).call(this,e,u);break;case B.CANCEL_COMPLETE:n.success?e.cancelCall.resolve():e.cancelCall.reject(r(n.reason)),Zl(this,k,Vc).call(this,e,u);break;case B.CANCEL:if(!G)break;new Promise(function(W){var z;W((z=G.onCancel)==null?void 0:z.call(G,r(n.reason)))}).then(function(){p.postMessage({sourceName:y,targetName:o,stream:B.CANCEL_COMPLETE,streamId:u,success:!0})},function(W){p.postMessage({sourceName:y,targetName:o,stream:B.CANCEL_COMPLETE,streamId:u,reason:r(W)})}),G.sinkCapability.reject(r(n.reason)),G.isCancelled=!0,delete this.streamSinks[u];break;default:throw new Error("Unexpected stream case")}},k=new WeakSet,Vc=async function(n,u){var y,o,p;await Promise.allSettled([(y=n.startCall)==null?void 0:y.promise,(o=n.pullCall)==null?void 0:o.promise,(p=n.cancelCall)==null?void 0:p.promise]),delete this.streamControllers[u]},m.MessageHandler=ZZ},(H,m,O)=>{var B,r;Object.defineProperty(m,"__esModule",{value:!0}),m.Metadata=void 0;var s=O(1);class Y{constructor({parsedData:C,rawData:D}){g(this,B,void 0);g(this,r,void 0);Al(this,B,C),Al(this,r,D)}getRaw(){return l(this,r)}get(C){return l(this,B).get(C)??null}getAll(){return(0,s.objectFromMap)(l(this,B))}has(C){return l(this,B).has(C)}}B=new WeakMap,r=new WeakMap,m.Metadata=Y},(H,m,O)=>{var C,D,N,j,k,w,Bc;Object.defineProperty(m,"__esModule",{value:!0}),m.OptionalContentConfig=void 0;var s=O(1),Y=O(8);const B=Symbol("INTERNAL");class r{constructor(u,y){g(this,C,!0);this.name=u,this.intent=y}get visible(){return l(this,C)}_setVisible(u,y){u!==B&&(0,s.unreachable)("Internal method `_setVisible` called."),Al(this,C,y)}}C=new WeakMap;class ZZ{constructor(u){g(this,w);g(this,D,null);g(this,N,new Map);g(this,j,null);g(this,k,null);if(this.name=null,this.creator=null,u!==null){this.name=u.name,this.creator=u.creator,Al(this,k,u.order);for(const y of u.groups)l(this,N).set(y.id,new r(y.name,y.intent));if(u.baseState==="OFF")for(const y of l(this,N).values())y._setVisible(B,!1);for(const y of u.on)l(this,N).get(y)._setVisible(B,!0);for(const y of u.off)l(this,N).get(y)._setVisible(B,!1);Al(this,j,this.getHash())}}isVisible(u){if(l(this,N).size===0)return!0;if(!u)return(0,s.warn)("Optional content group not defined."),!0;if(u.type==="OCG")return l(this,N).has(u.id)?l(this,N).get(u.id).visible:((0,s.warn)(`Optional content group not found: ${u.id}`),!0);if(u.type==="OCMD"){if(u.expression)return Zl(this,w,Bc).call(this,u.expression);if(!u.policy||u.policy==="AnyOn"){for(const y of u.ids){if(!l(this,N).has(y))return(0,s.warn)(`Optional content group not found: ${y}`),!0;if(l(this,N).get(y).visible)return!0}return!1}else if(u.policy==="AllOn"){for(const y of u.ids){if(!l(this,N).has(y))return(0,s.warn)(`Optional content group not found: ${y}`),!0;if(!l(this,N).get(y).visible)return!1}return!0}else if(u.policy==="AnyOff"){for(const y of u.ids){if(!l(this,N).has(y))return(0,s.warn)(`Optional content group not found: ${y}`),!0;if(!l(this,N).get(y).visible)return!0}return!1}else if(u.policy==="AllOff"){for(const y of u.ids){if(!l(this,N).has(y))return(0,s.warn)(`Optional content group not found: ${y}`),!0;if(l(this,N).get(y).visible)return!1}return!0}return(0,s.warn)(`Unknown optional content policy ${u.policy}.`),!0}return(0,s.warn)(`Unknown group type ${u.type}.`),!0}setVisibility(u,y=!0){if(!l(this,N).has(u)){(0,s.warn)(`Optional content group not found: ${u}`);return}l(this,N).get(u)._setVisible(B,!!y),Al(this,D,null)}get hasInitialVisibility(){return l(this,j)===null||this.getHash()===l(this,j)}getOrder(){return l(this,N).size?l(this,k)?l(this,k).slice():[...l(this,N).keys()]:null}getGroups(){return l(this,N).size>0?(0,s.objectFromMap)(l(this,N)):null}getGroup(u){return l(this,N).get(u)||null}getHash(){if(l(this,D)!==null)return l(this,D);const u=new Y.MurmurHash3_64;for(const[y,o]of l(this,N))u.update(`${y}:${o.visible}`);return Al(this,D,u.hexdigest())}}D=new WeakMap,N=new WeakMap,j=new WeakMap,k=new WeakMap,w=new WeakSet,Bc=function(u){const y=u.length;if(y<2)return!0;const o=u[0];for(let p=1;p<y;p++){const e=u[p];let G;if(Array.isArray(e))G=Zl(this,w,Bc).call(this,e);else if(l(this,N).has(e))G=l(this,N).get(e).visible;else return(0,s.warn)(`Optional content group not found: ${e}`),!0;switch(o){case"And":if(!G)return!1;break;case"Or":if(G)return!0;break;case"Not":return!G;default:return!0}}return o==="And"},m.OptionalContentConfig=ZZ},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.PDFDataTransportStream=void 0;var s=O(1),Y=O(6);class B{constructor({length:D,initialData:N,progressiveDone:j=!1,contentDispositionFilename:k=null,disableRange:w=!1,disableStream:L=!1},n){if((0,s.assert)(n,'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'),this._queuedChunks=[],this._progressiveDone=j,this._contentDispositionFilename=k,(N==null?void 0:N.length)>0){const u=N instanceof Uint8Array&&N.byteLength===N.buffer.byteLength?N.buffer:new Uint8Array(N).buffer;this._queuedChunks.push(u)}this._pdfDataRangeTransport=n,this._isStreamingSupported=!L,this._isRangeSupported=!w,this._contentLength=D,this._fullRequestReader=null,this._rangeReaders=[],this._pdfDataRangeTransport.addRangeListener((u,y)=>{this._onReceiveData({begin:u,chunk:y})}),this._pdfDataRangeTransport.addProgressListener((u,y)=>{this._onProgress({loaded:u,total:y})}),this._pdfDataRangeTransport.addProgressiveReadListener(u=>{this._onReceiveData({chunk:u})}),this._pdfDataRangeTransport.addProgressiveDoneListener(()=>{this._onProgressiveDone()}),this._pdfDataRangeTransport.transportReady()}_onReceiveData({begin:D,chunk:N}){const j=N instanceof Uint8Array&&N.byteLength===N.buffer.byteLength?N.buffer:new Uint8Array(N).buffer;if(D===void 0)this._fullRequestReader?this._fullRequestReader._enqueue(j):this._queuedChunks.push(j);else{const k=this._rangeReaders.some(function(w){return w._begin!==D?!1:(w._enqueue(j),!0)});(0,s.assert)(k,"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.")}}get _progressiveDataLength(){var D;return((D=this._fullRequestReader)==null?void 0:D._loaded)??0}_onProgress(D){var N,j,k,w;D.total===void 0?(j=(N=this._rangeReaders[0])==null?void 0:N.onProgress)==null||j.call(N,{loaded:D.loaded}):(w=(k=this._fullRequestReader)==null?void 0:k.onProgress)==null||w.call(k,{loaded:D.loaded,total:D.total})}_onProgressiveDone(){var D;(D=this._fullRequestReader)==null||D.progressiveDone(),this._progressiveDone=!0}_removeRangeReader(D){const N=this._rangeReaders.indexOf(D);N>=0&&this._rangeReaders.splice(N,1)}getFullReader(){(0,s.assert)(!this._fullRequestReader,"PDFDataTransportStream.getFullReader can only be called once.");const D=this._queuedChunks;return this._queuedChunks=null,new r(this,D,this._progressiveDone,this._contentDispositionFilename)}getRangeReader(D,N){if(N<=this._progressiveDataLength)return null;const j=new ZZ(this,D,N);return this._pdfDataRangeTransport.requestDataRange(D,N),this._rangeReaders.push(j),j}cancelAllRequests(D){var N;(N=this._fullRequestReader)==null||N.cancel(D);for(const j of this._rangeReaders.slice(0))j.cancel(D);this._pdfDataRangeTransport.abort()}}m.PDFDataTransportStream=B;class r{constructor(D,N,j=!1,k=null){this._stream=D,this._done=j||!1,this._filename=(0,Y.isPdfFile)(k)?k:null,this._queuedChunks=N||[],this._loaded=0;for(const w of this._queuedChunks)this._loaded+=w.byteLength;this._requests=[],this._headersReady=Promise.resolve(),D._fullRequestReader=this,this.onProgress=null}_enqueue(D){this._done||(this._requests.length>0?this._requests.shift().resolve({value:D,done:!1}):this._queuedChunks.push(D),this._loaded+=D.byteLength)}get headersReady(){return this._headersReady}get filename(){return this._filename}get isRangeSupported(){return this._stream._isRangeSupported}get isStreamingSupported(){return this._stream._isStreamingSupported}get contentLength(){return this._stream._contentLength}async read(){if(this._queuedChunks.length>0)return{value:this._queuedChunks.shift(),done:!1};if(this._done)return{value:void 0,done:!0};const D=new s.PromiseCapability;return this._requests.push(D),D.promise}cancel(D){this._done=!0;for(const N of this._requests)N.resolve({value:void 0,done:!0});this._requests.length=0}progressiveDone(){this._done||(this._done=!0)}}class ZZ{constructor(D,N,j){this._stream=D,this._begin=N,this._end=j,this._queuedChunk=null,this._requests=[],this._done=!1,this.onProgress=null}_enqueue(D){if(!this._done){if(this._requests.length===0)this._queuedChunk=D;else{this._requests.shift().resolve({value:D,done:!1});for(const j of this._requests)j.resolve({value:void 0,done:!0});this._requests.length=0}this._done=!0,this._stream._removeRangeReader(this)}}get isStreamingSupported(){return!1}async read(){if(this._queuedChunk){const N=this._queuedChunk;return this._queuedChunk=null,{value:N,done:!1}}if(this._done)return{value:void 0,done:!0};const D=new s.PromiseCapability;return this._requests.push(D),D.promise}cancel(D){this._done=!0;for(const N of this._requests)N.resolve({value:void 0,done:!0});this._requests.length=0,this._stream._removeRangeReader(this)}}},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.PDFFetchStream=void 0;var s=O(1),Y=O(20);function B(j,k,w){return{method:"GET",headers:j,signal:w.signal,mode:"cors",credentials:k?"include":"same-origin",redirect:"follow"}}function r(j){const k=new Headers;for(const w in j){const L=j[w];L!==void 0&&k.append(w,L)}return k}function ZZ(j){return j instanceof Uint8Array?j.buffer:j instanceof ArrayBuffer?j:((0,s.warn)(`getArrayBuffer - unexpected data format: ${j}`),new Uint8Array(j).buffer)}class C{constructor(k){this.source=k,this.isHttp=/^https?:/i.test(k.url),this.httpHeaders=this.isHttp&&k.httpHeaders||{},this._fullRequestReader=null,this._rangeRequestReaders=[]}get _progressiveDataLength(){var k;return((k=this._fullRequestReader)==null?void 0:k._loaded)??0}getFullReader(){return(0,s.assert)(!this._fullRequestReader,"PDFFetchStream.getFullReader can only be called once."),this._fullRequestReader=new D(this),this._fullRequestReader}getRangeReader(k,w){if(w<=this._progressiveDataLength)return null;const L=new N(this,k,w);return this._rangeRequestReaders.push(L),L}cancelAllRequests(k){var w;(w=this._fullRequestReader)==null||w.cancel(k);for(const L of this._rangeRequestReaders.slice(0))L.cancel(k)}}m.PDFFetchStream=C;class D{constructor(k){this._stream=k,this._reader=null,this._loaded=0,this._filename=null;const w=k.source;this._withCredentials=w.withCredentials||!1,this._contentLength=w.length,this._headersCapability=new s.PromiseCapability,this._disableRange=w.disableRange||!1,this._rangeChunkSize=w.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._abortController=new AbortController,this._isStreamingSupported=!w.disableStream,this._isRangeSupported=!w.disableRange,this._headers=r(this._stream.httpHeaders);const L=w.url;fetch(L,B(this._headers,this._withCredentials,this._abortController)).then(n=>{if(!(0,Y.validateResponseStatus)(n.status))throw(0,Y.createResponseStatusError)(n.status,L);this._reader=n.body.getReader(),this._headersCapability.resolve();const u=p=>n.headers.get(p),{allowRangeRequests:y,suggestedLength:o}=(0,Y.validateRangeRequestCapabilities)({getResponseHeader:u,isHttp:this._stream.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});this._isRangeSupported=y,this._contentLength=o||this._contentLength,this._filename=(0,Y.extractFilenameFromHeader)(u),!this._isStreamingSupported&&this._isRangeSupported&&this.cancel(new s.AbortException("Streaming is disabled."))}).catch(this._headersCapability.reject),this.onProgress=null}get headersReady(){return this._headersCapability.promise}get filename(){return this._filename}get contentLength(){return this._contentLength}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}async read(){var L;await this._headersCapability.promise;const{value:k,done:w}=await this._reader.read();return w?{value:k,done:w}:(this._loaded+=k.byteLength,(L=this.onProgress)==null||L.call(this,{loaded:this._loaded,total:this._contentLength}),{value:ZZ(k),done:!1})}cancel(k){var w;(w=this._reader)==null||w.cancel(k),this._abortController.abort()}}class N{constructor(k,w,L){this._stream=k,this._reader=null,this._loaded=0;const n=k.source;this._withCredentials=n.withCredentials||!1,this._readCapability=new s.PromiseCapability,this._isStreamingSupported=!n.disableStream,this._abortController=new AbortController,this._headers=r(this._stream.httpHeaders),this._headers.append("Range",`bytes=${w}-${L-1}`);const u=n.url;fetch(u,B(this._headers,this._withCredentials,this._abortController)).then(y=>{if(!(0,Y.validateResponseStatus)(y.status))throw(0,Y.createResponseStatusError)(y.status,u);this._readCapability.resolve(),this._reader=y.body.getReader()}).catch(this._readCapability.reject),this.onProgress=null}get isStreamingSupported(){return this._isStreamingSupported}async read(){var L;await this._readCapability.promise;const{value:k,done:w}=await this._reader.read();return w?{value:k,done:w}:(this._loaded+=k.byteLength,(L=this.onProgress)==null||L.call(this,{loaded:this._loaded}),{value:ZZ(k),done:!1})}cancel(k){var w;(w=this._reader)==null||w.cancel(k),this._abortController.abort()}}},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.createResponseStatusError=C,m.extractFilenameFromHeader=ZZ,m.validateRangeRequestCapabilities=r,m.validateResponseStatus=D;var s=O(1),Y=O(21),B=O(6);function r({getResponseHeader:N,isHttp:j,rangeChunkSize:k,disableRange:w}){const L={allowRangeRequests:!1,suggestedLength:void 0},n=parseInt(N("Content-Length"),10);return!Number.isInteger(n)||(L.suggestedLength=n,n<=2*k)||w||!j||N("Accept-Ranges")!=="bytes"||(N("Content-Encoding")||"identity")!=="identity"||(L.allowRangeRequests=!0),L}function ZZ(N){const j=N("Content-Disposition");if(j){let k=(0,Y.getFilenameFromContentDispositionHeader)(j);if(k.includes("%"))try{k=decodeURIComponent(k)}catch{}if((0,B.isPdfFile)(k))return k}return null}function C(N,j){return N===404||N===0&&j.startsWith("file:")?new s.MissingPDFException('Missing PDF "'+j+'".'):new s.UnexpectedResponseException(`Unexpected server response (${N}) while retrieving PDF "${j}".`,N)}function D(N){return N===200||N===206}},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.getFilenameFromContentDispositionHeader=Y;var s=O(1);function Y(B){let r=!0,ZZ=C("filename\\*","i").exec(B);if(ZZ){ZZ=ZZ[1];let n=k(ZZ);return n=unescape(n),n=w(n),n=L(n),N(n)}if(ZZ=j(B),ZZ){const n=L(ZZ);return N(n)}if(ZZ=C("filename","i").exec(B),ZZ){ZZ=ZZ[1];let n=k(ZZ);return n=L(n),N(n)}function C(n,u){return new RegExp("(?:^|;)\\s*"+n+'\\s*=\\s*([^";\\s][^;\\s]*|"(?:[^"\\\\]|\\\\"?)+"?)',u)}function D(n,u){if(n){if(!/^[\x00-\xFF]+$/.test(u))return u;try{const y=new TextDecoder(n,{fatal:!0}),o=(0,s.stringToBytes)(u);u=y.decode(o),r=!1}catch{}}return u}function N(n){return r&&/[\x80-\xff]/.test(n)&&(n=D("utf-8",n),r&&(n=D("iso-8859-1",n))),n}function j(n){const u=[];let y;const o=C("filename\\*((?!0\\d)\\d+)(\\*?)","ig");for(;(y=o.exec(n))!==null;){let[,e,G,W]=y;if(e=parseInt(e,10),e in u){if(e===0)break;continue}u[e]=[G,W]}const p=[];for(let e=0;e<u.length&&e in u;++e){let[G,W]=u[e];W=k(W),G&&(W=unescape(W),e===0&&(W=w(W))),p.push(W)}return p.join("")}function k(n){if(n.startsWith('"')){const u=n.slice(1).split('\\"');for(let y=0;y<u.length;++y){const o=u[y].indexOf('"');o!==-1&&(u[y]=u[y].slice(0,o),u.length=y+1),u[y]=u[y].replaceAll(/\\(.)/g,"$1")}n=u.join('"')}return n}function w(n){const u=n.indexOf("'");if(u===-1)return n;const y=n.slice(0,u),p=n.slice(u+1).replace(/^[^']*'/,"");return D(y,p)}function L(n){return!n.startsWith("=?")||/[\x00-\x19\x80-\xff]/.test(n)?n:n.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g,function(u,y,o,p){if(o==="q"||o==="Q")return p=p.replaceAll("_"," "),p=p.replaceAll(/=([0-9a-fA-F]{2})/g,function(e,G){return String.fromCharCode(parseInt(G,16))}),D(y,p);try{p=atob(p)}catch{}return D(y,p)})}return""}},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.PDFNetworkStream=void 0;var s=O(1),Y=O(20);const B=200,r=206;function ZZ(k){const w=k.response;return typeof w!="string"?w:(0,s.stringToBytes)(w).buffer}class C{constructor(w,L={}){this.url=w,this.isHttp=/^https?:/i.test(w),this.httpHeaders=this.isHttp&&L.httpHeaders||Object.create(null),this.withCredentials=L.withCredentials||!1,this.currXhrId=0,this.pendingRequests=Object.create(null)}requestRange(w,L,n){const u={begin:w,end:L};for(const y in n)u[y]=n[y];return this.request(u)}requestFull(w){return this.request(w)}request(w){const L=new XMLHttpRequest,n=this.currXhrId++,u=this.pendingRequests[n]={xhr:L};L.open("GET",this.url),L.withCredentials=this.withCredentials;for(const y in this.httpHeaders){const o=this.httpHeaders[y];o!==void 0&&L.setRequestHeader(y,o)}return this.isHttp&&"begin"in w&&"end"in w?(L.setRequestHeader("Range",`bytes=${w.begin}-${w.end-1}`),u.expectedStatus=r):u.expectedStatus=B,L.responseType="arraybuffer",w.onError&&(L.onerror=function(y){w.onError(L.status)}),L.onreadystatechange=this.onStateChange.bind(this,n),L.onprogress=this.onProgress.bind(this,n),u.onHeadersReceived=w.onHeadersReceived,u.onDone=w.onDone,u.onError=w.onError,u.onProgress=w.onProgress,L.send(null),n}onProgress(w,L){var u;const n=this.pendingRequests[w];n&&((u=n.onProgress)==null||u.call(n,L))}onStateChange(w,L){var e,G,W;const n=this.pendingRequests[w];if(!n)return;const u=n.xhr;if(u.readyState>=2&&n.onHeadersReceived&&(n.onHeadersReceived(),delete n.onHeadersReceived),u.readyState!==4||!(w in this.pendingRequests))return;if(delete this.pendingRequests[w],u.status===0&&this.isHttp){(e=n.onError)==null||e.call(n,u.status);return}const y=u.status||B;if(!(y===B&&n.expectedStatus===r)&&y!==n.expectedStatus){(G=n.onError)==null||G.call(n,u.status);return}const p=ZZ(u);if(y===r){const z=u.getResponseHeader("Content-Range"),M=/bytes (\d+)-(\d+)\/(\d+)/.exec(z);n.onDone({begin:parseInt(M[1],10),chunk:p})}else p?n.onDone({begin:0,chunk:p}):(W=n.onError)==null||W.call(n,u.status)}getRequestXhr(w){return this.pendingRequests[w].xhr}isPendingRequest(w){return w in this.pendingRequests}abortRequest(w){const L=this.pendingRequests[w].xhr;delete this.pendingRequests[w],L.abort()}}class D{constructor(w){this._source=w,this._manager=new C(w.url,{httpHeaders:w.httpHeaders,withCredentials:w.withCredentials}),this._rangeChunkSize=w.rangeChunkSize,this._fullRequestReader=null,this._rangeRequestReaders=[]}_onRangeRequestReaderClosed(w){const L=this._rangeRequestReaders.indexOf(w);L>=0&&this._rangeRequestReaders.splice(L,1)}getFullReader(){return(0,s.assert)(!this._fullRequestReader,"PDFNetworkStream.getFullReader can only be called once."),this._fullRequestReader=new N(this._manager,this._source),this._fullRequestReader}getRangeReader(w,L){const n=new j(this._manager,w,L);return n.onClosed=this._onRangeRequestReaderClosed.bind(this),this._rangeRequestReaders.push(n),n}cancelAllRequests(w){var L;(L=this._fullRequestReader)==null||L.cancel(w);for(const n of this._rangeRequestReaders.slice(0))n.cancel(w)}}m.PDFNetworkStream=D;class N{constructor(w,L){this._manager=w;const n={onHeadersReceived:this._onHeadersReceived.bind(this),onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=L.url,this._fullRequestId=w.requestFull(n),this._headersReceivedCapability=new s.PromiseCapability,this._disableRange=L.disableRange||!1,this._contentLength=L.length,this._rangeChunkSize=L.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._isStreamingSupported=!1,this._isRangeSupported=!1,this._cachedChunks=[],this._requests=[],this._done=!1,this._storedError=void 0,this._filename=null,this.onProgress=null}_onHeadersReceived(){const w=this._fullRequestId,L=this._manager.getRequestXhr(w),n=o=>L.getResponseHeader(o),{allowRangeRequests:u,suggestedLength:y}=(0,Y.validateRangeRequestCapabilities)({getResponseHeader:n,isHttp:this._manager.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});u&&(this._isRangeSupported=!0),this._contentLength=y||this._contentLength,this._filename=(0,Y.extractFilenameFromHeader)(n),this._isRangeSupported&&this._manager.abortRequest(w),this._headersReceivedCapability.resolve()}_onDone(w){if(w&&(this._requests.length>0?this._requests.shift().resolve({value:w.chunk,done:!1}):this._cachedChunks.push(w.chunk)),this._done=!0,!(this._cachedChunks.length>0)){for(const L of this._requests)L.resolve({value:void 0,done:!0});this._requests.length=0}}_onError(w){this._storedError=(0,Y.createResponseStatusError)(w,this._url),this._headersReceivedCapability.reject(this._storedError);for(const L of this._requests)L.reject(this._storedError);this._requests.length=0,this._cachedChunks.length=0}_onProgress(w){var L;(L=this.onProgress)==null||L.call(this,{loaded:w.loaded,total:w.lengthComputable?w.total:this._contentLength})}get filename(){return this._filename}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}get contentLength(){return this._contentLength}get headersReady(){return this._headersReceivedCapability.promise}async read(){if(this._storedError)throw this._storedError;if(this._cachedChunks.length>0)return{value:this._cachedChunks.shift(),done:!1};if(this._done)return{value:void 0,done:!0};const w=new s.PromiseCapability;return this._requests.push(w),w.promise}cancel(w){this._done=!0,this._headersReceivedCapability.reject(w);for(const L of this._requests)L.resolve({value:void 0,done:!0});this._requests.length=0,this._manager.isPendingRequest(this._fullRequestId)&&this._manager.abortRequest(this._fullRequestId),this._fullRequestReader=null}}class j{constructor(w,L,n){this._manager=w;const u={onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=w.url,this._requestId=w.requestRange(L,n,u),this._requests=[],this._queuedChunk=null,this._done=!1,this._storedError=void 0,this.onProgress=null,this.onClosed=null}_close(){var w;(w=this.onClosed)==null||w.call(this,this)}_onDone(w){const L=w.chunk;this._requests.length>0?this._requests.shift().resolve({value:L,done:!1}):this._queuedChunk=L,this._done=!0;for(const n of this._requests)n.resolve({value:void 0,done:!0});this._requests.length=0,this._close()}_onError(w){this._storedError=(0,Y.createResponseStatusError)(w,this._url);for(const L of this._requests)L.reject(this._storedError);this._requests.length=0,this._queuedChunk=null}_onProgress(w){var L;this.isStreamingSupported||(L=this.onProgress)==null||L.call(this,{loaded:w.loaded})}get isStreamingSupported(){return!1}async read(){if(this._storedError)throw this._storedError;if(this._queuedChunk!==null){const L=this._queuedChunk;return this._queuedChunk=null,{value:L,done:!1}}if(this._done)return{value:void 0,done:!0};const w=new s.PromiseCapability;return this._requests.push(w),w.promise}cancel(w){this._done=!0;for(const L of this._requests)L.resolve({value:void 0,done:!0});this._requests.length=0,this._manager.isPendingRequest(this._requestId)&&this._manager.abortRequest(this._requestId),this._close()}}},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.PDFNodeStream=void 0;var s=O(1),Y=O(20);const B=/^file:\/\/\/[a-zA-Z]:\//;function r(n){const u=require$$5,y=u.parse(n);return y.protocol==="file:"||y.host?y:/^[a-z]:[/\\]/i.test(n)?u.parse(`file:///${n}`):(y.host||(y.protocol="file:"),y)}class ZZ{constructor(u){this.source=u,this.url=r(u.url),this.isHttp=this.url.protocol==="http:"||this.url.protocol==="https:",this.isFsUrl=this.url.protocol==="file:",this.httpHeaders=this.isHttp&&u.httpHeaders||{},this._fullRequestReader=null,this._rangeRequestReaders=[]}get _progressiveDataLength(){var u;return((u=this._fullRequestReader)==null?void 0:u._loaded)??0}getFullReader(){return(0,s.assert)(!this._fullRequestReader,"PDFNodeStream.getFullReader can only be called once."),this._fullRequestReader=this.isFsUrl?new w(this):new j(this),this._fullRequestReader}getRangeReader(u,y){if(y<=this._progressiveDataLength)return null;const o=this.isFsUrl?new L(this,u,y):new k(this,u,y);return this._rangeRequestReaders.push(o),o}cancelAllRequests(u){var y;(y=this._fullRequestReader)==null||y.cancel(u);for(const o of this._rangeRequestReaders.slice(0))o.cancel(u)}}m.PDFNodeStream=ZZ;class C{constructor(u){this._url=u.url,this._done=!1,this._storedError=null,this.onProgress=null;const y=u.source;this._contentLength=y.length,this._loaded=0,this._filename=null,this._disableRange=y.disableRange||!1,this._rangeChunkSize=y.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._isStreamingSupported=!y.disableStream,this._isRangeSupported=!y.disableRange,this._readableStream=null,this._readCapability=new s.PromiseCapability,this._headersCapability=new s.PromiseCapability}get headersReady(){return this._headersCapability.promise}get filename(){return this._filename}get contentLength(){return this._contentLength}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}async read(){var o;if(await this._readCapability.promise,this._done)return{value:void 0,done:!0};if(this._storedError)throw this._storedError;const u=this._readableStream.read();return u===null?(this._readCapability=new s.PromiseCapability,this.read()):(this._loaded+=u.length,(o=this.onProgress)==null||o.call(this,{loaded:this._loaded,total:this._contentLength}),{value:new Uint8Array(u).buffer,done:!1})}cancel(u){if(!this._readableStream){this._error(u);return}this._readableStream.destroy(u)}_error(u){this._storedError=u,this._readCapability.resolve()}_setReadableStream(u){this._readableStream=u,u.on("readable",()=>{this._readCapability.resolve()}),u.on("end",()=>{u.destroy(),this._done=!0,this._readCapability.resolve()}),u.on("error",y=>{this._error(y)}),!this._isStreamingSupported&&this._isRangeSupported&&this._error(new s.AbortException("streaming is disabled")),this._storedError&&this._readableStream.destroy(this._storedError)}}class D{constructor(u){this._url=u.url,this._done=!1,this._storedError=null,this.onProgress=null,this._loaded=0,this._readableStream=null,this._readCapability=new s.PromiseCapability;const y=u.source;this._isStreamingSupported=!y.disableStream}get isStreamingSupported(){return this._isStreamingSupported}async read(){var o;if(await this._readCapability.promise,this._done)return{value:void 0,done:!0};if(this._storedError)throw this._storedError;const u=this._readableStream.read();return u===null?(this._readCapability=new s.PromiseCapability,this.read()):(this._loaded+=u.length,(o=this.onProgress)==null||o.call(this,{loaded:this._loaded}),{value:new Uint8Array(u).buffer,done:!1})}cancel(u){if(!this._readableStream){this._error(u);return}this._readableStream.destroy(u)}_error(u){this._storedError=u,this._readCapability.resolve()}_setReadableStream(u){this._readableStream=u,u.on("readable",()=>{this._readCapability.resolve()}),u.on("end",()=>{u.destroy(),this._done=!0,this._readCapability.resolve()}),u.on("error",y=>{this._error(y)}),this._storedError&&this._readableStream.destroy(this._storedError)}}function N(n,u){return{protocol:n.protocol,auth:n.auth,host:n.hostname,port:n.port,path:n.path,method:"GET",headers:u}}class j extends C{constructor(u){super(u);const y=o=>{if(o.statusCode===404){const W=new s.MissingPDFException(`Missing PDF "${this._url}".`);this._storedError=W,this._headersCapability.reject(W);return}this._headersCapability.resolve(),this._setReadableStream(o);const p=W=>this._readableStream.headers[W.toLowerCase()],{allowRangeRequests:e,suggestedLength:G}=(0,Y.validateRangeRequestCapabilities)({getResponseHeader:p,isHttp:u.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});this._isRangeSupported=e,this._contentLength=G||this._contentLength,this._filename=(0,Y.extractFilenameFromHeader)(p)};if(this._request=null,this._url.protocol==="http:"){const o=require$$5;this._request=o.request(N(this._url,u.httpHeaders),y)}else{const o=require$$5;this._request=o.request(N(this._url,u.httpHeaders),y)}this._request.on("error",o=>{this._storedError=o,this._headersCapability.reject(o)}),this._request.end()}}class k extends D{constructor(u,y,o){super(u),this._httpHeaders={};for(const e in u.httpHeaders){const G=u.httpHeaders[e];G!==void 0&&(this._httpHeaders[e]=G)}this._httpHeaders.Range=`bytes=${y}-${o-1}`;const p=e=>{if(e.statusCode===404){const G=new s.MissingPDFException(`Missing PDF "${this._url}".`);this._storedError=G;return}this._setReadableStream(e)};if(this._request=null,this._url.protocol==="http:"){const e=require$$5;this._request=e.request(N(this._url,this._httpHeaders),p)}else{const e=require$$5;this._request=e.request(N(this._url,this._httpHeaders),p)}this._request.on("error",e=>{this._storedError=e}),this._request.end()}}class w extends C{constructor(u){super(u);let y=decodeURIComponent(this._url.path);B.test(this._url.href)&&(y=y.replace(/^\//,""));const o=require$$5;o.lstat(y,(p,e)=>{if(p){p.code==="ENOENT"&&(p=new s.MissingPDFException(`Missing PDF "${y}".`)),this._storedError=p,this._headersCapability.reject(p);return}this._contentLength=e.size,this._setReadableStream(o.createReadStream(y)),this._headersCapability.resolve()})}}class L extends D{constructor(u,y,o){super(u);let p=decodeURIComponent(this._url.path);B.test(this._url.href)&&(p=p.replace(/^\//,""));const e=require$$5;this._setReadableStream(e.createReadStream(p,{start:y,end:o-1}))}}},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.SVGGraphics=void 0;var s=O(6),Y=O(1);const B={fontStyle:"normal",fontWeight:"normal",fillColor:"#000000"},r="http://www.w3.org/XML/1998/namespace",ZZ="http://www.w3.org/1999/xlink",C=["butt","round","square"],D=["miter","round","bevel"],N=function(e,G="",W=!1){if(URL.createObjectURL&&typeof Blob<"u"&&!W)return URL.createObjectURL(new Blob([e],{type:G}));const z="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";let M=`data:${G};base64,`;for(let i=0,x=e.length;i<x;i+=3){const T=e[i]&255,Q=e[i+1]&255,f=e[i+2]&255,I=T>>2,Wl=(T&3)<<4|Q>>4,ql=i+1<x?(Q&15)<<2|f>>6:64,cZ=i+2<x?f&63:64;M+=z[I]+z[Wl]+z[ql]+z[cZ]}return M},j=function(){const e=new Uint8Array([137,80,78,71,13,10,26,10]),G=12,W=new Int32Array(256);for(let f=0;f<256;f++){let I=f;for(let Wl=0;Wl<8;Wl++)I=I&1?3988292384^I>>1&2147483647:I>>1&2147483647;W[f]=I}function z(f,I,Wl){let ql=-1;for(let cZ=I;cZ<Wl;cZ++){const v=(ql^f[cZ])&255,tZ=W[v];ql=ql>>>8^tZ}return ql^-1}function M(f,I,Wl,ql){let cZ=ql;const v=I.length;Wl[cZ]=v>>24&255,Wl[cZ+1]=v>>16&255,Wl[cZ+2]=v>>8&255,Wl[cZ+3]=v&255,cZ+=4,Wl[cZ]=f.charCodeAt(0)&255,Wl[cZ+1]=f.charCodeAt(1)&255,Wl[cZ+2]=f.charCodeAt(2)&255,Wl[cZ+3]=f.charCodeAt(3)&255,cZ+=4,Wl.set(I,cZ),cZ+=I.length;const tZ=z(Wl,ql+4,cZ);Wl[cZ]=tZ>>24&255,Wl[cZ+1]=tZ>>16&255,Wl[cZ+2]=tZ>>8&255,Wl[cZ+3]=tZ&255}function i(f,I,Wl){let ql=1,cZ=0;for(let v=I;v<Wl;++v)ql=(ql+(f[v]&255))%65521,cZ=(cZ+ql)%65521;return cZ<<16|ql}function x(f){if(!Y.isNodeJS)return T(f);try{const I=parseInt(process.versions.node)>=8?f:Buffer.from(f),Wl=require$$5.deflateSync(I,{level:9});return Wl instanceof Uint8Array?Wl:new Uint8Array(Wl)}catch(I){(0,Y.warn)("Not compressing PNG because zlib.deflateSync is unavailable: "+I)}return T(f)}function T(f){let I=f.length;const Wl=65535,ql=Math.ceil(I/Wl),cZ=new Uint8Array(2+I+ql*5+4);let v=0;cZ[v++]=120,cZ[v++]=156;let tZ=0;for(;I>Wl;)cZ[v++]=0,cZ[v++]=255,cZ[v++]=255,cZ[v++]=0,cZ[v++]=0,cZ.set(f.subarray(tZ,tZ+Wl),v),v+=Wl,tZ+=Wl,I-=Wl;cZ[v++]=1,cZ[v++]=I&255,cZ[v++]=I>>8&255,cZ[v++]=~I&65535&255,cZ[v++]=(~I&65535)>>8&255,cZ.set(f.subarray(tZ),v),v+=f.length-tZ;const WZ=i(f,0,f.length);return cZ[v++]=WZ>>24&255,cZ[v++]=WZ>>16&255,cZ[v++]=WZ>>8&255,cZ[v++]=WZ&255,cZ}function Q(f,I,Wl,ql){const cZ=f.width,v=f.height;let tZ,WZ,nZ;const VZ=f.data;switch(I){case Y.ImageKind.GRAYSCALE_1BPP:WZ=0,tZ=1,nZ=cZ+7>>3;break;case Y.ImageKind.RGB_24BPP:WZ=2,tZ=8,nZ=cZ*3;break;case Y.ImageKind.RGBA_32BPP:WZ=6,tZ=8,nZ=cZ*4;break;default:throw new Error("invalid format")}const R=new Uint8Array((1+nZ)*v);let c=0,b=0;for(let E=0;E<v;++E)R[c++]=0,R.set(VZ.subarray(b,b+nZ),c),b+=nZ,c+=nZ;if(I===Y.ImageKind.GRAYSCALE_1BPP&&ql){c=0;for(let E=0;E<v;E++){c++;for(let _l=0;_l<nZ;_l++)R[c++]^=255}}const d=new Uint8Array([cZ>>24&255,cZ>>16&255,cZ>>8&255,cZ&255,v>>24&255,v>>16&255,v>>8&255,v&255,tZ,WZ,0,0,0]),a=x(R),h=e.length+G*3+d.length+a.length,V=new Uint8Array(h);let J=0;return V.set(e,J),J+=e.length,M("IHDR",d,V,J),J+=G+d.length,M("IDATA",a,V,J),J+=G+a.length,M("IEND",new Uint8Array(0),V,J),N(V,"image/png",Wl)}return function(I,Wl,ql){const cZ=I.kind===void 0?Y.ImageKind.GRAYSCALE_1BPP:I.kind;return Q(I,cZ,Wl,ql)}}();class k{constructor(){this.fontSizeScale=1,this.fontWeight=B.fontWeight,this.fontSize=0,this.textMatrix=Y.IDENTITY_MATRIX,this.fontMatrix=Y.FONT_IDENTITY_MATRIX,this.leading=0,this.textRenderingMode=Y.TextRenderingMode.FILL,this.textMatrixScale=1,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRise=0,this.fillColor=B.fillColor,this.strokeColor="#000000",this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.lineJoin="",this.lineCap="",this.miterLimit=0,this.dashArray=[],this.dashPhase=0,this.dependencies=[],this.activeClipUrl=null,this.clipGroup=null,this.maskId=""}clone(){return Object.create(this)}setCurrentPoint(G,W){this.x=G,this.y=W}}function w(e){let G=[];const W=[];for(const z of e){if(z.fn==="save"){G.push({fnId:92,fn:"group",items:[]}),W.push(G),G=G.at(-1).items;continue}z.fn==="restore"?G=W.pop():G.push(z)}return G}function L(e){if(Number.isInteger(e))return e.toString();const G=e.toFixed(10);let W=G.length-1;if(G[W]!=="0")return G;do W--;while(G[W]==="0");return G.substring(0,G[W]==="."?W:W+1)}function n(e){if(e[4]===0&&e[5]===0){if(e[1]===0&&e[2]===0)return e[0]===1&&e[3]===1?"":`scale(${L(e[0])} ${L(e[3])})`;if(e[0]===e[3]&&e[1]===-e[2]){const G=Math.acos(e[0])*180/Math.PI;return`rotate(${L(G)})`}}else if(e[0]===1&&e[1]===0&&e[2]===0&&e[3]===1)return`translate(${L(e[4])} ${L(e[5])})`;return`matrix(${L(e[0])} ${L(e[1])} ${L(e[2])} ${L(e[3])} ${L(e[4])} ${L(e[5])})`}let u=0,y=0,o=0;class p{constructor(G,W,z=!1){(0,s.deprecated)("The SVG back-end is no longer maintained and *may* be removed in the future."),this.svgFactory=new s.DOMSVGFactory,this.current=new k,this.transformMatrix=Y.IDENTITY_MATRIX,this.transformStack=[],this.extraStack=[],this.commonObjs=G,this.objs=W,this.pendingClip=null,this.pendingEOFill=!1,this.embedFonts=!1,this.embeddedFonts=Object.create(null),this.cssStyle=null,this.forceDataSchema=!!z,this._operatorIdMapping=[];for(const M in Y.OPS)this._operatorIdMapping[Y.OPS[M]]=M}getObject(G,W=null){return typeof G=="string"?G.startsWith("g_")?this.commonObjs.get(G):this.objs.get(G):W}save(){this.transformStack.push(this.transformMatrix);const G=this.current;this.extraStack.push(G),this.current=G.clone()}restore(){this.transformMatrix=this.transformStack.pop(),this.current=this.extraStack.pop(),this.pendingClip=null,this.tgrp=null}group(G){this.save(),this.executeOpTree(G),this.restore()}loadDependencies(G){const W=G.fnArray,z=G.argsArray;for(let M=0,i=W.length;M<i;M++)if(W[M]===Y.OPS.dependency)for(const x of z[M]){const T=x.startsWith("g_")?this.commonObjs:this.objs,Q=new Promise(f=>{T.get(x,f)});this.current.dependencies.push(Q)}return Promise.all(this.current.dependencies)}transform(G,W,z,M,i,x){const T=[G,W,z,M,i,x];this.transformMatrix=Y.Util.transform(this.transformMatrix,T),this.tgrp=null}getSVG(G,W){this.viewport=W;const z=this._initialize(W);return this.loadDependencies(G).then(()=>(this.transformMatrix=Y.IDENTITY_MATRIX,this.executeOpTree(this.convertOpList(G)),z))}convertOpList(G){const W=this._operatorIdMapping,z=G.argsArray,M=G.fnArray,i=[];for(let x=0,T=M.length;x<T;x++){const Q=M[x];i.push({fnId:Q,fn:W[Q],args:z[x]})}return w(i)}executeOpTree(G){for(const W of G){const z=W.fn,M=W.fnId,i=W.args;switch(M|0){case Y.OPS.beginText:this.beginText();break;case Y.OPS.dependency:break;case Y.OPS.setLeading:this.setLeading(i);break;case Y.OPS.setLeadingMoveText:this.setLeadingMoveText(i[0],i[1]);break;case Y.OPS.setFont:this.setFont(i);break;case Y.OPS.showText:this.showText(i[0]);break;case Y.OPS.showSpacedText:this.showText(i[0]);break;case Y.OPS.endText:this.endText();break;case Y.OPS.moveText:this.moveText(i[0],i[1]);break;case Y.OPS.setCharSpacing:this.setCharSpacing(i[0]);break;case Y.OPS.setWordSpacing:this.setWordSpacing(i[0]);break;case Y.OPS.setHScale:this.setHScale(i[0]);break;case Y.OPS.setTextMatrix:this.setTextMatrix(i[0],i[1],i[2],i[3],i[4],i[5]);break;case Y.OPS.setTextRise:this.setTextRise(i[0]);break;case Y.OPS.setTextRenderingMode:this.setTextRenderingMode(i[0]);break;case Y.OPS.setLineWidth:this.setLineWidth(i[0]);break;case Y.OPS.setLineJoin:this.setLineJoin(i[0]);break;case Y.OPS.setLineCap:this.setLineCap(i[0]);break;case Y.OPS.setMiterLimit:this.setMiterLimit(i[0]);break;case Y.OPS.setFillRGBColor:this.setFillRGBColor(i[0],i[1],i[2]);break;case Y.OPS.setStrokeRGBColor:this.setStrokeRGBColor(i[0],i[1],i[2]);break;case Y.OPS.setStrokeColorN:this.setStrokeColorN(i);break;case Y.OPS.setFillColorN:this.setFillColorN(i);break;case Y.OPS.shadingFill:this.shadingFill(i[0]);break;case Y.OPS.setDash:this.setDash(i[0],i[1]);break;case Y.OPS.setRenderingIntent:this.setRenderingIntent(i[0]);break;case Y.OPS.setFlatness:this.setFlatness(i[0]);break;case Y.OPS.setGState:this.setGState(i[0]);break;case Y.OPS.fill:this.fill();break;case Y.OPS.eoFill:this.eoFill();break;case Y.OPS.stroke:this.stroke();break;case Y.OPS.fillStroke:this.fillStroke();break;case Y.OPS.eoFillStroke:this.eoFillStroke();break;case Y.OPS.clip:this.clip("nonzero");break;case Y.OPS.eoClip:this.clip("evenodd");break;case Y.OPS.paintSolidColorImageMask:this.paintSolidColorImageMask();break;case Y.OPS.paintImageXObject:this.paintImageXObject(i[0]);break;case Y.OPS.paintInlineImageXObject:this.paintInlineImageXObject(i[0]);break;case Y.OPS.paintImageMaskXObject:this.paintImageMaskXObject(i[0]);break;case Y.OPS.paintFormXObjectBegin:this.paintFormXObjectBegin(i[0],i[1]);break;case Y.OPS.paintFormXObjectEnd:this.paintFormXObjectEnd();break;case Y.OPS.closePath:this.closePath();break;case Y.OPS.closeStroke:this.closeStroke();break;case Y.OPS.closeFillStroke:this.closeFillStroke();break;case Y.OPS.closeEOFillStroke:this.closeEOFillStroke();break;case Y.OPS.nextLine:this.nextLine();break;case Y.OPS.transform:this.transform(i[0],i[1],i[2],i[3],i[4],i[5]);break;case Y.OPS.constructPath:this.constructPath(i[0],i[1]);break;case Y.OPS.endPath:this.endPath();break;case 92:this.group(W.items);break;default:(0,Y.warn)(`Unimplemented operator ${z}`);break}}}setWordSpacing(G){this.current.wordSpacing=G}setCharSpacing(G){this.current.charSpacing=G}nextLine(){this.moveText(0,this.current.leading)}setTextMatrix(G,W,z,M,i,x){const T=this.current;T.textMatrix=T.lineMatrix=[G,W,z,M,i,x],T.textMatrixScale=Math.hypot(G,W),T.x=T.lineX=0,T.y=T.lineY=0,T.xcoords=[],T.ycoords=[],T.tspan=this.svgFactory.createElement("svg:tspan"),T.tspan.setAttributeNS(null,"font-family",T.fontFamily),T.tspan.setAttributeNS(null,"font-size",`${L(T.fontSize)}px`),T.tspan.setAttributeNS(null,"y",L(-T.y)),T.txtElement=this.svgFactory.createElement("svg:text"),T.txtElement.append(T.tspan)}beginText(){const G=this.current;G.x=G.lineX=0,G.y=G.lineY=0,G.textMatrix=Y.IDENTITY_MATRIX,G.lineMatrix=Y.IDENTITY_MATRIX,G.textMatrixScale=1,G.tspan=this.svgFactory.createElement("svg:tspan"),G.txtElement=this.svgFactory.createElement("svg:text"),G.txtgrp=this.svgFactory.createElement("svg:g"),G.xcoords=[],G.ycoords=[]}moveText(G,W){const z=this.current;z.x=z.lineX+=G,z.y=z.lineY+=W,z.xcoords=[],z.ycoords=[],z.tspan=this.svgFactory.createElement("svg:tspan"),z.tspan.setAttributeNS(null,"font-family",z.fontFamily),z.tspan.setAttributeNS(null,"font-size",`${L(z.fontSize)}px`),z.tspan.setAttributeNS(null,"y",L(-z.y))}showText(G){const W=this.current,z=W.font,M=W.fontSize;if(M===0)return;const i=W.fontSizeScale,x=W.charSpacing,T=W.wordSpacing,Q=W.fontDirection,f=W.textHScale*Q,I=z.vertical,Wl=I?1:-1,ql=z.defaultVMetrics,cZ=M*W.fontMatrix[0];let v=0;for(const nZ of G){if(nZ===null){v+=Q*T;continue}else if(typeof nZ=="number"){v+=Wl*nZ*M/1e3;continue}const VZ=(nZ.isSpace?T:0)+x,R=nZ.fontChar;let c,b,d=nZ.width;if(I){let h;const V=nZ.vmetric||ql;h=nZ.vmetric?V[1]:d*.5,h=-h*cZ;const J=V[2]*cZ;d=V?-V[0]:d,c=h/i,b=(v+J)/i}else c=v/i,b=0;(nZ.isInFont||z.missingFile)&&(W.xcoords.push(W.x+c),I&&W.ycoords.push(-W.y+b),W.tspan.textContent+=R);const a=I?d*cZ-VZ*Q:d*cZ+VZ*Q;v+=a}W.tspan.setAttributeNS(null,"x",W.xcoords.map(L).join(" ")),I?W.tspan.setAttributeNS(null,"y",W.ycoords.map(L).join(" ")):W.tspan.setAttributeNS(null,"y",L(-W.y)),I?W.y-=v:W.x+=v*f,W.tspan.setAttributeNS(null,"font-family",W.fontFamily),W.tspan.setAttributeNS(null,"font-size",`${L(W.fontSize)}px`),W.fontStyle!==B.fontStyle&&W.tspan.setAttributeNS(null,"font-style",W.fontStyle),W.fontWeight!==B.fontWeight&&W.tspan.setAttributeNS(null,"font-weight",W.fontWeight);const tZ=W.textRenderingMode&Y.TextRenderingMode.FILL_STROKE_MASK;if(tZ===Y.TextRenderingMode.FILL||tZ===Y.TextRenderingMode.FILL_STROKE?(W.fillColor!==B.fillColor&&W.tspan.setAttributeNS(null,"fill",W.fillColor),W.fillAlpha<1&&W.tspan.setAttributeNS(null,"fill-opacity",W.fillAlpha)):W.textRenderingMode===Y.TextRenderingMode.ADD_TO_PATH?W.tspan.setAttributeNS(null,"fill","transparent"):W.tspan.setAttributeNS(null,"fill","none"),tZ===Y.TextRenderingMode.STROKE||tZ===Y.TextRenderingMode.FILL_STROKE){const nZ=1/(W.textMatrixScale||1);this._setStrokeAttributes(W.tspan,nZ)}let WZ=W.textMatrix;W.textRise!==0&&(WZ=WZ.slice(),WZ[5]+=W.textRise),W.txtElement.setAttributeNS(null,"transform",`${n(WZ)} scale(${L(f)}, -1)`),W.txtElement.setAttributeNS(r,"xml:space","preserve"),W.txtElement.append(W.tspan),W.txtgrp.append(W.txtElement),this._ensureTransformGroup().append(W.txtElement)}setLeadingMoveText(G,W){this.setLeading(-W),this.moveText(G,W)}addFontStyle(G){if(!G.data)throw new Error('addFontStyle: No font data available, ensure that the "fontExtraProperties" API parameter is set.');this.cssStyle||(this.cssStyle=this.svgFactory.createElement("svg:style"),this.cssStyle.setAttributeNS(null,"type","text/css"),this.defs.append(this.cssStyle));const W=N(G.data,G.mimetype,this.forceDataSchema);this.cssStyle.textContent+=`@font-face { font-family: "${G.loadedName}"; src: url(${W}); }
|
|
4
|
-
`}setFont(G){const W=this.current,z=this.commonObjs.get(G[0]);let M=G[1];W.font=z,this.embedFonts&&!z.missingFile&&!this.embeddedFonts[z.loadedName]&&(this.addFontStyle(z),this.embeddedFonts[z.loadedName]=z),W.fontMatrix=z.fontMatrix||Y.FONT_IDENTITY_MATRIX;let i="normal";z.black?i="900":z.bold&&(i="bold");const x=z.italic?"italic":"normal";M<0?(M=-M,W.fontDirection=-1):W.fontDirection=1,W.fontSize=M,W.fontFamily=z.loadedName,W.fontWeight=i,W.fontStyle=x,W.tspan=this.svgFactory.createElement("svg:tspan"),W.tspan.setAttributeNS(null,"y",L(-W.y)),W.xcoords=[],W.ycoords=[]}endText(){var W;const G=this.current;G.textRenderingMode&Y.TextRenderingMode.ADD_TO_PATH_FLAG&&((W=G.txtElement)!=null&&W.hasChildNodes())&&(G.element=G.txtElement,this.clip("nonzero"),this.endPath())}setLineWidth(G){G>0&&(this.current.lineWidth=G)}setLineCap(G){this.current.lineCap=C[G]}setLineJoin(G){this.current.lineJoin=D[G]}setMiterLimit(G){this.current.miterLimit=G}setStrokeAlpha(G){this.current.strokeAlpha=G}setStrokeRGBColor(G,W,z){this.current.strokeColor=Y.Util.makeHexColor(G,W,z)}setFillAlpha(G){this.current.fillAlpha=G}setFillRGBColor(G,W,z){this.current.fillColor=Y.Util.makeHexColor(G,W,z),this.current.tspan=this.svgFactory.createElement("svg:tspan"),this.current.xcoords=[],this.current.ycoords=[]}setStrokeColorN(G){this.current.strokeColor=this._makeColorN_Pattern(G)}setFillColorN(G){this.current.fillColor=this._makeColorN_Pattern(G)}shadingFill(G){const{width:W,height:z}=this.viewport,M=Y.Util.inverseTransform(this.transformMatrix),[i,x,T,Q]=Y.Util.getAxialAlignedBoundingBox([0,0,W,z],M),f=this.svgFactory.createElement("svg:rect");f.setAttributeNS(null,"x",i),f.setAttributeNS(null,"y",x),f.setAttributeNS(null,"width",T-i),f.setAttributeNS(null,"height",Q-x),f.setAttributeNS(null,"fill",this._makeShadingPattern(G)),this.current.fillAlpha<1&&f.setAttributeNS(null,"fill-opacity",this.current.fillAlpha),this._ensureTransformGroup().append(f)}_makeColorN_Pattern(G){return G[0]==="TilingPattern"?this._makeTilingPattern(G):this._makeShadingPattern(G)}_makeTilingPattern(G){const W=G[1],z=G[2],M=G[3]||Y.IDENTITY_MATRIX,[i,x,T,Q]=G[4],f=G[5],I=G[6],Wl=G[7],ql=`shading${o++}`,[cZ,v,tZ,WZ]=Y.Util.normalizeRect([...Y.Util.applyTransform([i,x],M),...Y.Util.applyTransform([T,Q],M)]),[nZ,VZ]=Y.Util.singularValueDecompose2dScale(M),R=f*nZ,c=I*VZ,b=this.svgFactory.createElement("svg:pattern");b.setAttributeNS(null,"id",ql),b.setAttributeNS(null,"patternUnits","userSpaceOnUse"),b.setAttributeNS(null,"width",R),b.setAttributeNS(null,"height",c),b.setAttributeNS(null,"x",`${cZ}`),b.setAttributeNS(null,"y",`${v}`);const d=this.svg,a=this.transformMatrix,h=this.current.fillColor,V=this.current.strokeColor,J=this.svgFactory.create(tZ-cZ,WZ-v);if(this.svg=J,this.transformMatrix=M,Wl===2){const E=Y.Util.makeHexColor(...W);this.current.fillColor=E,this.current.strokeColor=E}return this.executeOpTree(this.convertOpList(z)),this.svg=d,this.transformMatrix=a,this.current.fillColor=h,this.current.strokeColor=V,b.append(J.childNodes[0]),this.defs.append(b),`url(#${ql})`}_makeShadingPattern(G){switch(typeof G=="string"&&(G=this.objs.get(G)),G[0]){case"RadialAxial":const W=`shading${o++}`,z=G[3];let M;switch(G[1]){case"axial":const i=G[4],x=G[5];M=this.svgFactory.createElement("svg:linearGradient"),M.setAttributeNS(null,"id",W),M.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),M.setAttributeNS(null,"x1",i[0]),M.setAttributeNS(null,"y1",i[1]),M.setAttributeNS(null,"x2",x[0]),M.setAttributeNS(null,"y2",x[1]);break;case"radial":const T=G[4],Q=G[5],f=G[6],I=G[7];M=this.svgFactory.createElement("svg:radialGradient"),M.setAttributeNS(null,"id",W),M.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),M.setAttributeNS(null,"cx",Q[0]),M.setAttributeNS(null,"cy",Q[1]),M.setAttributeNS(null,"r",I),M.setAttributeNS(null,"fx",T[0]),M.setAttributeNS(null,"fy",T[1]),M.setAttributeNS(null,"fr",f);break;default:throw new Error(`Unknown RadialAxial type: ${G[1]}`)}for(const i of z){const x=this.svgFactory.createElement("svg:stop");x.setAttributeNS(null,"offset",i[0]),x.setAttributeNS(null,"stop-color",i[1]),M.append(x)}return this.defs.append(M),`url(#${W})`;case"Mesh":return(0,Y.warn)("Unimplemented pattern Mesh"),null;case"Dummy":return"hotpink";default:throw new Error(`Unknown IR type: ${G[0]}`)}}setDash(G,W){this.current.dashArray=G,this.current.dashPhase=W}constructPath(G,W){const z=this.current;let M=z.x,i=z.y,x=[],T=0;for(const Q of G)switch(Q|0){case Y.OPS.rectangle:M=W[T++],i=W[T++];const f=W[T++],I=W[T++],Wl=M+f,ql=i+I;x.push("M",L(M),L(i),"L",L(Wl),L(i),"L",L(Wl),L(ql),"L",L(M),L(ql),"Z");break;case Y.OPS.moveTo:M=W[T++],i=W[T++],x.push("M",L(M),L(i));break;case Y.OPS.lineTo:M=W[T++],i=W[T++],x.push("L",L(M),L(i));break;case Y.OPS.curveTo:M=W[T+4],i=W[T+5],x.push("C",L(W[T]),L(W[T+1]),L(W[T+2]),L(W[T+3]),L(M),L(i)),T+=6;break;case Y.OPS.curveTo2:x.push("C",L(M),L(i),L(W[T]),L(W[T+1]),L(W[T+2]),L(W[T+3])),M=W[T+2],i=W[T+3],T+=4;break;case Y.OPS.curveTo3:M=W[T+2],i=W[T+3],x.push("C",L(W[T]),L(W[T+1]),L(M),L(i),L(M),L(i)),T+=4;break;case Y.OPS.closePath:x.push("Z");break}x=x.join(" "),z.path&&G.length>0&&G[0]!==Y.OPS.rectangle&&G[0]!==Y.OPS.moveTo?x=z.path.getAttributeNS(null,"d")+x:(z.path=this.svgFactory.createElement("svg:path"),this._ensureTransformGroup().append(z.path)),z.path.setAttributeNS(null,"d",x),z.path.setAttributeNS(null,"fill","none"),z.element=z.path,z.setCurrentPoint(M,i)}endPath(){const G=this.current;if(G.path=null,!this.pendingClip)return;if(!G.element){this.pendingClip=null;return}const W=`clippath${u++}`,z=this.svgFactory.createElement("svg:clipPath");z.setAttributeNS(null,"id",W),z.setAttributeNS(null,"transform",n(this.transformMatrix));const M=G.element.cloneNode(!0);if(this.pendingClip==="evenodd"?M.setAttributeNS(null,"clip-rule","evenodd"):M.setAttributeNS(null,"clip-rule","nonzero"),this.pendingClip=null,z.append(M),this.defs.append(z),G.activeClipUrl){G.clipGroup=null;for(const i of this.extraStack)i.clipGroup=null;z.setAttributeNS(null,"clip-path",G.activeClipUrl)}G.activeClipUrl=`url(#${W})`,this.tgrp=null}clip(G){this.pendingClip=G}closePath(){const G=this.current;if(G.path){const W=`${G.path.getAttributeNS(null,"d")}Z`;G.path.setAttributeNS(null,"d",W)}}setLeading(G){this.current.leading=-G}setTextRise(G){this.current.textRise=G}setTextRenderingMode(G){this.current.textRenderingMode=G}setHScale(G){this.current.textHScale=G/100}setRenderingIntent(G){}setFlatness(G){}setGState(G){for(const[W,z]of G)switch(W){case"LW":this.setLineWidth(z);break;case"LC":this.setLineCap(z);break;case"LJ":this.setLineJoin(z);break;case"ML":this.setMiterLimit(z);break;case"D":this.setDash(z[0],z[1]);break;case"RI":this.setRenderingIntent(z);break;case"FL":this.setFlatness(z);break;case"Font":this.setFont(z);break;case"CA":this.setStrokeAlpha(z);break;case"ca":this.setFillAlpha(z);break;default:(0,Y.warn)(`Unimplemented graphic state operator ${W}`);break}}fill(){const G=this.current;G.element&&(G.element.setAttributeNS(null,"fill",G.fillColor),G.element.setAttributeNS(null,"fill-opacity",G.fillAlpha),this.endPath())}stroke(){const G=this.current;G.element&&(this._setStrokeAttributes(G.element),G.element.setAttributeNS(null,"fill","none"),this.endPath())}_setStrokeAttributes(G,W=1){const z=this.current;let M=z.dashArray;W!==1&&M.length>0&&(M=M.map(function(i){return W*i})),G.setAttributeNS(null,"stroke",z.strokeColor),G.setAttributeNS(null,"stroke-opacity",z.strokeAlpha),G.setAttributeNS(null,"stroke-miterlimit",L(z.miterLimit)),G.setAttributeNS(null,"stroke-linecap",z.lineCap),G.setAttributeNS(null,"stroke-linejoin",z.lineJoin),G.setAttributeNS(null,"stroke-width",L(W*z.lineWidth)+"px"),G.setAttributeNS(null,"stroke-dasharray",M.map(L).join(" ")),G.setAttributeNS(null,"stroke-dashoffset",L(W*z.dashPhase)+"px")}eoFill(){var G;(G=this.current.element)==null||G.setAttributeNS(null,"fill-rule","evenodd"),this.fill()}fillStroke(){this.stroke(),this.fill()}eoFillStroke(){var G;(G=this.current.element)==null||G.setAttributeNS(null,"fill-rule","evenodd"),this.fillStroke()}closeStroke(){this.closePath(),this.stroke()}closeFillStroke(){this.closePath(),this.fillStroke()}closeEOFillStroke(){this.closePath(),this.eoFillStroke()}paintSolidColorImageMask(){const G=this.svgFactory.createElement("svg:rect");G.setAttributeNS(null,"x","0"),G.setAttributeNS(null,"y","0"),G.setAttributeNS(null,"width","1px"),G.setAttributeNS(null,"height","1px"),G.setAttributeNS(null,"fill",this.current.fillColor),this._ensureTransformGroup().append(G)}paintImageXObject(G){const W=this.getObject(G);if(!W){(0,Y.warn)(`Dependent image with object ID ${G} is not ready yet`);return}this.paintInlineImageXObject(W)}paintInlineImageXObject(G,W){const z=G.width,M=G.height,i=j(G,this.forceDataSchema,!!W),x=this.svgFactory.createElement("svg:rect");x.setAttributeNS(null,"x","0"),x.setAttributeNS(null,"y","0"),x.setAttributeNS(null,"width",L(z)),x.setAttributeNS(null,"height",L(M)),this.current.element=x,this.clip("nonzero");const T=this.svgFactory.createElement("svg:image");T.setAttributeNS(ZZ,"xlink:href",i),T.setAttributeNS(null,"x","0"),T.setAttributeNS(null,"y",L(-M)),T.setAttributeNS(null,"width",L(z)+"px"),T.setAttributeNS(null,"height",L(M)+"px"),T.setAttributeNS(null,"transform",`scale(${L(1/z)} ${L(-1/M)})`),W?W.append(T):this._ensureTransformGroup().append(T)}paintImageMaskXObject(G){const W=this.getObject(G.data,G);if(W.bitmap){(0,Y.warn)("paintImageMaskXObject: ImageBitmap support is not implemented, ensure that the `isOffscreenCanvasSupported` API parameter is disabled.");return}const z=this.current,M=W.width,i=W.height,x=z.fillColor;z.maskId=`mask${y++}`;const T=this.svgFactory.createElement("svg:mask");T.setAttributeNS(null,"id",z.maskId);const Q=this.svgFactory.createElement("svg:rect");Q.setAttributeNS(null,"x","0"),Q.setAttributeNS(null,"y","0"),Q.setAttributeNS(null,"width",L(M)),Q.setAttributeNS(null,"height",L(i)),Q.setAttributeNS(null,"fill",x),Q.setAttributeNS(null,"mask",`url(#${z.maskId})`),this.defs.append(T),this._ensureTransformGroup().append(Q),this.paintInlineImageXObject(W,T)}paintFormXObjectBegin(G,W){if(Array.isArray(G)&&G.length===6&&this.transform(G[0],G[1],G[2],G[3],G[4],G[5]),W){const z=W[2]-W[0],M=W[3]-W[1],i=this.svgFactory.createElement("svg:rect");i.setAttributeNS(null,"x",W[0]),i.setAttributeNS(null,"y",W[1]),i.setAttributeNS(null,"width",L(z)),i.setAttributeNS(null,"height",L(M)),this.current.element=i,this.clip("nonzero"),this.endPath()}}paintFormXObjectEnd(){}_initialize(G){const W=this.svgFactory.create(G.width,G.height),z=this.svgFactory.createElement("svg:defs");W.append(z),this.defs=z;const M=this.svgFactory.createElement("svg:g");return M.setAttributeNS(null,"transform",n(G.transform)),W.append(M),this.svg=M,W}_ensureClipGroup(){if(!this.current.clipGroup){const G=this.svgFactory.createElement("svg:g");G.setAttributeNS(null,"clip-path",this.current.activeClipUrl),this.svg.append(G),this.current.clipGroup=G}return this.current.clipGroup}_ensureTransformGroup(){return this.tgrp||(this.tgrp=this.svgFactory.createElement("svg:g"),this.tgrp.setAttributeNS(null,"transform",n(this.transformMatrix)),this.current.activeClipUrl?this._ensureClipGroup().append(this.tgrp):this.svg.append(this.tgrp)),this.tgrp}}m.SVGGraphics=p},(H,m)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.XfaText=void 0;class O{static textContent(Y){const B=[],r={items:B,styles:Object.create(null)};function ZZ(C){var j;if(!C)return;let D=null;const N=C.name;if(N==="#text")D=C.value;else if(O.shouldBuildText(N))(j=C==null?void 0:C.attributes)!=null&&j.textContent?D=C.attributes.textContent:C.value&&(D=C.value);else return;if(D!==null&&B.push({str:D}),!!C.children)for(const k of C.children)ZZ(k)}return ZZ(Y),r}static shouldBuildText(Y){return!(Y==="textarea"||Y==="input"||Y==="option"||Y==="select")}}m.XfaText=O},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.TextLayerRenderTask=void 0,m.renderTextLayer=n,m.updateTextLayer=u;var s=O(1),Y=O(6);const B=1e5,r=30,ZZ=.8,C=new Map;function D(y,o){let p;if(o&&s.FeatureTest.isOffscreenCanvasSupported)p=new OffscreenCanvas(y,y).getContext("2d",{alpha:!1});else{const e=document.createElement("canvas");e.width=e.height=y,p=e.getContext("2d",{alpha:!1})}return p}function N(y,o){const p=C.get(y);if(p)return p;const e=D(r,o);e.font=`${r}px ${y}`;const G=e.measureText("");let W=G.fontBoundingBoxAscent,z=Math.abs(G.fontBoundingBoxDescent);if(W){const i=W/(W+z);return C.set(y,i),e.canvas.width=e.canvas.height=0,i}e.strokeStyle="red",e.clearRect(0,0,r,r),e.strokeText("g",0,0);let M=e.getImageData(0,0,r,r).data;z=0;for(let i=M.length-1-3;i>=0;i-=4)if(M[i]>0){z=Math.ceil(i/4/r);break}e.clearRect(0,0,r,r),e.strokeText("A",0,r),M=e.getImageData(0,0,r,r).data,W=0;for(let i=0,x=M.length;i<x;i+=4)if(M[i]>0){W=r-Math.floor(i/4/r);break}if(e.canvas.width=e.canvas.height=0,W){const i=W/(W+z);return C.set(y,i),i}return C.set(y,ZZ),ZZ}function j(y,o,p){const e=document.createElement("span"),G={angle:0,canvasWidth:0,hasText:o.str!=="",hasEOL:o.hasEOL,fontSize:0};y._textDivs.push(e);const W=s.Util.transform(y._transform,o.transform);let z=Math.atan2(W[1],W[0]);const M=p[o.fontName];M.vertical&&(z+=Math.PI/2);const i=Math.hypot(W[2],W[3]),x=i*N(M.fontFamily,y._isOffscreenCanvasSupported);let T,Q;z===0?(T=W[4],Q=W[5]-x):(T=W[4]+x*Math.sin(z),Q=W[5]-x*Math.cos(z));const f="calc(var(--scale-factor)*",I=e.style;y._container===y._rootContainer?(I.left=`${(100*T/y._pageWidth).toFixed(2)}%`,I.top=`${(100*Q/y._pageHeight).toFixed(2)}%`):(I.left=`${f}${T.toFixed(2)}px)`,I.top=`${f}${Q.toFixed(2)}px)`),I.fontSize=`${f}${i.toFixed(2)}px)`,I.fontFamily=M.fontFamily,G.fontSize=i,e.setAttribute("role","presentation"),e.textContent=o.str,e.dir=o.dir,y._fontInspectorEnabled&&(e.dataset.fontName=o.fontName),z!==0&&(G.angle=z*(180/Math.PI));let Wl=!1;if(o.str.length>1)Wl=!0;else if(o.str!==" "&&o.transform[0]!==o.transform[3]){const ql=Math.abs(o.transform[0]),cZ=Math.abs(o.transform[3]);ql!==cZ&&Math.max(ql,cZ)/Math.min(ql,cZ)>1.5&&(Wl=!0)}Wl&&(G.canvasWidth=M.vertical?o.height:o.width),y._textDivProperties.set(e,G),y._isReadableStream&&y._layoutText(e)}function k(y){const{div:o,scale:p,properties:e,ctx:G,prevFontSize:W,prevFontFamily:z}=y,{style:M}=o;let i="";if(e.canvasWidth!==0&&e.hasText){const{fontFamily:x}=M,{canvasWidth:T,fontSize:Q}=e;(W!==Q||z!==x)&&(G.font=`${Q*p}px ${x}`,y.prevFontSize=Q,y.prevFontFamily=x);const{width:f}=G.measureText(o.textContent);f>0&&(i=`scaleX(${T*p/f})`)}e.angle!==0&&(i=`rotate(${e.angle}deg) ${i}`),i.length>0&&(M.transform=i)}function w(y){if(y._canceled)return;const o=y._textDivs,p=y._capability;if(o.length>B){p.resolve();return}if(!y._isReadableStream)for(const G of o)y._layoutText(G);p.resolve()}class L{constructor({textContentSource:o,container:p,viewport:e,textDivs:G,textDivProperties:W,textContentItemsStr:z,isOffscreenCanvasSupported:M}){var f;this._textContentSource=o,this._isReadableStream=o instanceof ReadableStream,this._container=this._rootContainer=p,this._textDivs=G||[],this._textContentItemsStr=z||[],this._isOffscreenCanvasSupported=M,this._fontInspectorEnabled=!!((f=globalThis.FontInspector)!=null&&f.enabled),this._reader=null,this._textDivProperties=W||new WeakMap,this._canceled=!1,this._capability=new s.PromiseCapability,this._layoutTextParams={prevFontSize:null,prevFontFamily:null,div:null,scale:e.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:D(0,M)};const{pageWidth:i,pageHeight:x,pageX:T,pageY:Q}=e.rawDims;this._transform=[1,0,0,-1,-T,Q+x],this._pageWidth=i,this._pageHeight=x,(0,Y.setLayerDimensions)(p,e),this._capability.promise.finally(()=>{this._layoutTextParams=null}).catch(()=>{})}get promise(){return this._capability.promise}cancel(){this._canceled=!0,this._reader&&(this._reader.cancel(new s.AbortException("TextLayer task cancelled.")).catch(()=>{}),this._reader=null),this._capability.reject(new s.AbortException("TextLayer task cancelled."))}_processItems(o,p){for(const e of o){if(e.str===void 0){if(e.type==="beginMarkedContentProps"||e.type==="beginMarkedContent"){const G=this._container;this._container=document.createElement("span"),this._container.classList.add("markedContent"),e.id!==null&&this._container.setAttribute("id",`${e.id}`),G.append(this._container)}else e.type==="endMarkedContent"&&(this._container=this._container.parentNode);continue}this._textContentItemsStr.push(e.str),j(this,e,p)}}_layoutText(o){const p=this._layoutTextParams.properties=this._textDivProperties.get(o);if(this._layoutTextParams.div=o,k(this._layoutTextParams),p.hasText&&this._container.append(o),p.hasEOL){const e=document.createElement("br");e.setAttribute("role","presentation"),this._container.append(e)}}_render(){const o=new s.PromiseCapability;let p=Object.create(null);if(this._isReadableStream){const e=()=>{this._reader.read().then(({value:G,done:W})=>{if(W){o.resolve();return}Object.assign(p,G.styles),this._processItems(G.items,p),e()},o.reject)};this._reader=this._textContentSource.getReader(),e()}else if(this._textContentSource){const{items:e,styles:G}=this._textContentSource;this._processItems(e,G),o.resolve()}else throw new Error('No "textContentSource" parameter specified.');o.promise.then(()=>{p=null,w(this)},this._capability.reject)}}m.TextLayerRenderTask=L;function n(y){!y.textContentSource&&(y.textContent||y.textContentStream)&&((0,Y.deprecated)("The TextLayerRender `textContent`/`textContentStream` parameters will be removed in the future, please use `textContentSource` instead."),y.textContentSource=y.textContent||y.textContentStream);const{container:o,viewport:p}=y,e=getComputedStyle(o),G=e.getPropertyValue("visibility"),W=parseFloat(e.getPropertyValue("--scale-factor"));G==="visible"&&(!W||Math.abs(W-p.scale)>1e-5)&&console.error("The `--scale-factor` CSS-variable must be set, to the same value as `viewport.scale`, either on the `container`-element itself or higher up in the DOM.");const z=new L(y);return z._render(),z}function u({container:y,viewport:o,textDivs:p,textDivProperties:e,isOffscreenCanvasSupported:G,mustRotate:W=!0,mustRescale:z=!0}){if(W&&(0,Y.setLayerDimensions)(y,{rotation:o.rotation}),z){const M=D(0,G),x={prevFontSize:null,prevFontFamily:null,div:null,scale:o.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:M};for(const T of p)x.properties=e.get(T),x.div=T,k(x)}}},(H,m,O)=>{var N,j,k,w,L,n,u,y,o,p,e,Ac,W,ec,M,fc,x,_c;Object.defineProperty(m,"__esModule",{value:!0}),m.AnnotationEditorLayer=void 0;var s=O(1),Y=O(4),B=O(28),r=O(33),ZZ=O(6),C=O(34);const Q=class Q{constructor({uiManager:I,pageIndex:Wl,div:ql,accessibilityManager:cZ,annotationLayer:v,viewport:tZ,l10n:WZ}){g(this,e);g(this,W);g(this,M);g(this,x);g(this,N,void 0);g(this,j,!1);g(this,k,null);g(this,w,this.pointerup.bind(this));g(this,L,this.pointerdown.bind(this));g(this,n,new Map);g(this,u,!1);g(this,y,!1);g(this,o,!1);g(this,p,void 0);const nZ=[B.FreeTextEditor,r.InkEditor,C.StampEditor];if(!Q._initialized){Q._initialized=!0;for(const VZ of nZ)VZ.initialize(WZ)}I.registerEditorTypes(nZ),Al(this,p,I),this.pageIndex=Wl,this.div=ql,Al(this,N,cZ),Al(this,k,v),this.viewport=tZ,l(this,p).addLayer(this)}get isEmpty(){return l(this,n).size===0}updateToolbar(I){l(this,p).updateToolbar(I)}updateMode(I=l(this,p).getMode()){Zl(this,x,_c).call(this),I===s.AnnotationEditorType.INK?(this.addInkEditorIfNeeded(!1),this.disableClick()):this.enableClick(),I!==s.AnnotationEditorType.NONE&&(this.div.classList.toggle("freeTextEditing",I===s.AnnotationEditorType.FREETEXT),this.div.classList.toggle("inkEditing",I===s.AnnotationEditorType.INK),this.div.classList.toggle("stampEditing",I===s.AnnotationEditorType.STAMP),this.div.hidden=!1)}addInkEditorIfNeeded(I){if(!I&&l(this,p).getMode()!==s.AnnotationEditorType.INK)return;if(!I){for(const ql of l(this,n).values())if(ql.isEmpty()){ql.setInBackground();return}}Zl(this,W,ec).call(this,{offsetX:0,offsetY:0},!1).setInBackground()}setEditingState(I){l(this,p).setEditingState(I)}addCommands(I){l(this,p).addCommands(I)}enable(){this.div.style.pointerEvents="auto";const I=new Set;for(const ql of l(this,n).values())ql.enableEditing(),ql.annotationElementId&&I.add(ql.annotationElementId);if(!l(this,k))return;const Wl=l(this,k).getEditableAnnotations();for(const ql of Wl){if(ql.hide(),l(this,p).isDeletedAnnotationElement(ql.data.id)||I.has(ql.data.id))continue;const cZ=this.deserialize(ql);cZ&&(this.addOrRebuild(cZ),cZ.enableEditing())}}disable(){var Wl;Al(this,o,!0),this.div.style.pointerEvents="none";const I=new Set;for(const ql of l(this,n).values()){if(ql.disableEditing(),!ql.annotationElementId||ql.serialize()!==null){I.add(ql.annotationElementId);continue}(Wl=this.getEditableAnnotation(ql.annotationElementId))==null||Wl.show(),ql.remove()}if(l(this,k)){const ql=l(this,k).getEditableAnnotations();for(const cZ of ql){const{id:v}=cZ.data;I.has(v)||l(this,p).isDeletedAnnotationElement(v)||cZ.show()}}Zl(this,x,_c).call(this),this.isEmpty&&(this.div.hidden=!0),Al(this,o,!1)}getEditableAnnotation(I){var Wl;return((Wl=l(this,k))==null?void 0:Wl.getEditableAnnotation(I))||null}setActiveEditor(I){l(this,p).getActive()!==I&&l(this,p).setActiveEditor(I)}enableClick(){this.div.addEventListener("pointerdown",l(this,L)),this.div.addEventListener("pointerup",l(this,w))}disableClick(){this.div.removeEventListener("pointerdown",l(this,L)),this.div.removeEventListener("pointerup",l(this,w))}attach(I){l(this,n).set(I.id,I);const{annotationElementId:Wl}=I;Wl&&l(this,p).isDeletedAnnotationElement(Wl)&&l(this,p).removeDeletedAnnotationElement(I)}detach(I){var Wl;l(this,n).delete(I.id),(Wl=l(this,N))==null||Wl.removePointerInTextLayer(I.contentDiv),!l(this,o)&&I.annotationElementId&&l(this,p).addDeletedAnnotationElement(I)}remove(I){this.detach(I),l(this,p).removeEditor(I),I.div.contains(document.activeElement)&&setTimeout(()=>{l(this,p).focusMainContainer()},0),I.div.remove(),I.isAttachedToDOM=!1,l(this,y)||this.addInkEditorIfNeeded(!1)}changeParent(I){var Wl;I.parent!==this&&(I.annotationElementId&&(l(this,p).addDeletedAnnotationElement(I.annotationElementId),Y.AnnotationEditor.deleteAnnotationElement(I),I.annotationElementId=null),this.attach(I),(Wl=I.parent)==null||Wl.detach(I),I.setParent(this),I.div&&I.isAttachedToDOM&&(I.div.remove(),this.div.append(I.div)))}add(I){if(this.changeParent(I),l(this,p).addEditor(I),this.attach(I),!I.isAttachedToDOM){const Wl=I.render();this.div.append(Wl),I.isAttachedToDOM=!0}I.fixAndSetPosition(),I.onceAdded(),l(this,p).addToAnnotationStorage(I)}moveEditorInDOM(I){var ql;if(!I.isAttachedToDOM)return;const{activeElement:Wl}=document;I.div.contains(Wl)&&(I._focusEventsAllowed=!1,setTimeout(()=>{I.div.contains(document.activeElement)?I._focusEventsAllowed=!0:(I.div.addEventListener("focusin",()=>{I._focusEventsAllowed=!0},{once:!0}),Wl.focus())},0)),I._structTreeParentId=(ql=l(this,N))==null?void 0:ql.moveElementInDOM(this.div,I.div,I.contentDiv,!0)}addOrRebuild(I){I.needsToBeRebuilt()?I.rebuild():this.add(I)}addUndoableEditor(I){const Wl=()=>I._uiManager.rebuild(I),ql=()=>{I.remove()};this.addCommands({cmd:Wl,undo:ql,mustExec:!1})}getNextId(){return l(this,p).getId()}pasteEditor(I,Wl){l(this,p).updateToolbar(I),l(this,p).updateMode(I);const{offsetX:ql,offsetY:cZ}=Zl(this,M,fc).call(this),v=this.getNextId(),tZ=Zl(this,e,Ac).call(this,{parent:this,id:v,x:ql,y:cZ,uiManager:l(this,p),isCentered:!0,...Wl});tZ&&this.add(tZ)}deserialize(I){switch(I.annotationType??I.annotationEditorType){case s.AnnotationEditorType.FREETEXT:return B.FreeTextEditor.deserialize(I,this,l(this,p));case s.AnnotationEditorType.INK:return r.InkEditor.deserialize(I,this,l(this,p));case s.AnnotationEditorType.STAMP:return C.StampEditor.deserialize(I,this,l(this,p))}return null}addNewEditor(){Zl(this,W,ec).call(this,Zl(this,M,fc).call(this),!0)}setSelected(I){l(this,p).setSelected(I)}toggleSelected(I){l(this,p).toggleSelected(I)}isSelected(I){return l(this,p).isSelected(I)}unselect(I){l(this,p).unselect(I)}pointerup(I){const{isMac:Wl}=s.FeatureTest.platform;if(!(I.button!==0||I.ctrlKey&&Wl)&&I.target===this.div&&l(this,u)){if(Al(this,u,!1),!l(this,j)){Al(this,j,!0);return}if(l(this,p).getMode()===s.AnnotationEditorType.STAMP){l(this,p).unselectAll();return}Zl(this,W,ec).call(this,I,!1)}}pointerdown(I){if(l(this,u)){Al(this,u,!1);return}const{isMac:Wl}=s.FeatureTest.platform;if(I.button!==0||I.ctrlKey&&Wl||I.target!==this.div)return;Al(this,u,!0);const ql=l(this,p).getActive();Al(this,j,!ql||ql.isEmpty())}findNewParent(I,Wl,ql){const cZ=l(this,p).findParent(Wl,ql);return cZ===null||cZ===this?!1:(cZ.changeParent(I),!0)}destroy(){var I,Wl;((I=l(this,p).getActive())==null?void 0:I.parent)===this&&(l(this,p).commitOrRemove(),l(this,p).setActiveEditor(null));for(const ql of l(this,n).values())(Wl=l(this,N))==null||Wl.removePointerInTextLayer(ql.contentDiv),ql.setParent(null),ql.isAttachedToDOM=!1,ql.div.remove();this.div=null,l(this,n).clear(),l(this,p).removeLayer(this)}render({viewport:I}){this.viewport=I,(0,ZZ.setLayerDimensions)(this.div,I);for(const Wl of l(this,p).getEditors(this.pageIndex))this.add(Wl);this.updateMode()}update({viewport:I}){l(this,p).commitOrRemove(),this.viewport=I,(0,ZZ.setLayerDimensions)(this.div,{rotation:I.rotation}),this.updateMode()}get pageDimensions(){const{pageWidth:I,pageHeight:Wl}=this.viewport.rawDims;return[I,Wl]}};N=new WeakMap,j=new WeakMap,k=new WeakMap,w=new WeakMap,L=new WeakMap,n=new WeakMap,u=new WeakMap,y=new WeakMap,o=new WeakMap,p=new WeakMap,e=new WeakSet,Ac=function(I){switch(l(this,p).getMode()){case s.AnnotationEditorType.FREETEXT:return new B.FreeTextEditor(I);case s.AnnotationEditorType.INK:return new r.InkEditor(I);case s.AnnotationEditorType.STAMP:return new C.StampEditor(I)}return null},W=new WeakSet,ec=function(I,Wl){const ql=this.getNextId(),cZ=Zl(this,e,Ac).call(this,{parent:this,id:ql,x:I.offsetX,y:I.offsetY,uiManager:l(this,p),isCentered:Wl});return cZ&&this.add(cZ),cZ},M=new WeakSet,fc=function(){const{x:I,y:Wl,width:ql,height:cZ}=this.div.getBoundingClientRect(),v=Math.max(0,I),tZ=Math.max(0,Wl),WZ=Math.min(window.innerWidth,I+ql),nZ=Math.min(window.innerHeight,Wl+cZ),VZ=(v+WZ)/2-I,R=(tZ+nZ)/2-Wl,[c,b]=this.viewport.rotation%180===0?[VZ,R]:[R,VZ];return{offsetX:c,offsetY:b}},x=new WeakSet,_c=function(){Al(this,y,!0);for(const I of l(this,n).values())I.isEmpty()&&I.remove();Al(this,y,!1)},AZ(Q,"_initialized",!1);let D=Q;m.AnnotationEditorLayer=D},(H,m,O)=>{var C,D,N,j,k,w,L,n,u,y,pd,p,zd,G,od,z,Nc,i,qc,T,Id,f,$c;Object.defineProperty(m,"__esModule",{value:!0}),m.FreeTextEditor=void 0;var s=O(1),Y=O(5),B=O(4),r=O(29);const Wl=class Wl extends B.AnnotationEditor{constructor(v){super({...v,name:"freeTextEditor"});g(this,y);g(this,p);g(this,G);g(this,z);g(this,i);g(this,T);g(this,f);g(this,C,this.editorDivBlur.bind(this));g(this,D,this.editorDivFocus.bind(this));g(this,N,this.editorDivInput.bind(this));g(this,j,this.editorDivKeydown.bind(this));g(this,k,void 0);g(this,w,"");g(this,L,`${this.id}-editor`);g(this,n,void 0);g(this,u,null);Al(this,k,v.color||Wl._defaultColor||B.AnnotationEditor._defaultLineColor),Al(this,n,v.fontSize||Wl._defaultFontSize)}static get _keyboardManager(){const v=Wl.prototype,tZ=VZ=>VZ.isEmpty(),WZ=Y.AnnotationEditorUIManager.TRANSLATE_SMALL,nZ=Y.AnnotationEditorUIManager.TRANSLATE_BIG;return(0,s.shadow)(this,"_keyboardManager",new Y.KeyboardManager([[["ctrl+s","mac+meta+s","ctrl+p","mac+meta+p"],v.commitOrRemove,{bubbles:!0}],[["ctrl+Enter","mac+meta+Enter","Escape","mac+Escape"],v.commitOrRemove],[["ArrowLeft","mac+ArrowLeft"],v._translateEmpty,{args:[-WZ,0],checker:tZ}],[["ctrl+ArrowLeft","mac+shift+ArrowLeft"],v._translateEmpty,{args:[-nZ,0],checker:tZ}],[["ArrowRight","mac+ArrowRight"],v._translateEmpty,{args:[WZ,0],checker:tZ}],[["ctrl+ArrowRight","mac+shift+ArrowRight"],v._translateEmpty,{args:[nZ,0],checker:tZ}],[["ArrowUp","mac+ArrowUp"],v._translateEmpty,{args:[0,-WZ],checker:tZ}],[["ctrl+ArrowUp","mac+shift+ArrowUp"],v._translateEmpty,{args:[0,-nZ],checker:tZ}],[["ArrowDown","mac+ArrowDown"],v._translateEmpty,{args:[0,WZ],checker:tZ}],[["ctrl+ArrowDown","mac+shift+ArrowDown"],v._translateEmpty,{args:[0,nZ],checker:tZ}]]))}static initialize(v){B.AnnotationEditor.initialize(v,{strings:["free_text2_default_content","editor_free_text2_aria_label"]});const tZ=getComputedStyle(document.documentElement);this._internalPadding=parseFloat(tZ.getPropertyValue("--freetext-padding"))}static updateDefaultParams(v,tZ){switch(v){case s.AnnotationEditorParamsType.FREETEXT_SIZE:Wl._defaultFontSize=tZ;break;case s.AnnotationEditorParamsType.FREETEXT_COLOR:Wl._defaultColor=tZ;break}}updateParams(v,tZ){switch(v){case s.AnnotationEditorParamsType.FREETEXT_SIZE:Zl(this,y,pd).call(this,tZ);break;case s.AnnotationEditorParamsType.FREETEXT_COLOR:Zl(this,p,zd).call(this,tZ);break}}static get defaultPropertiesToUpdate(){return[[s.AnnotationEditorParamsType.FREETEXT_SIZE,Wl._defaultFontSize],[s.AnnotationEditorParamsType.FREETEXT_COLOR,Wl._defaultColor||B.AnnotationEditor._defaultLineColor]]}get propertiesToUpdate(){return[[s.AnnotationEditorParamsType.FREETEXT_SIZE,l(this,n)],[s.AnnotationEditorParamsType.FREETEXT_COLOR,l(this,k)]]}_translateEmpty(v,tZ){this._uiManager.translateSelectedEditors(v,tZ,!0)}getInitialTranslation(){const v=this.parentScale;return[-Wl._internalPadding*v,-(Wl._internalPadding+l(this,n))*v]}rebuild(){this.parent&&(super.rebuild(),this.div!==null&&(this.isAttachedToDOM||this.parent.add(this)))}enableEditMode(){this.isInEditMode()||(this.parent.setEditingState(!1),this.parent.updateToolbar(s.AnnotationEditorType.FREETEXT),super.enableEditMode(),this.overlayDiv.classList.remove("enabled"),this.editorDiv.contentEditable=!0,this._isDraggable=!1,this.div.removeAttribute("aria-activedescendant"),this.editorDiv.addEventListener("keydown",l(this,j)),this.editorDiv.addEventListener("focus",l(this,D)),this.editorDiv.addEventListener("blur",l(this,C)),this.editorDiv.addEventListener("input",l(this,N)))}disableEditMode(){this.isInEditMode()&&(this.parent.setEditingState(!0),super.disableEditMode(),this.overlayDiv.classList.add("enabled"),this.editorDiv.contentEditable=!1,this.div.setAttribute("aria-activedescendant",l(this,L)),this._isDraggable=!0,this.editorDiv.removeEventListener("keydown",l(this,j)),this.editorDiv.removeEventListener("focus",l(this,D)),this.editorDiv.removeEventListener("blur",l(this,C)),this.editorDiv.removeEventListener("input",l(this,N)),this.div.focus({preventScroll:!0}),this.isEditing=!1,this.parent.div.classList.add("freeTextEditing"))}focusin(v){this._focusEventsAllowed&&(super.focusin(v),v.target!==this.editorDiv&&this.editorDiv.focus())}onceAdded(){var v;if(this.width){Zl(this,f,$c).call(this);return}this.enableEditMode(),this.editorDiv.focus(),(v=this._initialOptions)!=null&&v.isCentered&&this.center(),this._initialOptions=null}isEmpty(){return!this.editorDiv||this.editorDiv.innerText.trim()===""}remove(){this.isEditing=!1,this.parent&&(this.parent.setEditingState(!0),this.parent.div.classList.add("freeTextEditing")),super.remove()}commit(){if(!this.isInEditMode())return;super.commit(),this.disableEditMode();const v=l(this,w),tZ=Al(this,w,Zl(this,G,od).call(this).trimEnd());if(v===tZ)return;const WZ=nZ=>{if(Al(this,w,nZ),!nZ){this.remove();return}Zl(this,i,qc).call(this),this._uiManager.rebuild(this),Zl(this,z,Nc).call(this)};this.addCommands({cmd:()=>{WZ(tZ)},undo:()=>{WZ(v)},mustExec:!1}),Zl(this,z,Nc).call(this)}shouldGetKeyboardEvents(){return this.isInEditMode()}enterInEditMode(){this.enableEditMode(),this.editorDiv.focus()}dblclick(v){this.enterInEditMode()}keydown(v){v.target===this.div&&v.key==="Enter"&&(this.enterInEditMode(),v.preventDefault())}editorDivKeydown(v){Wl._keyboardManager.exec(this,v)}editorDivFocus(v){this.isEditing=!0}editorDivBlur(v){this.isEditing=!1}editorDivInput(v){this.parent.div.classList.toggle("freeTextEditing",this.isEmpty())}disableEditing(){this.editorDiv.setAttribute("role","comment"),this.editorDiv.removeAttribute("aria-multiline")}enableEditing(){this.editorDiv.setAttribute("role","textbox"),this.editorDiv.setAttribute("aria-multiline",!0)}render(){if(this.div)return this.div;let v,tZ;this.width&&(v=this.x,tZ=this.y),super.render(),this.editorDiv=document.createElement("div"),this.editorDiv.className="internal",this.editorDiv.setAttribute("id",l(this,L)),this.enableEditing(),B.AnnotationEditor._l10nPromise.get("editor_free_text2_aria_label").then(nZ=>{var VZ;return(VZ=this.editorDiv)==null?void 0:VZ.setAttribute("aria-label",nZ)}),B.AnnotationEditor._l10nPromise.get("free_text2_default_content").then(nZ=>{var VZ;return(VZ=this.editorDiv)==null?void 0:VZ.setAttribute("default-content",nZ)}),this.editorDiv.contentEditable=!0;const{style:WZ}=this.editorDiv;if(WZ.fontSize=`calc(${l(this,n)}px * var(--scale-factor))`,WZ.color=l(this,k),this.div.append(this.editorDiv),this.overlayDiv=document.createElement("div"),this.overlayDiv.classList.add("overlay","enabled"),this.div.append(this.overlayDiv),(0,Y.bindEvents)(this,this.div,["dblclick","keydown"]),this.width){const[nZ,VZ]=this.parentDimensions;if(this.annotationElementId){const{position:R}=l(this,u);let[c,b]=this.getInitialTranslation();[c,b]=this.pageTranslationToScreen(c,b);const[d,a]=this.pageDimensions,[h,V]=this.pageTranslation;let J,E;switch(this.rotation){case 0:J=v+(R[0]-h)/d,E=tZ+this.height-(R[1]-V)/a;break;case 90:J=v+(R[0]-h)/d,E=tZ-(R[1]-V)/a,[c,b]=[b,-c];break;case 180:J=v-this.width+(R[0]-h)/d,E=tZ-(R[1]-V)/a,[c,b]=[-c,-b];break;case 270:J=v+(R[0]-h-this.height*a)/d,E=tZ+(R[1]-V-this.width*d)/a,[c,b]=[-b,c];break}this.setAt(J*nZ,E*VZ,c,b)}else this.setAt(v*nZ,tZ*VZ,this.width*nZ,this.height*VZ);Zl(this,i,qc).call(this),this._isDraggable=!0,this.editorDiv.contentEditable=!1}else this._isDraggable=!1,this.editorDiv.contentEditable=!0;return this.div}get contentDiv(){return this.editorDiv}static deserialize(v,tZ,WZ){let nZ=null;if(v instanceof r.FreeTextAnnotationElement){const{data:{defaultAppearanceData:{fontSize:R,fontColor:c},rect:b,rotation:d,id:a},textContent:h,textPosition:V,parent:{page:{pageNumber:J}}}=v;if(!h||h.length===0)return null;nZ=v={annotationType:s.AnnotationEditorType.FREETEXT,color:Array.from(c),fontSize:R,value:h.join(`
|
|
5
|
-
`),position:V,pageIndex:J-1,rect:b,rotation:d,id:a,deleted:!1}}const VZ=super.deserialize(v,tZ,WZ);return Al(VZ,n,v.fontSize),Al(VZ,k,s.Util.makeHexColor(...v.color)),Al(VZ,w,v.value),VZ.annotationElementId=v.id||null,Al(VZ,u,nZ),VZ}serialize(v=!1){if(this.isEmpty())return null;if(this.deleted)return{pageIndex:this.pageIndex,id:this.annotationElementId,deleted:!0};const tZ=Wl._internalPadding*this.parentScale,WZ=this.getRect(tZ,tZ),nZ=B.AnnotationEditor._colorManager.convert(this.isAttachedToDOM?getComputedStyle(this.editorDiv).color:l(this,k)),VZ={annotationType:s.AnnotationEditorType.FREETEXT,color:nZ,fontSize:l(this,n),value:l(this,w),pageIndex:this.pageIndex,rect:WZ,rotation:this.rotation,structTreeParentId:this._structTreeParentId};return v?VZ:this.annotationElementId&&!Zl(this,T,Id).call(this,VZ)?null:(VZ.id=this.annotationElementId,VZ)}};C=new WeakMap,D=new WeakMap,N=new WeakMap,j=new WeakMap,k=new WeakMap,w=new WeakMap,L=new WeakMap,n=new WeakMap,u=new WeakMap,y=new WeakSet,pd=function(v){const tZ=nZ=>{this.editorDiv.style.fontSize=`calc(${nZ}px * var(--scale-factor))`,this.translate(0,-(nZ-l(this,n))*this.parentScale),Al(this,n,nZ),Zl(this,z,Nc).call(this)},WZ=l(this,n);this.addCommands({cmd:()=>{tZ(v)},undo:()=>{tZ(WZ)},mustExec:!0,type:s.AnnotationEditorParamsType.FREETEXT_SIZE,overwriteIfSameType:!0,keepUndo:!0})},p=new WeakSet,zd=function(v){const tZ=l(this,k);this.addCommands({cmd:()=>{Al(this,k,this.editorDiv.style.color=v)},undo:()=>{Al(this,k,this.editorDiv.style.color=tZ)},mustExec:!0,type:s.AnnotationEditorParamsType.FREETEXT_COLOR,overwriteIfSameType:!0,keepUndo:!0})},G=new WeakSet,od=function(){const v=this.editorDiv.getElementsByTagName("div");if(v.length===0)return this.editorDiv.innerText;const tZ=[];for(const WZ of v)tZ.push(WZ.innerText.replace(/\r\n?|\n/,""));return tZ.join(`
|
|
6
|
-
`)},z=new WeakSet,Nc=function(){const[v,tZ]=this.parentDimensions;let WZ;if(this.isAttachedToDOM)WZ=this.div.getBoundingClientRect();else{const{currentLayer:nZ,div:VZ}=this,R=VZ.style.display;VZ.style.display="hidden",nZ.div.append(this.div),WZ=VZ.getBoundingClientRect(),VZ.remove(),VZ.style.display=R}this.rotation%180===this.parentRotation%180?(this.width=WZ.width/v,this.height=WZ.height/tZ):(this.width=WZ.height/v,this.height=WZ.width/tZ),this.fixAndSetPosition()},i=new WeakSet,qc=function(){if(this.editorDiv.replaceChildren(),!!l(this,w))for(const v of l(this,w).split(`
|
|
7
|
-
`)){const tZ=document.createElement("div");tZ.append(v?document.createTextNode(v):document.createElement("br")),this.editorDiv.append(tZ)}},T=new WeakSet,Id=function(v){const{value:tZ,fontSize:WZ,color:nZ,rect:VZ,pageIndex:R}=l(this,u);return v.value!==tZ||v.fontSize!==WZ||v.rect.some((c,b)=>Math.abs(c-VZ[b])>=1)||v.color.some((c,b)=>c!==nZ[b])||v.pageIndex!==R},f=new WeakSet,$c=function(v=!1){if(!this.annotationElementId)return;if(Zl(this,z,Nc).call(this),!v&&(this.width===0||this.height===0)){setTimeout(()=>Zl(this,f,$c).call(this,!0),0);return}const tZ=Wl._internalPadding*this.parentScale;l(this,u).rect=this.getRect(tZ,tZ)},AZ(Wl,"_freeTextDefaultContent",""),AZ(Wl,"_internalPadding",0),AZ(Wl,"_defaultColor",null),AZ(Wl,"_defaultFontSize",10),AZ(Wl,"_type","freetext");let ZZ=Wl;m.FreeTextEditor=ZZ},(H,m,O)=>{var b,a,dc,V,Rd,E,_l,el,lZ,bZ,NZ,iZ,pZ,DZ,YZ,IZ,mZ,Xl,Vl,sZ,XZ,TZ,jZ,Sd,JZ,pc,gZ,ld,rZ,Zd,Yl,cl,aZ,MZ,BZ,vZ,Nl,cd,SZ,yZ,wZ,xZ,wd,hZ,dd;Object.defineProperty(m,"__esModule",{value:!0}),m.StampAnnotationElement=m.InkAnnotationElement=m.FreeTextAnnotationElement=m.AnnotationLayer=void 0;var s=O(1),Y=O(6),B=O(3),r=O(30),ZZ=O(31),C=O(32);const D=1e3,N=9,j=new WeakSet;function k(RZ){return{width:RZ[2]-RZ[0],height:RZ[3]-RZ[1]}}class w{static create(F){switch(F.data.annotationType){case s.AnnotationType.LINK:return new n(F);case s.AnnotationType.TEXT:return new u(F);case s.AnnotationType.WIDGET:switch(F.data.fieldType){case"Tx":return new o(F);case"Btn":return F.data.radioButton?new G(F):F.data.checkBox?new e(F):new W(F);case"Ch":return new z(F);case"Sig":return new p(F)}return new y(F);case s.AnnotationType.POPUP:return new M(F);case s.AnnotationType.FREETEXT:return new x(F);case s.AnnotationType.LINE:return new T(F);case s.AnnotationType.SQUARE:return new Q(F);case s.AnnotationType.CIRCLE:return new f(F);case s.AnnotationType.POLYLINE:return new I(F);case s.AnnotationType.CARET:return new ql(F);case s.AnnotationType.INK:return new cZ(F);case s.AnnotationType.POLYGON:return new Wl(F);case s.AnnotationType.HIGHLIGHT:return new v(F);case s.AnnotationType.UNDERLINE:return new tZ(F);case s.AnnotationType.SQUIGGLY:return new WZ(F);case s.AnnotationType.STRIKEOUT:return new nZ(F);case s.AnnotationType.STAMP:return new VZ(F);case s.AnnotationType.FILEATTACHMENT:return new R(F);default:return new L(F)}}}const d=class d{constructor(F,{isRenderable:Z=!1,ignoreBorder:X=!1,createQuadrilaterals:U=!1}={}){g(this,b,!1);this.isRenderable=Z,this.data=F.data,this.layer=F.layer,this.linkService=F.linkService,this.downloadManager=F.downloadManager,this.imageResourcesPath=F.imageResourcesPath,this.renderForms=F.renderForms,this.svgFactory=F.svgFactory,this.annotationStorage=F.annotationStorage,this.enableScripting=F.enableScripting,this.hasJSActions=F.hasJSActions,this._fieldObjects=F.fieldObjects,this.parent=F.parent,Z&&(this.container=this._createContainer(X)),U&&this._createQuadrilaterals()}static _hasPopupData({titleObj:F,contentsObj:Z,richText:X}){return!!(F!=null&&F.str||Z!=null&&Z.str||X!=null&&X.str)}get hasPopupData(){return d._hasPopupData(this.data)}_createContainer(F){const{data:Z,parent:{page:X,viewport:U}}=this,P=document.createElement("section");P.setAttribute("data-annotation-id",Z.id),this instanceof y||(P.tabIndex=D),P.style.zIndex=this.parent.zIndex++,this.data.popupRef&&P.setAttribute("aria-haspopup","dialog"),Z.noRotate&&P.classList.add("norotate");const{pageWidth:Ml,pageHeight:$l,pageX:GZ,pageY:eZ}=U.rawDims;if(!Z.rect||this instanceof M){const{rotation:kZ}=Z;return!Z.hasOwnCanvas&&kZ!==0&&this.setRotation(kZ,P),P}const{width:LZ,height:OZ}=k(Z.rect),zZ=s.Util.normalizeRect([Z.rect[0],X.view[3]-Z.rect[1]+X.view[1],Z.rect[2],X.view[3]-Z.rect[3]+X.view[1]]);if(!F&&Z.borderStyle.width>0){P.style.borderWidth=`${Z.borderStyle.width}px`;const kZ=Z.borderStyle.horizontalCornerRadius,KZ=Z.borderStyle.verticalCornerRadius;if(kZ>0||KZ>0){const PZ=`calc(${kZ}px * var(--scale-factor)) / calc(${KZ}px * var(--scale-factor))`;P.style.borderRadius=PZ}else if(this instanceof G){const PZ=`calc(${LZ}px * var(--scale-factor)) / calc(${OZ}px * var(--scale-factor))`;P.style.borderRadius=PZ}switch(Z.borderStyle.style){case s.AnnotationBorderStyleType.SOLID:P.style.borderStyle="solid";break;case s.AnnotationBorderStyleType.DASHED:P.style.borderStyle="dashed";break;case s.AnnotationBorderStyleType.BEVELED:(0,s.warn)("Unimplemented border style: beveled");break;case s.AnnotationBorderStyleType.INSET:(0,s.warn)("Unimplemented border style: inset");break;case s.AnnotationBorderStyleType.UNDERLINE:P.style.borderBottomStyle="solid";break}const QZ=Z.borderColor||null;QZ?(Al(this,b,!0),P.style.borderColor=s.Util.makeHexColor(QZ[0]|0,QZ[1]|0,QZ[2]|0)):P.style.borderWidth=0}P.style.left=`${100*(zZ[0]-GZ)/Ml}%`,P.style.top=`${100*(zZ[1]-eZ)/$l}%`;const{rotation:oZ}=Z;return Z.hasOwnCanvas||oZ===0?(P.style.width=`${100*LZ/Ml}%`,P.style.height=`${100*OZ/$l}%`):this.setRotation(oZ,P),P}setRotation(F,Z=this.container){if(!this.data.rect)return;const{pageWidth:X,pageHeight:U}=this.parent.viewport.rawDims,{width:P,height:Ml}=k(this.data.rect);let $l,GZ;F%180===0?($l=100*P/X,GZ=100*Ml/U):($l=100*Ml/X,GZ=100*P/U),Z.style.width=`${$l}%`,Z.style.height=`${GZ}%`,Z.setAttribute("data-main-rotation",(360-F)%360)}get _commonActions(){const F=(Z,X,U)=>{const P=U.detail[Z],Ml=P[0],$l=P.slice(1);U.target.style[X]=r.ColorConverters[`${Ml}_HTML`]($l),this.annotationStorage.setValue(this.data.id,{[X]:r.ColorConverters[`${Ml}_rgb`]($l)})};return(0,s.shadow)(this,"_commonActions",{display:Z=>{const{display:X}=Z.detail,U=X%2===1;this.container.style.visibility=U?"hidden":"visible",this.annotationStorage.setValue(this.data.id,{noView:U,noPrint:X===1||X===2})},print:Z=>{this.annotationStorage.setValue(this.data.id,{noPrint:!Z.detail.print})},hidden:Z=>{const{hidden:X}=Z.detail;this.container.style.visibility=X?"hidden":"visible",this.annotationStorage.setValue(this.data.id,{noPrint:X,noView:X})},focus:Z=>{setTimeout(()=>Z.target.focus({preventScroll:!1}),0)},userName:Z=>{Z.target.title=Z.detail.userName},readonly:Z=>{Z.target.disabled=Z.detail.readonly},required:Z=>{this._setRequired(Z.target,Z.detail.required)},bgColor:Z=>{F("bgColor","backgroundColor",Z)},fillColor:Z=>{F("fillColor","backgroundColor",Z)},fgColor:Z=>{F("fgColor","color",Z)},textColor:Z=>{F("textColor","color",Z)},borderColor:Z=>{F("borderColor","borderColor",Z)},strokeColor:Z=>{F("strokeColor","borderColor",Z)},rotation:Z=>{const X=Z.detail.rotation;this.setRotation(X),this.annotationStorage.setValue(this.data.id,{rotation:X})}})}_dispatchEventFromSandbox(F,Z){const X=this._commonActions;for(const U of Object.keys(Z.detail)){const P=F[U]||X[U];P==null||P(Z)}}_setDefaultPropertiesFromJS(F){if(!this.enableScripting)return;const Z=this.annotationStorage.getRawValue(this.data.id);if(!Z)return;const X=this._commonActions;for(const[U,P]of Object.entries(Z)){const Ml=X[U];if(Ml){const $l={detail:{[U]:P},target:F};Ml($l),delete Z[U]}}}_createQuadrilaterals(){if(!this.container)return;const{quadPoints:F}=this.data;if(!F)return;const[Z,X,U,P]=this.data.rect;if(F.length===1){const[,{x:KZ,y:QZ},{x:PZ,y:_Z}]=F[0];if(U===KZ&&P===QZ&&Z===PZ&&X===_Z)return}const{style:Ml}=this.container;let $l;if(l(this,b)){const{borderColor:KZ,borderWidth:QZ}=Ml;Ml.borderWidth=0,$l=["url('data:image/svg+xml;utf8,",'<svg xmlns="http://www.w3.org/2000/svg"',' preserveAspectRatio="none" viewBox="0 0 1 1">',`<g fill="transparent" stroke="${KZ}" stroke-width="${QZ}">`],this.container.classList.add("hasBorder")}const GZ=U-Z,eZ=P-X,{svgFactory:LZ}=this,OZ=LZ.createElement("svg");OZ.classList.add("quadrilateralsContainer"),OZ.setAttribute("width",0),OZ.setAttribute("height",0);const zZ=LZ.createElement("defs");OZ.append(zZ);const oZ=LZ.createElement("clipPath"),kZ=`clippath_${this.data.id}`;oZ.setAttribute("id",kZ),oZ.setAttribute("clipPathUnits","objectBoundingBox"),zZ.append(oZ);for(const[,{x:KZ,y:QZ},{x:PZ,y:_Z}]of F){const fZ=LZ.createElement("rect"),qZ=(PZ-Z)/GZ,Zc=(P-QZ)/eZ,cc=(KZ-PZ)/GZ,hd=(QZ-_Z)/eZ;fZ.setAttribute("x",qZ),fZ.setAttribute("y",Zc),fZ.setAttribute("width",cc),fZ.setAttribute("height",hd),oZ.append(fZ),$l==null||$l.push(`<rect vector-effect="non-scaling-stroke" x="${qZ}" y="${Zc}" width="${cc}" height="${hd}"/>`)}l(this,b)&&($l.push("</g></svg>')"),Ml.backgroundImage=$l.join("")),this.container.append(OZ),this.container.style.clipPath=`url(#${kZ})`}_createPopup(){const{container:F,data:Z}=this;F.setAttribute("aria-haspopup","dialog");const X=new M({data:{color:Z.color,titleObj:Z.titleObj,modificationDate:Z.modificationDate,contentsObj:Z.contentsObj,richText:Z.richText,parentRect:Z.rect,borderStyle:0,id:`popup_${Z.id}`,rotation:Z.rotation},parent:this.parent,elements:[this]});this.parent.div.append(X.render())}render(){(0,s.unreachable)("Abstract method `AnnotationElement.render` called")}_getElementsByName(F,Z=null){const X=[];if(this._fieldObjects){const U=this._fieldObjects[F];if(U)for(const{page:P,id:Ml,exportValues:$l}of U){if(P===-1||Ml===Z)continue;const GZ=typeof $l=="string"?$l:null,eZ=document.querySelector(`[data-element-id="${Ml}"]`);if(eZ&&!j.has(eZ)){(0,s.warn)(`_getElementsByName - element not allowed: ${Ml}`);continue}X.push({id:Ml,exportValue:GZ,domElement:eZ})}return X}for(const U of document.getElementsByName(F)){const{exportValue:P}=U,Ml=U.getAttribute("data-element-id");Ml!==Z&&j.has(U)&&X.push({id:Ml,exportValue:P,domElement:U})}return X}show(){var F;this.container&&(this.container.hidden=!1),(F=this.popup)==null||F.maybeShow()}hide(){var F;this.container&&(this.container.hidden=!0),(F=this.popup)==null||F.forceHide()}getElementsToTriggerPopup(){return this.container}addHighlightArea(){const F=this.getElementsToTriggerPopup();if(Array.isArray(F))for(const Z of F)Z.classList.add("highlightArea");else F.classList.add("highlightArea")}_editOnDoubleClick(){const{annotationEditorType:F,data:{id:Z}}=this;this.container.addEventListener("dblclick",()=>{var X;(X=this.linkService.eventBus)==null||X.dispatch("switchannotationeditormode",{source:this,mode:F,editId:Z})})}};b=new WeakMap;let L=d;class n extends L{constructor(Z,X=null){super(Z,{isRenderable:!0,ignoreBorder:!!(X!=null&&X.ignoreBorder),createQuadrilaterals:!0});g(this,a);g(this,V);this.isTooltipOnly=Z.data.isTooltipOnly}render(){const{data:Z,linkService:X}=this,U=document.createElement("a");U.setAttribute("data-element-id",Z.id);let P=!1;return Z.url?(X.addLinkAttributes(U,Z.url,Z.newWindow),P=!0):Z.action?(this._bindNamedAction(U,Z.action),P=!0):Z.attachment?(this._bindAttachment(U,Z.attachment),P=!0):Z.setOCGState?(Zl(this,V,Rd).call(this,U,Z.setOCGState),P=!0):Z.dest?(this._bindLink(U,Z.dest),P=!0):(Z.actions&&(Z.actions.Action||Z.actions["Mouse Up"]||Z.actions["Mouse Down"])&&this.enableScripting&&this.hasJSActions&&(this._bindJSAction(U,Z),P=!0),Z.resetForm?(this._bindResetFormAction(U,Z.resetForm),P=!0):this.isTooltipOnly&&!P&&(this._bindLink(U,""),P=!0)),this.container.classList.add("linkAnnotation"),P&&this.container.append(U),this.container}_bindLink(Z,X){Z.href=this.linkService.getDestinationHash(X),Z.onclick=()=>(X&&this.linkService.goToDestination(X),!1),(X||X==="")&&Zl(this,a,dc).call(this)}_bindNamedAction(Z,X){Z.href=this.linkService.getAnchorUrl(""),Z.onclick=()=>(this.linkService.executeNamedAction(X),!1),Zl(this,a,dc).call(this)}_bindAttachment(Z,X){Z.href=this.linkService.getAnchorUrl(""),Z.onclick=()=>{var U;return(U=this.downloadManager)==null||U.openOrDownloadData(this.container,X.content,X.filename),!1},Zl(this,a,dc).call(this)}_bindJSAction(Z,X){Z.href=this.linkService.getAnchorUrl("");const U=new Map([["Action","onclick"],["Mouse Up","onmouseup"],["Mouse Down","onmousedown"]]);for(const P of Object.keys(X.actions)){const Ml=U.get(P);Ml&&(Z[Ml]=()=>{var $l;return($l=this.linkService.eventBus)==null||$l.dispatch("dispatcheventinsandbox",{source:this,detail:{id:X.id,name:P}}),!1})}Z.onclick||(Z.onclick=()=>!1),Zl(this,a,dc).call(this)}_bindResetFormAction(Z,X){const U=Z.onclick;if(U||(Z.href=this.linkService.getAnchorUrl("")),Zl(this,a,dc).call(this),!this._fieldObjects){(0,s.warn)('_bindResetFormAction - "resetForm" action not supported, ensure that the `fieldObjects` parameter is provided.'),U||(Z.onclick=()=>!1);return}Z.onclick=()=>{var OZ;U==null||U();const{fields:P,refs:Ml,include:$l}=X,GZ=[];if(P.length!==0||Ml.length!==0){const zZ=new Set(Ml);for(const oZ of P){const kZ=this._fieldObjects[oZ]||[];for(const{id:KZ}of kZ)zZ.add(KZ)}for(const oZ of Object.values(this._fieldObjects))for(const kZ of oZ)zZ.has(kZ.id)===$l&&GZ.push(kZ)}else for(const zZ of Object.values(this._fieldObjects))GZ.push(...zZ);const eZ=this.annotationStorage,LZ=[];for(const zZ of GZ){const{id:oZ}=zZ;switch(LZ.push(oZ),zZ.type){case"text":{const KZ=zZ.defaultValue||"";eZ.setValue(oZ,{value:KZ});break}case"checkbox":case"radiobutton":{const KZ=zZ.defaultValue===zZ.exportValues;eZ.setValue(oZ,{value:KZ});break}case"combobox":case"listbox":{const KZ=zZ.defaultValue||"";eZ.setValue(oZ,{value:KZ});break}default:continue}const kZ=document.querySelector(`[data-element-id="${oZ}"]`);if(kZ){if(!j.has(kZ)){(0,s.warn)(`_bindResetFormAction - element not allowed: ${oZ}`);continue}}else continue;kZ.dispatchEvent(new Event("resetform"))}return this.enableScripting&&((OZ=this.linkService.eventBus)==null||OZ.dispatch("dispatcheventinsandbox",{source:this,detail:{id:"app",ids:LZ,name:"ResetForm"}})),!1}}}a=new WeakSet,dc=function(){this.container.setAttribute("data-internal-link","")},V=new WeakSet,Rd=function(Z,X){Z.href=this.linkService.getAnchorUrl(""),Z.onclick=()=>(this.linkService.executeSetOCGState(X),!1),Zl(this,a,dc).call(this)};class u extends L{constructor(F){super(F,{isRenderable:!0})}render(){this.container.classList.add("textAnnotation");const F=document.createElement("img");return F.src=this.imageResourcesPath+"annotation-"+this.data.name.toLowerCase()+".svg",F.alt="[{{type}} Annotation]",F.dataset.l10nId="text_annotation_type",F.dataset.l10nArgs=JSON.stringify({type:this.data.name}),!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.append(F),this.container}}class y extends L{render(){return this.data.alternativeText&&(this.container.title=this.data.alternativeText),this.container}showElementAndHideCanvas(F){var Z;this.data.hasOwnCanvas&&(((Z=F.previousSibling)==null?void 0:Z.nodeName)==="CANVAS"&&(F.previousSibling.hidden=!0),F.hidden=!1)}_getKeyModifier(F){const{isWin:Z,isMac:X}=s.FeatureTest.platform;return Z&&F.ctrlKey||X&&F.metaKey}_setEventListener(F,Z,X,U,P){X.includes("mouse")?F.addEventListener(X,Ml=>{var $l;($l=this.linkService.eventBus)==null||$l.dispatch("dispatcheventinsandbox",{source:this,detail:{id:this.data.id,name:U,value:P(Ml),shift:Ml.shiftKey,modifier:this._getKeyModifier(Ml)}})}):F.addEventListener(X,Ml=>{var $l;if(X==="blur"){if(!Z.focused||!Ml.relatedTarget)return;Z.focused=!1}else if(X==="focus"){if(Z.focused)return;Z.focused=!0}P&&(($l=this.linkService.eventBus)==null||$l.dispatch("dispatcheventinsandbox",{source:this,detail:{id:this.data.id,name:U,value:P(Ml)}}))})}_setEventListeners(F,Z,X,U){var P,Ml,$l;for(const[GZ,eZ]of X)(eZ==="Action"||(P=this.data.actions)!=null&&P[eZ])&&((eZ==="Focus"||eZ==="Blur")&&(Z||(Z={focused:!1})),this._setEventListener(F,Z,GZ,eZ,U),eZ==="Focus"&&!((Ml=this.data.actions)!=null&&Ml.Blur)?this._setEventListener(F,Z,"blur","Blur",null):eZ==="Blur"&&!(($l=this.data.actions)!=null&&$l.Focus)&&this._setEventListener(F,Z,"focus","Focus",null))}_setBackgroundColor(F){const Z=this.data.backgroundColor||null;F.style.backgroundColor=Z===null?"transparent":s.Util.makeHexColor(Z[0],Z[1],Z[2])}_setTextStyle(F){const Z=["left","center","right"],{fontColor:X}=this.data.defaultAppearanceData,U=this.data.defaultAppearanceData.fontSize||N,P=F.style;let Ml;const $l=2,GZ=eZ=>Math.round(10*eZ)/10;if(this.data.multiLine){const eZ=Math.abs(this.data.rect[3]-this.data.rect[1]-$l),LZ=Math.round(eZ/(s.LINE_FACTOR*U))||1,OZ=eZ/LZ;Ml=Math.min(U,GZ(OZ/s.LINE_FACTOR))}else{const eZ=Math.abs(this.data.rect[3]-this.data.rect[1]-$l);Ml=Math.min(U,GZ(eZ/s.LINE_FACTOR))}P.fontSize=`calc(${Ml}px * var(--scale-factor))`,P.color=s.Util.makeHexColor(X[0],X[1],X[2]),this.data.textAlignment!==null&&(P.textAlign=Z[this.data.textAlignment])}_setRequired(F,Z){Z?F.setAttribute("required",!0):F.removeAttribute("required"),F.setAttribute("aria-required",Z)}}class o extends y{constructor(F){const Z=F.renderForms||!F.data.hasAppearance&&!!F.data.fieldValue;super(F,{isRenderable:Z})}setPropertyOnSiblings(F,Z,X,U){const P=this.annotationStorage;for(const Ml of this._getElementsByName(F.name,F.id))Ml.domElement&&(Ml.domElement[Z]=X),P.setValue(Ml.id,{[U]:X})}render(){var U,P;const F=this.annotationStorage,Z=this.data.id;this.container.classList.add("textWidgetAnnotation");let X=null;if(this.renderForms){const Ml=F.getValue(Z,{value:this.data.fieldValue});let $l=Ml.value||"";const GZ=F.getValue(Z,{charLimit:this.data.maxLen}).charLimit;GZ&&$l.length>GZ&&($l=$l.slice(0,GZ));let eZ=Ml.formattedValue||((U=this.data.textContent)==null?void 0:U.join(`
|
|
8
|
-
`))||null;eZ&&this.data.comb&&(eZ=eZ.replaceAll(/\s+/g,""));const LZ={userValue:$l,formattedValue:eZ,lastCommittedValue:null,commitKey:1,focused:!1};this.data.multiLine?(X=document.createElement("textarea"),X.textContent=eZ??$l,this.data.doNotScroll&&(X.style.overflowY="hidden")):(X=document.createElement("input"),X.type="text",X.setAttribute("value",eZ??$l),this.data.doNotScroll&&(X.style.overflowX="hidden")),this.data.hasOwnCanvas&&(X.hidden=!0),j.add(X),X.setAttribute("data-element-id",Z),X.disabled=this.data.readOnly,X.name=this.data.fieldName,X.tabIndex=D,this._setRequired(X,this.data.required),GZ&&(X.maxLength=GZ),X.addEventListener("input",zZ=>{F.setValue(Z,{value:zZ.target.value}),this.setPropertyOnSiblings(X,"value",zZ.target.value,"value"),LZ.formattedValue=null}),X.addEventListener("resetform",zZ=>{const oZ=this.data.defaultFieldValue??"";X.value=LZ.userValue=oZ,LZ.formattedValue=null});let OZ=zZ=>{const{formattedValue:oZ}=LZ;oZ!=null&&(zZ.target.value=oZ),zZ.target.scrollLeft=0};if(this.enableScripting&&this.hasJSActions){X.addEventListener("focus",oZ=>{if(LZ.focused)return;const{target:kZ}=oZ;LZ.userValue&&(kZ.value=LZ.userValue),LZ.lastCommittedValue=kZ.value,LZ.commitKey=1,LZ.focused=!0}),X.addEventListener("updatefromsandbox",oZ=>{this.showElementAndHideCanvas(oZ.target);const kZ={value(KZ){LZ.userValue=KZ.detail.value??"",F.setValue(Z,{value:LZ.userValue.toString()}),KZ.target.value=LZ.userValue},formattedValue(KZ){const{formattedValue:QZ}=KZ.detail;LZ.formattedValue=QZ,QZ!=null&&KZ.target!==document.activeElement&&(KZ.target.value=QZ),F.setValue(Z,{formattedValue:QZ})},selRange(KZ){KZ.target.setSelectionRange(...KZ.detail.selRange)},charLimit:KZ=>{var fZ;const{charLimit:QZ}=KZ.detail,{target:PZ}=KZ;if(QZ===0){PZ.removeAttribute("maxLength");return}PZ.setAttribute("maxLength",QZ);let _Z=LZ.userValue;!_Z||_Z.length<=QZ||(_Z=_Z.slice(0,QZ),PZ.value=LZ.userValue=_Z,F.setValue(Z,{value:_Z}),(fZ=this.linkService.eventBus)==null||fZ.dispatch("dispatcheventinsandbox",{source:this,detail:{id:Z,name:"Keystroke",value:_Z,willCommit:!0,commitKey:1,selStart:PZ.selectionStart,selEnd:PZ.selectionEnd}}))}};this._dispatchEventFromSandbox(kZ,oZ)}),X.addEventListener("keydown",oZ=>{var QZ;LZ.commitKey=1;let kZ=-1;if(oZ.key==="Escape"?kZ=0:oZ.key==="Enter"&&!this.data.multiLine?kZ=2:oZ.key==="Tab"&&(LZ.commitKey=3),kZ===-1)return;const{value:KZ}=oZ.target;LZ.lastCommittedValue!==KZ&&(LZ.lastCommittedValue=KZ,LZ.userValue=KZ,(QZ=this.linkService.eventBus)==null||QZ.dispatch("dispatcheventinsandbox",{source:this,detail:{id:Z,name:"Keystroke",value:KZ,willCommit:!0,commitKey:kZ,selStart:oZ.target.selectionStart,selEnd:oZ.target.selectionEnd}}))});const zZ=OZ;OZ=null,X.addEventListener("blur",oZ=>{var KZ;if(!LZ.focused||!oZ.relatedTarget)return;LZ.focused=!1;const{value:kZ}=oZ.target;LZ.userValue=kZ,LZ.lastCommittedValue!==kZ&&((KZ=this.linkService.eventBus)==null||KZ.dispatch("dispatcheventinsandbox",{source:this,detail:{id:Z,name:"Keystroke",value:kZ,willCommit:!0,commitKey:LZ.commitKey,selStart:oZ.target.selectionStart,selEnd:oZ.target.selectionEnd}})),zZ(oZ)}),(P=this.data.actions)!=null&&P.Keystroke&&X.addEventListener("beforeinput",oZ=>{var Zc;LZ.lastCommittedValue=null;const{data:kZ,target:KZ}=oZ,{value:QZ,selectionStart:PZ,selectionEnd:_Z}=KZ;let fZ=PZ,qZ=_Z;switch(oZ.inputType){case"deleteWordBackward":{const cc=QZ.substring(0,PZ).match(/\w*[^\w]*$/);cc&&(fZ-=cc[0].length);break}case"deleteWordForward":{const cc=QZ.substring(PZ).match(/^[^\w]*\w*/);cc&&(qZ+=cc[0].length);break}case"deleteContentBackward":PZ===_Z&&(fZ-=1);break;case"deleteContentForward":PZ===_Z&&(qZ+=1);break}oZ.preventDefault(),(Zc=this.linkService.eventBus)==null||Zc.dispatch("dispatcheventinsandbox",{source:this,detail:{id:Z,name:"Keystroke",value:QZ,change:kZ||"",willCommit:!1,selStart:fZ,selEnd:qZ}})}),this._setEventListeners(X,LZ,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],oZ=>oZ.target.value)}if(OZ&&X.addEventListener("blur",OZ),this.data.comb){const oZ=(this.data.rect[2]-this.data.rect[0])/GZ;X.classList.add("comb"),X.style.letterSpacing=`calc(${oZ}px * var(--scale-factor) - 1ch)`}}else X=document.createElement("div"),X.textContent=this.data.fieldValue,X.style.verticalAlign="middle",X.style.display="table-cell";return this._setTextStyle(X),this._setBackgroundColor(X),this._setDefaultPropertiesFromJS(X),this.container.append(X),this.container}}class p extends y{constructor(F){super(F,{isRenderable:!!F.data.hasOwnCanvas})}}class e extends y{constructor(F){super(F,{isRenderable:F.renderForms})}render(){const F=this.annotationStorage,Z=this.data,X=Z.id;let U=F.getValue(X,{value:Z.exportValue===Z.fieldValue}).value;typeof U=="string"&&(U=U!=="Off",F.setValue(X,{value:U})),this.container.classList.add("buttonWidgetAnnotation","checkBox");const P=document.createElement("input");return j.add(P),P.setAttribute("data-element-id",X),P.disabled=Z.readOnly,this._setRequired(P,this.data.required),P.type="checkbox",P.name=Z.fieldName,U&&P.setAttribute("checked",!0),P.setAttribute("exportValue",Z.exportValue),P.tabIndex=D,P.addEventListener("change",Ml=>{const{name:$l,checked:GZ}=Ml.target;for(const eZ of this._getElementsByName($l,X)){const LZ=GZ&&eZ.exportValue===Z.exportValue;eZ.domElement&&(eZ.domElement.checked=LZ),F.setValue(eZ.id,{value:LZ})}F.setValue(X,{value:GZ})}),P.addEventListener("resetform",Ml=>{const $l=Z.defaultFieldValue||"Off";Ml.target.checked=$l===Z.exportValue}),this.enableScripting&&this.hasJSActions&&(P.addEventListener("updatefromsandbox",Ml=>{const $l={value(GZ){GZ.target.checked=GZ.detail.value!=="Off",F.setValue(X,{value:GZ.target.checked})}};this._dispatchEventFromSandbox($l,Ml)}),this._setEventListeners(P,null,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],Ml=>Ml.target.checked)),this._setBackgroundColor(P),this._setDefaultPropertiesFromJS(P),this.container.append(P),this.container}}class G extends y{constructor(F){super(F,{isRenderable:F.renderForms})}render(){this.container.classList.add("buttonWidgetAnnotation","radioButton");const F=this.annotationStorage,Z=this.data,X=Z.id;let U=F.getValue(X,{value:Z.fieldValue===Z.buttonValue}).value;typeof U=="string"&&(U=U!==Z.buttonValue,F.setValue(X,{value:U}));const P=document.createElement("input");if(j.add(P),P.setAttribute("data-element-id",X),P.disabled=Z.readOnly,this._setRequired(P,this.data.required),P.type="radio",P.name=Z.fieldName,U&&P.setAttribute("checked",!0),P.tabIndex=D,P.addEventListener("change",Ml=>{const{name:$l,checked:GZ}=Ml.target;for(const eZ of this._getElementsByName($l,X))F.setValue(eZ.id,{value:!1});F.setValue(X,{value:GZ})}),P.addEventListener("resetform",Ml=>{const $l=Z.defaultFieldValue;Ml.target.checked=$l!=null&&$l===Z.buttonValue}),this.enableScripting&&this.hasJSActions){const Ml=Z.buttonValue;P.addEventListener("updatefromsandbox",$l=>{const GZ={value:eZ=>{const LZ=Ml===eZ.detail.value;for(const OZ of this._getElementsByName(eZ.target.name)){const zZ=LZ&&OZ.id===X;OZ.domElement&&(OZ.domElement.checked=zZ),F.setValue(OZ.id,{value:zZ})}}};this._dispatchEventFromSandbox(GZ,$l)}),this._setEventListeners(P,null,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],$l=>$l.target.checked)}return this._setBackgroundColor(P),this._setDefaultPropertiesFromJS(P),this.container.append(P),this.container}}class W extends n{constructor(F){super(F,{ignoreBorder:F.data.hasAppearance})}render(){const F=super.render();F.classList.add("buttonWidgetAnnotation","pushButton"),this.data.alternativeText&&(F.title=this.data.alternativeText);const Z=F.lastChild;return this.enableScripting&&this.hasJSActions&&Z&&(this._setDefaultPropertiesFromJS(Z),Z.addEventListener("updatefromsandbox",X=>{this._dispatchEventFromSandbox({},X)})),F}}class z extends y{constructor(F){super(F,{isRenderable:F.renderForms})}render(){this.container.classList.add("choiceWidgetAnnotation");const F=this.annotationStorage,Z=this.data.id,X=F.getValue(Z,{value:this.data.fieldValue}),U=document.createElement("select");j.add(U),U.setAttribute("data-element-id",Z),U.disabled=this.data.readOnly,this._setRequired(U,this.data.required),U.name=this.data.fieldName,U.tabIndex=D;let P=this.data.combo&&this.data.options.length>0;this.data.combo||(U.size=this.data.options.length,this.data.multiSelect&&(U.multiple=!0)),U.addEventListener("resetform",LZ=>{const OZ=this.data.defaultFieldValue;for(const zZ of U.options)zZ.selected=zZ.value===OZ});for(const LZ of this.data.options){const OZ=document.createElement("option");OZ.textContent=LZ.displayValue,OZ.value=LZ.exportValue,X.value.includes(LZ.exportValue)&&(OZ.setAttribute("selected",!0),P=!1),U.append(OZ)}let Ml=null;if(P){const LZ=document.createElement("option");LZ.value=" ",LZ.setAttribute("hidden",!0),LZ.setAttribute("selected",!0),U.prepend(LZ),Ml=()=>{LZ.remove(),U.removeEventListener("input",Ml),Ml=null},U.addEventListener("input",Ml)}const $l=LZ=>{const OZ=LZ?"value":"textContent",{options:zZ,multiple:oZ}=U;return oZ?Array.prototype.filter.call(zZ,kZ=>kZ.selected).map(kZ=>kZ[OZ]):zZ.selectedIndex===-1?null:zZ[zZ.selectedIndex][OZ]};let GZ=$l(!1);const eZ=LZ=>{const OZ=LZ.target.options;return Array.prototype.map.call(OZ,zZ=>({displayValue:zZ.textContent,exportValue:zZ.value}))};return this.enableScripting&&this.hasJSActions?(U.addEventListener("updatefromsandbox",LZ=>{const OZ={value(zZ){Ml==null||Ml();const oZ=zZ.detail.value,kZ=new Set(Array.isArray(oZ)?oZ:[oZ]);for(const KZ of U.options)KZ.selected=kZ.has(KZ.value);F.setValue(Z,{value:$l(!0)}),GZ=$l(!1)},multipleSelection(zZ){U.multiple=!0},remove(zZ){const oZ=U.options,kZ=zZ.detail.remove;oZ[kZ].selected=!1,U.remove(kZ),oZ.length>0&&Array.prototype.findIndex.call(oZ,QZ=>QZ.selected)===-1&&(oZ[0].selected=!0),F.setValue(Z,{value:$l(!0),items:eZ(zZ)}),GZ=$l(!1)},clear(zZ){for(;U.length!==0;)U.remove(0);F.setValue(Z,{value:null,items:[]}),GZ=$l(!1)},insert(zZ){const{index:oZ,displayValue:kZ,exportValue:KZ}=zZ.detail.insert,QZ=U.children[oZ],PZ=document.createElement("option");PZ.textContent=kZ,PZ.value=KZ,QZ?QZ.before(PZ):U.append(PZ),F.setValue(Z,{value:$l(!0),items:eZ(zZ)}),GZ=$l(!1)},items(zZ){const{items:oZ}=zZ.detail;for(;U.length!==0;)U.remove(0);for(const kZ of oZ){const{displayValue:KZ,exportValue:QZ}=kZ,PZ=document.createElement("option");PZ.textContent=KZ,PZ.value=QZ,U.append(PZ)}U.options.length>0&&(U.options[0].selected=!0),F.setValue(Z,{value:$l(!0),items:eZ(zZ)}),GZ=$l(!1)},indices(zZ){const oZ=new Set(zZ.detail.indices);for(const kZ of zZ.target.options)kZ.selected=oZ.has(kZ.index);F.setValue(Z,{value:$l(!0)}),GZ=$l(!1)},editable(zZ){zZ.target.disabled=!zZ.detail.editable}};this._dispatchEventFromSandbox(OZ,LZ)}),U.addEventListener("input",LZ=>{var zZ;const OZ=$l(!0);F.setValue(Z,{value:OZ}),LZ.preventDefault(),(zZ=this.linkService.eventBus)==null||zZ.dispatch("dispatcheventinsandbox",{source:this,detail:{id:Z,name:"Keystroke",value:GZ,changeEx:OZ,willCommit:!1,commitKey:1,keyDown:!1}})}),this._setEventListeners(U,null,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"],["input","Action"],["input","Validate"]],LZ=>LZ.target.value)):U.addEventListener("input",function(LZ){F.setValue(Z,{value:$l(!0)})}),this.data.combo&&this._setTextStyle(U),this._setBackgroundColor(U),this._setDefaultPropertiesFromJS(U),this.container.append(U),this.container}}class M extends L{constructor(F){const{data:Z,elements:X}=F;super(F,{isRenderable:L._hasPopupData(Z)}),this.elements=X}render(){this.container.classList.add("popupAnnotation");const F=new i({container:this.container,color:this.data.color,titleObj:this.data.titleObj,modificationDate:this.data.modificationDate,contentsObj:this.data.contentsObj,richText:this.data.richText,rect:this.data.rect,parentRect:this.data.parentRect||null,parent:this.parent,elements:this.elements,open:this.data.open}),Z=[];for(const X of this.elements)X.popup=F,Z.push(X.data.id),X.addHighlightArea();return this.container.setAttribute("aria-controls",Z.map(X=>`${s.AnnotationPrefix}${X}`).join(",")),this.container}}class i{constructor({container:F,color:Z,elements:X,titleObj:U,modificationDate:P,contentsObj:Ml,richText:$l,parent:GZ,rect:eZ,parentRect:LZ,open:OZ}){g(this,jZ);g(this,JZ);g(this,gZ);g(this,rZ);g(this,E,null);g(this,_l,Zl(this,jZ,Sd).bind(this));g(this,el,Zl(this,rZ,Zd).bind(this));g(this,lZ,Zl(this,gZ,ld).bind(this));g(this,bZ,Zl(this,JZ,pc).bind(this));g(this,NZ,null);g(this,iZ,null);g(this,pZ,null);g(this,DZ,null);g(this,YZ,null);g(this,IZ,null);g(this,mZ,!1);g(this,Xl,null);g(this,Vl,null);g(this,sZ,null);g(this,XZ,null);g(this,TZ,!1);var oZ;Al(this,iZ,F),Al(this,XZ,U),Al(this,pZ,Ml),Al(this,sZ,$l),Al(this,YZ,GZ),Al(this,NZ,Z),Al(this,Vl,eZ),Al(this,IZ,LZ),Al(this,DZ,X);const zZ=Y.PDFDateString.toDateObject(P);zZ&&Al(this,E,GZ.l10n.get("annotation_date_string",{date:zZ.toLocaleDateString(),time:zZ.toLocaleTimeString()})),this.trigger=X.flatMap(kZ=>kZ.getElementsToTriggerPopup());for(const kZ of this.trigger)kZ.addEventListener("click",l(this,bZ)),kZ.addEventListener("mouseenter",l(this,lZ)),kZ.addEventListener("mouseleave",l(this,el)),kZ.classList.add("popupTriggerArea");for(const kZ of X)(oZ=kZ.container)==null||oZ.addEventListener("keydown",l(this,_l));l(this,iZ).hidden=!0,OZ&&Zl(this,JZ,pc).call(this)}render(){if(l(this,Xl))return;const{page:{view:F},viewport:{rawDims:{pageWidth:Z,pageHeight:X,pageX:U,pageY:P}}}=l(this,YZ),Ml=Al(this,Xl,document.createElement("div"));if(Ml.className="popup",l(this,NZ)){const fZ=Ml.style.outlineColor=s.Util.makeHexColor(...l(this,NZ));CSS.supports("background-color","color-mix(in srgb, red 30%, white)")?Ml.style.backgroundColor=`color-mix(in srgb, ${fZ} 30%, white)`:Ml.style.backgroundColor=s.Util.makeHexColor(...l(this,NZ).map(Zc=>Math.floor(.7*(255-Zc)+Zc)))}const $l=document.createElement("span");$l.className="header";const GZ=document.createElement("h1");if($l.append(GZ),{dir:GZ.dir,str:GZ.textContent}=l(this,XZ),Ml.append($l),l(this,E)){const fZ=document.createElement("span");fZ.classList.add("popupDate"),l(this,E).then(qZ=>{fZ.textContent=qZ}),$l.append(fZ)}const eZ=l(this,pZ),LZ=l(this,sZ);if(LZ!=null&&LZ.str&&(!(eZ!=null&&eZ.str)||eZ.str===LZ.str))C.XfaLayer.render({xfaHtml:LZ.html,intent:"richText",div:Ml}),Ml.lastChild.classList.add("richText","popupContent");else{const fZ=this._formatContents(eZ);Ml.append(fZ)}let OZ=!!l(this,IZ),zZ=OZ?l(this,IZ):l(this,Vl);for(const fZ of l(this,DZ))if(!zZ||s.Util.intersect(fZ.data.rect,zZ)!==null){zZ=fZ.data.rect,OZ=!0;break}const oZ=s.Util.normalizeRect([zZ[0],F[3]-zZ[1]+F[1],zZ[2],F[3]-zZ[3]+F[1]]),KZ=OZ?zZ[2]-zZ[0]+5:0,QZ=oZ[0]+KZ,PZ=oZ[1],{style:_Z}=l(this,iZ);_Z.left=`${100*(QZ-U)/Z}%`,_Z.top=`${100*(PZ-P)/X}%`,l(this,iZ).append(Ml)}_formatContents({str:F,dir:Z}){const X=document.createElement("p");X.classList.add("popupContent"),X.dir=Z;const U=F.split(/(?:\r\n?|\n)/);for(let P=0,Ml=U.length;P<Ml;++P){const $l=U[P];X.append(document.createTextNode($l)),P<Ml-1&&X.append(document.createElement("br"))}return X}forceHide(){Al(this,TZ,this.isVisible),l(this,TZ)&&(l(this,iZ).hidden=!0)}maybeShow(){l(this,TZ)&&(Al(this,TZ,!1),l(this,iZ).hidden=!1)}get isVisible(){return l(this,iZ).hidden===!1}}E=new WeakMap,_l=new WeakMap,el=new WeakMap,lZ=new WeakMap,bZ=new WeakMap,NZ=new WeakMap,iZ=new WeakMap,pZ=new WeakMap,DZ=new WeakMap,YZ=new WeakMap,IZ=new WeakMap,mZ=new WeakMap,Xl=new WeakMap,Vl=new WeakMap,sZ=new WeakMap,XZ=new WeakMap,TZ=new WeakMap,jZ=new WeakSet,Sd=function(F){F.altKey||F.shiftKey||F.ctrlKey||F.metaKey||(F.key==="Enter"||F.key==="Escape"&&l(this,mZ))&&Zl(this,JZ,pc).call(this)},JZ=new WeakSet,pc=function(){Al(this,mZ,!l(this,mZ)),l(this,mZ)?(Zl(this,gZ,ld).call(this),l(this,iZ).addEventListener("click",l(this,bZ)),l(this,iZ).addEventListener("keydown",l(this,_l))):(Zl(this,rZ,Zd).call(this),l(this,iZ).removeEventListener("click",l(this,bZ)),l(this,iZ).removeEventListener("keydown",l(this,_l)))},gZ=new WeakSet,ld=function(){l(this,Xl)||this.render(),this.isVisible?l(this,mZ)&&l(this,iZ).classList.add("focused"):(l(this,iZ).hidden=!1,l(this,iZ).style.zIndex=parseInt(l(this,iZ).style.zIndex)+1e3)},rZ=new WeakSet,Zd=function(){l(this,iZ).classList.remove("focused"),!(l(this,mZ)||!this.isVisible)&&(l(this,iZ).hidden=!0,l(this,iZ).style.zIndex=parseInt(l(this,iZ).style.zIndex)-1e3)};class x extends L{constructor(F){super(F,{isRenderable:!0,ignoreBorder:!0}),this.textContent=F.data.textContent,this.textPosition=F.data.textPosition,this.annotationEditorType=s.AnnotationEditorType.FREETEXT}render(){if(this.container.classList.add("freeTextAnnotation"),this.textContent){const F=document.createElement("div");F.classList.add("annotationTextContent"),F.setAttribute("role","comment");for(const Z of this.textContent){const X=document.createElement("span");X.textContent=Z,F.append(X)}this.container.append(F)}return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this._editOnDoubleClick(),this.container}}m.FreeTextAnnotationElement=x;class T extends L{constructor(Z){super(Z,{isRenderable:!0,ignoreBorder:!0});g(this,Yl,null)}render(){this.container.classList.add("lineAnnotation");const Z=this.data,{width:X,height:U}=k(Z.rect),P=this.svgFactory.create(X,U,!0),Ml=Al(this,Yl,this.svgFactory.createElement("svg:line"));return Ml.setAttribute("x1",Z.rect[2]-Z.lineCoordinates[0]),Ml.setAttribute("y1",Z.rect[3]-Z.lineCoordinates[1]),Ml.setAttribute("x2",Z.rect[2]-Z.lineCoordinates[2]),Ml.setAttribute("y2",Z.rect[3]-Z.lineCoordinates[3]),Ml.setAttribute("stroke-width",Z.borderStyle.width||1),Ml.setAttribute("stroke","transparent"),Ml.setAttribute("fill","transparent"),P.append(Ml),this.container.append(P),!Z.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return l(this,Yl)}addHighlightArea(){this.container.classList.add("highlightArea")}}Yl=new WeakMap;class Q extends L{constructor(Z){super(Z,{isRenderable:!0,ignoreBorder:!0});g(this,cl,null)}render(){this.container.classList.add("squareAnnotation");const Z=this.data,{width:X,height:U}=k(Z.rect),P=this.svgFactory.create(X,U,!0),Ml=Z.borderStyle.width,$l=Al(this,cl,this.svgFactory.createElement("svg:rect"));return $l.setAttribute("x",Ml/2),$l.setAttribute("y",Ml/2),$l.setAttribute("width",X-Ml),$l.setAttribute("height",U-Ml),$l.setAttribute("stroke-width",Ml||1),$l.setAttribute("stroke","transparent"),$l.setAttribute("fill","transparent"),P.append($l),this.container.append(P),!Z.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return l(this,cl)}addHighlightArea(){this.container.classList.add("highlightArea")}}cl=new WeakMap;class f extends L{constructor(Z){super(Z,{isRenderable:!0,ignoreBorder:!0});g(this,aZ,null)}render(){this.container.classList.add("circleAnnotation");const Z=this.data,{width:X,height:U}=k(Z.rect),P=this.svgFactory.create(X,U,!0),Ml=Z.borderStyle.width,$l=Al(this,aZ,this.svgFactory.createElement("svg:ellipse"));return $l.setAttribute("cx",X/2),$l.setAttribute("cy",U/2),$l.setAttribute("rx",X/2-Ml/2),$l.setAttribute("ry",U/2-Ml/2),$l.setAttribute("stroke-width",Ml||1),$l.setAttribute("stroke","transparent"),$l.setAttribute("fill","transparent"),P.append($l),this.container.append(P),!Z.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return l(this,aZ)}addHighlightArea(){this.container.classList.add("highlightArea")}}aZ=new WeakMap;class I extends L{constructor(Z){super(Z,{isRenderable:!0,ignoreBorder:!0});g(this,MZ,null);this.containerClassName="polylineAnnotation",this.svgElementName="svg:polyline"}render(){this.container.classList.add(this.containerClassName);const Z=this.data,{width:X,height:U}=k(Z.rect),P=this.svgFactory.create(X,U,!0);let Ml=[];for(const GZ of Z.vertices){const eZ=GZ.x-Z.rect[0],LZ=Z.rect[3]-GZ.y;Ml.push(eZ+","+LZ)}Ml=Ml.join(" ");const $l=Al(this,MZ,this.svgFactory.createElement(this.svgElementName));return $l.setAttribute("points",Ml),$l.setAttribute("stroke-width",Z.borderStyle.width||1),$l.setAttribute("stroke","transparent"),$l.setAttribute("fill","transparent"),P.append($l),this.container.append(P),!Z.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return l(this,MZ)}addHighlightArea(){this.container.classList.add("highlightArea")}}MZ=new WeakMap;class Wl extends I{constructor(F){super(F),this.containerClassName="polygonAnnotation",this.svgElementName="svg:polygon"}}class ql extends L{constructor(F){super(F,{isRenderable:!0,ignoreBorder:!0})}render(){return this.container.classList.add("caretAnnotation"),!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container}}class cZ extends L{constructor(Z){super(Z,{isRenderable:!0,ignoreBorder:!0});g(this,BZ,[]);this.containerClassName="inkAnnotation",this.svgElementName="svg:polyline",this.annotationEditorType=s.AnnotationEditorType.INK}render(){this.container.classList.add(this.containerClassName);const Z=this.data,{width:X,height:U}=k(Z.rect),P=this.svgFactory.create(X,U,!0);for(const Ml of Z.inkLists){let $l=[];for(const eZ of Ml){const LZ=eZ.x-Z.rect[0],OZ=Z.rect[3]-eZ.y;$l.push(`${LZ},${OZ}`)}$l=$l.join(" ");const GZ=this.svgFactory.createElement(this.svgElementName);l(this,BZ).push(GZ),GZ.setAttribute("points",$l),GZ.setAttribute("stroke-width",Z.borderStyle.width||1),GZ.setAttribute("stroke","transparent"),GZ.setAttribute("fill","transparent"),!Z.popupRef&&this.hasPopupData&&this._createPopup(),P.append(GZ)}return this.container.append(P),this.container}getElementsToTriggerPopup(){return l(this,BZ)}addHighlightArea(){this.container.classList.add("highlightArea")}}BZ=new WeakMap,m.InkAnnotationElement=cZ;class v extends L{constructor(F){super(F,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("highlightAnnotation"),this.container}}class tZ extends L{constructor(F){super(F,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("underlineAnnotation"),this.container}}class WZ extends L{constructor(F){super(F,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("squigglyAnnotation"),this.container}}class nZ extends L{constructor(F){super(F,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("strikeoutAnnotation"),this.container}}class VZ extends L{constructor(F){super(F,{isRenderable:!0,ignoreBorder:!0})}render(){return this.container.classList.add("stampAnnotation"),!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container}}m.StampAnnotationElement=VZ;class R extends L{constructor(Z){var P;super(Z,{isRenderable:!0});g(this,Nl);g(this,vZ,null);const{filename:X,content:U}=this.data.file;this.filename=(0,Y.getFilenameFromUrl)(X,!0),this.content=U,(P=this.linkService.eventBus)==null||P.dispatch("fileattachmentannotation",{source:this,filename:X,content:U})}render(){this.container.classList.add("fileAttachmentAnnotation");const{container:Z,data:X}=this;let U;X.hasAppearance||X.fillAlpha===0?U=document.createElement("div"):(U=document.createElement("img"),U.src=`${this.imageResourcesPath}annotation-${/paperclip/i.test(X.name)?"paperclip":"pushpin"}.svg`,X.fillAlpha&&X.fillAlpha<1&&(U.style=`filter: opacity(${Math.round(X.fillAlpha*100)}%);`)),U.addEventListener("dblclick",Zl(this,Nl,cd).bind(this)),Al(this,vZ,U);const{isMac:P}=s.FeatureTest.platform;return Z.addEventListener("keydown",Ml=>{Ml.key==="Enter"&&(P?Ml.metaKey:Ml.ctrlKey)&&Zl(this,Nl,cd).call(this)}),!X.popupRef&&this.hasPopupData?this._createPopup():U.classList.add("popupTriggerArea"),Z.append(U),Z}getElementsToTriggerPopup(){return l(this,vZ)}addHighlightArea(){this.container.classList.add("highlightArea")}}vZ=new WeakMap,Nl=new WeakSet,cd=function(){var Z;(Z=this.downloadManager)==null||Z.openOrDownloadData(this.container,this.content,this.filename)};class c{constructor({div:F,accessibilityManager:Z,annotationCanvasMap:X,l10n:U,page:P,viewport:Ml}){g(this,xZ);g(this,hZ);g(this,SZ,null);g(this,yZ,null);g(this,wZ,new Map);this.div=F,Al(this,SZ,Z),Al(this,yZ,X),this.l10n=U,this.page=P,this.viewport=Ml,this.zIndex=0,this.l10n||(this.l10n=ZZ.NullL10n)}async render(F){const{annotations:Z}=F,X=this.div;(0,Y.setLayerDimensions)(X,this.viewport);const U=new Map,P={data:null,layer:X,linkService:F.linkService,downloadManager:F.downloadManager,imageResourcesPath:F.imageResourcesPath||"",renderForms:F.renderForms!==!1,svgFactory:new Y.DOMSVGFactory,annotationStorage:F.annotationStorage||new B.AnnotationStorage,enableScripting:F.enableScripting===!0,hasJSActions:F.hasJSActions,fieldObjects:F.fieldObjects,parent:this,elements:null};for(const Ml of Z){if(Ml.noHTML)continue;const $l=Ml.annotationType===s.AnnotationType.POPUP;if($l){const LZ=U.get(Ml.id);if(!LZ)continue;P.elements=LZ}else{const{width:LZ,height:OZ}=k(Ml.rect);if(LZ<=0||OZ<=0)continue}P.data=Ml;const GZ=w.create(P);if(!GZ.isRenderable)continue;if(!$l&&Ml.popupRef){const LZ=U.get(Ml.popupRef);LZ?LZ.push(GZ):U.set(Ml.popupRef,[GZ])}GZ.annotationEditorType>0&&l(this,wZ).set(GZ.data.id,GZ);const eZ=GZ.render();Ml.hidden&&(eZ.style.visibility="hidden"),Zl(this,xZ,wd).call(this,eZ,Ml.id)}Zl(this,hZ,dd).call(this),await this.l10n.translate(X)}update({viewport:F}){const Z=this.div;this.viewport=F,(0,Y.setLayerDimensions)(Z,{rotation:F.rotation}),Zl(this,hZ,dd).call(this),Z.hidden=!1}getEditableAnnotations(){return Array.from(l(this,wZ).values())}getEditableAnnotation(F){return l(this,wZ).get(F)}}SZ=new WeakMap,yZ=new WeakMap,wZ=new WeakMap,xZ=new WeakSet,wd=function(F,Z){var U;const X=F.firstChild||F;X.id=`${s.AnnotationPrefix}${Z}`,this.div.append(F),(U=l(this,SZ))==null||U.moveElementInDOM(this.div,F,X,!1)},hZ=new WeakSet,dd=function(){if(!l(this,yZ))return;const F=this.div;for(const[Z,X]of l(this,yZ)){const U=F.querySelector(`[data-annotation-id="${Z}"]`);if(!U)continue;const{firstChild:P}=U;P?P.nodeName==="CANVAS"?P.replaceWith(X):P.before(X):U.append(X)}l(this,yZ).clear()},m.AnnotationLayer=c},(H,m)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.ColorConverters=void 0;function O(B){return Math.floor(Math.max(0,Math.min(1,B))*255).toString(16).padStart(2,"0")}function s(B){return Math.max(0,Math.min(255,255*B))}class Y{static CMYK_G([r,ZZ,C,D]){return["G",1-Math.min(1,.3*r+.59*C+.11*ZZ+D)]}static G_CMYK([r]){return["CMYK",0,0,0,1-r]}static G_RGB([r]){return["RGB",r,r,r]}static G_rgb([r]){return r=s(r),[r,r,r]}static G_HTML([r]){const ZZ=O(r);return`#${ZZ}${ZZ}${ZZ}`}static RGB_G([r,ZZ,C]){return["G",.3*r+.59*ZZ+.11*C]}static RGB_rgb(r){return r.map(s)}static RGB_HTML(r){return`#${r.map(O).join("")}`}static T_HTML(){return"#00000000"}static T_rgb(){return[null]}static CMYK_RGB([r,ZZ,C,D]){return["RGB",1-Math.min(1,r+D),1-Math.min(1,C+D),1-Math.min(1,ZZ+D)]}static CMYK_rgb([r,ZZ,C,D]){return[s(1-Math.min(1,r+D)),s(1-Math.min(1,C+D)),s(1-Math.min(1,ZZ+D))]}static CMYK_HTML(r){const ZZ=this.CMYK_RGB(r).slice(1);return this.RGB_HTML(ZZ)}static RGB_CMYK([r,ZZ,C]){const D=1-r,N=1-ZZ,j=1-C,k=Math.min(D,N,j);return["CMYK",D,N,j,k]}}m.ColorConverters=Y},(H,m)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.NullL10n=void 0,m.getL10nFallback=s;const O={of_pages:"of {{pagesCount}}",page_of_pages:"({{pageNumber}} of {{pagesCount}})",document_properties_kb:"{{size_kb}} KB ({{size_b}} bytes)",document_properties_mb:"{{size_mb}} MB ({{size_b}} bytes)",document_properties_date_string:"{{date}}, {{time}}",document_properties_page_size_unit_inches:"in",document_properties_page_size_unit_millimeters:"mm",document_properties_page_size_orientation_portrait:"portrait",document_properties_page_size_orientation_landscape:"landscape",document_properties_page_size_name_a3:"A3",document_properties_page_size_name_a4:"A4",document_properties_page_size_name_letter:"Letter",document_properties_page_size_name_legal:"Legal",document_properties_page_size_dimension_string:"{{width}} × {{height}} {{unit}} ({{orientation}})",document_properties_page_size_dimension_name_string:"{{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})",document_properties_linearized_yes:"Yes",document_properties_linearized_no:"No",additional_layers:"Additional Layers",page_landmark:"Page {{page}}",thumb_page_title:"Page {{page}}",thumb_page_canvas:"Thumbnail of Page {{page}}",find_reached_top:"Reached top of document, continued from bottom",find_reached_bottom:"Reached end of document, continued from top","find_match_count[one]":"{{current}} of {{total}} match","find_match_count[other]":"{{current}} of {{total}} matches","find_match_count_limit[one]":"More than {{limit}} match","find_match_count_limit[other]":"More than {{limit}} matches",find_not_found:"Phrase not found",page_scale_width:"Page Width",page_scale_fit:"Page Fit",page_scale_auto:"Automatic Zoom",page_scale_actual:"Actual Size",page_scale_percent:"{{scale}}%",loading_error:"An error occurred while loading the PDF.",invalid_file_error:"Invalid or corrupted PDF file.",missing_file_error:"Missing PDF file.",unexpected_response_error:"Unexpected server response.",rendering_error:"An error occurred while rendering the page.",annotation_date_string:"{{date}}, {{time}}",printing_not_supported:"Warning: Printing is not fully supported by this browser.",printing_not_ready:"Warning: The PDF is not fully loaded for printing.",web_fonts_disabled:"Web fonts are disabled: unable to use embedded PDF fonts.",free_text2_default_content:"Start typing…",editor_free_text2_aria_label:"Text Editor",editor_ink2_aria_label:"Draw Editor",editor_ink_canvas_aria_label:"User-created image",editor_alt_text_button_label:"Alt text",editor_alt_text_edit_button_label:"Edit alt text",editor_alt_text_decorative_tooltip:"Marked as decorative"};O.print_progress_percent="{{progress}}%";function s(r,ZZ){switch(r){case"find_match_count":r=`find_match_count[${ZZ.total===1?"one":"other"}]`;break;case"find_match_count_limit":r=`find_match_count_limit[${ZZ.limit===1?"one":"other"}]`;break}return O[r]||""}function Y(r,ZZ){return ZZ?r.replaceAll(/\{\{\s*(\w+)\s*\}\}/g,(C,D)=>D in ZZ?ZZ[D]:"{{"+D+"}}"):r}const B={async getLanguage(){return"en-us"},async getDirection(){return"ltr"},async get(r,ZZ=null,C=s(r,ZZ)){return Y(C,ZZ)},async translate(r){}};m.NullL10n=B},(H,m,O)=>{Object.defineProperty(m,"__esModule",{value:!0}),m.XfaLayer=void 0;var s=O(25);class Y{static setupStorage(r,ZZ,C,D,N){const j=D.getValue(ZZ,{value:null});switch(C.name){case"textarea":if(j.value!==null&&(r.textContent=j.value),N==="print")break;r.addEventListener("input",k=>{D.setValue(ZZ,{value:k.target.value})});break;case"input":if(C.attributes.type==="radio"||C.attributes.type==="checkbox"){if(j.value===C.attributes.xfaOn?r.setAttribute("checked",!0):j.value===C.attributes.xfaOff&&r.removeAttribute("checked"),N==="print")break;r.addEventListener("change",k=>{D.setValue(ZZ,{value:k.target.checked?k.target.getAttribute("xfaOn"):k.target.getAttribute("xfaOff")})})}else{if(j.value!==null&&r.setAttribute("value",j.value),N==="print")break;r.addEventListener("input",k=>{D.setValue(ZZ,{value:k.target.value})})}break;case"select":if(j.value!==null){r.setAttribute("value",j.value);for(const k of C.children)k.attributes.value===j.value?k.attributes.selected=!0:k.attributes.hasOwnProperty("selected")&&delete k.attributes.selected}r.addEventListener("input",k=>{const w=k.target.options,L=w.selectedIndex===-1?"":w[w.selectedIndex].value;D.setValue(ZZ,{value:L})});break}}static setAttributes({html:r,element:ZZ,storage:C=null,intent:D,linkService:N}){const{attributes:j}=ZZ,k=r instanceof HTMLAnchorElement;j.type==="radio"&&(j.name=`${j.name}-${D}`);for(const[w,L]of Object.entries(j))if(L!=null)switch(w){case"class":L.length&&r.setAttribute(w,L.join(" "));break;case"dataId":break;case"id":r.setAttribute("data-element-id",L);break;case"style":Object.assign(r.style,L);break;case"textContent":r.textContent=L;break;default:(!k||w!=="href"&&w!=="newWindow")&&r.setAttribute(w,L)}k&&N.addLinkAttributes(r,j.href,j.newWindow),C&&j.dataId&&this.setupStorage(r,j.dataId,ZZ,C)}static render(r){var n;const ZZ=r.annotationStorage,C=r.linkService,D=r.xfaHtml,N=r.intent||"display",j=document.createElement(D.name);D.attributes&&this.setAttributes({html:j,element:D,intent:N,linkService:C});const k=[[D,-1,j]],w=r.div;if(w.append(j),r.viewport){const u=`matrix(${r.viewport.transform.join(",")})`;w.style.transform=u}N!=="richText"&&w.setAttribute("class","xfaLayer xfaFont");const L=[];for(;k.length>0;){const[u,y,o]=k.at(-1);if(y+1===u.children.length){k.pop();continue}const p=u.children[++k.at(-1)[1]];if(p===null)continue;const{name:e}=p;if(e==="#text"){const W=document.createTextNode(p.value);L.push(W),o.append(W);continue}const G=(n=p==null?void 0:p.attributes)!=null&&n.xmlns?document.createElementNS(p.attributes.xmlns,e):document.createElement(e);if(o.append(G),p.attributes&&this.setAttributes({html:G,element:p,storage:ZZ,intent:N,linkService:C}),p.children&&p.children.length>0)k.push([p,-1,G]);else if(p.value){const W=document.createTextNode(p.value);s.XfaText.shouldBuildText(e)&&L.push(W),G.append(W)}}for(const u of w.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea"))u.setAttribute("readOnly",!0);return{textDivs:L}}static update(r){const ZZ=`matrix(${r.viewport.transform.join(",")})`;r.div.style.transform=ZZ,r.div.hidden=!1}}m.XfaLayer=Y},(H,m,O)=>{var D,N,j,k,w,L,n,u,y,o,p,e,G,W,z,xd,i,Dd,T,jd,f,kd,Wl,td,cZ,Jd,tZ,bd,nZ,Fd,R,Ud,b,Od,a,Cd,V,gd,E,lc,el,sd,bZ,zc,iZ,oc,DZ,ic,IZ,id,Xl,Ic,sZ,Kd,TZ,md,UZ,rd,CZ,Ed,FZ,Wd,dZ,Rc,cl,mc;Object.defineProperty(m,"__esModule",{value:!0}),m.InkEditor=void 0;var s=O(1),Y=O(4),B=O(29),r=O(6),ZZ=O(5);const MZ=class MZ extends Y.AnnotationEditor{constructor(Nl){super({...Nl,name:"inkEditor"});g(this,z);g(this,i);g(this,T);g(this,f);g(this,Wl);g(this,cZ);g(this,tZ);g(this,nZ);g(this,R);g(this,b);g(this,a);g(this,V);g(this,E);g(this,el);g(this,bZ);g(this,iZ);g(this,DZ);g(this,IZ);g(this,Xl);g(this,CZ);g(this,FZ);g(this,dZ);g(this,cl);g(this,D,0);g(this,N,0);g(this,j,this.canvasPointermove.bind(this));g(this,k,this.canvasPointerleave.bind(this));g(this,w,this.canvasPointerup.bind(this));g(this,L,this.canvasPointerdown.bind(this));g(this,n,new Path2D);g(this,u,!1);g(this,y,!1);g(this,o,!1);g(this,p,null);g(this,e,0);g(this,G,0);g(this,W,null);this.color=Nl.color||null,this.thickness=Nl.thickness||null,this.opacity=Nl.opacity||null,this.paths=[],this.bezierPath2D=[],this.allRawPaths=[],this.currentPath=[],this.scaleFactor=1,this.translationX=this.translationY=0,this.x=0,this.y=0,this._willKeepAspectRatio=!0}static initialize(Nl){Y.AnnotationEditor.initialize(Nl,{strings:["editor_ink_canvas_aria_label","editor_ink2_aria_label"]})}static updateDefaultParams(Nl,uZ){switch(Nl){case s.AnnotationEditorParamsType.INK_THICKNESS:MZ._defaultThickness=uZ;break;case s.AnnotationEditorParamsType.INK_COLOR:MZ._defaultColor=uZ;break;case s.AnnotationEditorParamsType.INK_OPACITY:MZ._defaultOpacity=uZ/100;break}}updateParams(Nl,uZ){switch(Nl){case s.AnnotationEditorParamsType.INK_THICKNESS:Zl(this,z,xd).call(this,uZ);break;case s.AnnotationEditorParamsType.INK_COLOR:Zl(this,i,Dd).call(this,uZ);break;case s.AnnotationEditorParamsType.INK_OPACITY:Zl(this,T,jd).call(this,uZ);break}}static get defaultPropertiesToUpdate(){return[[s.AnnotationEditorParamsType.INK_THICKNESS,MZ._defaultThickness],[s.AnnotationEditorParamsType.INK_COLOR,MZ._defaultColor||Y.AnnotationEditor._defaultLineColor],[s.AnnotationEditorParamsType.INK_OPACITY,Math.round(MZ._defaultOpacity*100)]]}get propertiesToUpdate(){return[[s.AnnotationEditorParamsType.INK_THICKNESS,this.thickness||MZ._defaultThickness],[s.AnnotationEditorParamsType.INK_COLOR,this.color||MZ._defaultColor||Y.AnnotationEditor._defaultLineColor],[s.AnnotationEditorParamsType.INK_OPACITY,Math.round(100*(this.opacity??MZ._defaultOpacity))]]}rebuild(){this.parent&&(super.rebuild(),this.div!==null&&(this.canvas||(Zl(this,bZ,zc).call(this),Zl(this,iZ,oc).call(this)),this.isAttachedToDOM||(this.parent.add(this),Zl(this,DZ,ic).call(this)),Zl(this,cl,mc).call(this)))}remove(){this.canvas!==null&&(this.isEmpty()||this.commit(),this.canvas.width=this.canvas.height=0,this.canvas.remove(),this.canvas=null,l(this,p).disconnect(),Al(this,p,null),super.remove())}setParent(Nl){!this.parent&&Nl?this._uiManager.removeShouldRescale(this):this.parent&&Nl===null&&this._uiManager.addShouldRescale(this),super.setParent(Nl)}onScaleChanging(){const[Nl,uZ]=this.parentDimensions,SZ=this.width*Nl,yZ=this.height*uZ;this.setDimensions(SZ,yZ)}enableEditMode(){l(this,u)||this.canvas===null||(super.enableEditMode(),this._isDraggable=!1,this.canvas.addEventListener("pointerdown",l(this,L)))}disableEditMode(){!this.isInEditMode()||this.canvas===null||(super.disableEditMode(),this._isDraggable=!this.isEmpty(),this.div.classList.remove("editing"),this.canvas.removeEventListener("pointerdown",l(this,L)))}onceAdded(){this._isDraggable=!this.isEmpty()}isEmpty(){return this.paths.length===0||this.paths.length===1&&this.paths[0].length===0}commit(){l(this,u)||(super.commit(),this.isEditing=!1,this.disableEditMode(),this.setInForeground(),Al(this,u,!0),this.div.classList.add("disabled"),Zl(this,cl,mc).call(this,!0),this.makeResizable(),this.parent.addInkEditorIfNeeded(!0),this.moveInDOM(),this.div.focus({preventScroll:!0}))}focusin(Nl){this._focusEventsAllowed&&(super.focusin(Nl),this.enableEditMode())}canvasPointerdown(Nl){Nl.button!==0||!this.isInEditMode()||l(this,u)||(this.setInForeground(),Nl.preventDefault(),Nl.type!=="mouse"&&this.div.focus(),Zl(this,cZ,Jd).call(this,Nl.offsetX,Nl.offsetY))}canvasPointermove(Nl){Nl.preventDefault(),Zl(this,tZ,bd).call(this,Nl.offsetX,Nl.offsetY)}canvasPointerup(Nl){Nl.preventDefault(),Zl(this,el,sd).call(this,Nl)}canvasPointerleave(Nl){Zl(this,el,sd).call(this,Nl)}get isResizable(){return!this.isEmpty()&&l(this,u)}render(){if(this.div)return this.div;let Nl,uZ;this.width&&(Nl=this.x,uZ=this.y),super.render(),Y.AnnotationEditor._l10nPromise.get("editor_ink2_aria_label").then(HZ=>{var hZ;return(hZ=this.div)==null?void 0:hZ.setAttribute("aria-label",HZ)});const[SZ,yZ,wZ,xZ]=Zl(this,f,kd).call(this);if(this.setAt(SZ,yZ,0,0),this.setDims(wZ,xZ),Zl(this,bZ,zc).call(this),this.width){const[HZ,hZ]=this.parentDimensions;this.setAspectRatio(this.width*HZ,this.height*hZ),this.setAt(Nl*HZ,uZ*hZ,this.width*HZ,this.height*hZ),Al(this,o,!0),Zl(this,DZ,ic).call(this),this.setDims(this.width*HZ,this.height*hZ),Zl(this,E,lc).call(this),this.div.classList.add("disabled")}else this.div.classList.add("editing"),this.enableEditMode();return Zl(this,iZ,oc).call(this),this.div}setDimensions(Nl,uZ){const SZ=Math.round(Nl),yZ=Math.round(uZ);if(l(this,e)===SZ&&l(this,G)===yZ)return;Al(this,e,SZ),Al(this,G,yZ),this.canvas.style.visibility="hidden";const[wZ,xZ]=this.parentDimensions;this.width=Nl/wZ,this.height=uZ/xZ,this.fixAndSetPosition(),l(this,u)&&Zl(this,IZ,id).call(this,Nl,uZ),Zl(this,DZ,ic).call(this),Zl(this,E,lc).call(this),this.canvas.style.visibility="visible",this.fixDims()}static deserialize(Nl,uZ,SZ){var P,Ml,$l;if(Nl instanceof B.InkAnnotationElement)return null;const yZ=super.deserialize(Nl,uZ,SZ);yZ.thickness=Nl.thickness,yZ.color=s.Util.makeHexColor(...Nl.color),yZ.opacity=Nl.opacity;const[wZ,xZ]=yZ.pageDimensions,HZ=yZ.width*wZ,hZ=yZ.height*xZ,EZ=yZ.parentScale,RZ=Nl.thickness/2;Al(yZ,u,!0),Al(yZ,e,Math.round(HZ)),Al(yZ,G,Math.round(hZ));const{paths:F,rect:Z,rotation:X}=Nl;for(let{bezier:GZ}of F){GZ=Zl(P=MZ,UZ,rd).call(P,GZ,Z,X);const eZ=[];yZ.paths.push(eZ);let LZ=EZ*(GZ[0]-RZ),OZ=EZ*(GZ[1]-RZ);for(let oZ=2,kZ=GZ.length;oZ<kZ;oZ+=6){const KZ=EZ*(GZ[oZ]-RZ),QZ=EZ*(GZ[oZ+1]-RZ),PZ=EZ*(GZ[oZ+2]-RZ),_Z=EZ*(GZ[oZ+3]-RZ),fZ=EZ*(GZ[oZ+4]-RZ),qZ=EZ*(GZ[oZ+5]-RZ);eZ.push([[LZ,OZ],[KZ,QZ],[PZ,_Z],[fZ,qZ]]),LZ=fZ,OZ=qZ}const zZ=Zl(this,sZ,Kd).call(this,eZ);yZ.bezierPath2D.push(zZ)}const U=Zl(Ml=yZ,FZ,Wd).call(Ml);return Al(yZ,N,Math.max(Y.AnnotationEditor.MIN_SIZE,U[2]-U[0])),Al(yZ,D,Math.max(Y.AnnotationEditor.MIN_SIZE,U[3]-U[1])),Zl($l=yZ,IZ,id).call($l,HZ,hZ),yZ}serialize(){if(this.isEmpty())return null;const Nl=this.getRect(0,0),uZ=Y.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle);return{annotationType:s.AnnotationEditorType.INK,color:uZ,thickness:this.thickness,opacity:this.opacity,paths:Zl(this,CZ,Ed).call(this,this.scaleFactor/this.parentScale,this.translationX,this.translationY,Nl),pageIndex:this.pageIndex,rect:Nl,rotation:this.rotation,structTreeParentId:this._structTreeParentId}}};D=new WeakMap,N=new WeakMap,j=new WeakMap,k=new WeakMap,w=new WeakMap,L=new WeakMap,n=new WeakMap,u=new WeakMap,y=new WeakMap,o=new WeakMap,p=new WeakMap,e=new WeakMap,G=new WeakMap,W=new WeakMap,z=new WeakSet,xd=function(Nl){const uZ=this.thickness;this.addCommands({cmd:()=>{this.thickness=Nl,Zl(this,cl,mc).call(this)},undo:()=>{this.thickness=uZ,Zl(this,cl,mc).call(this)},mustExec:!0,type:s.AnnotationEditorParamsType.INK_THICKNESS,overwriteIfSameType:!0,keepUndo:!0})},i=new WeakSet,Dd=function(Nl){const uZ=this.color;this.addCommands({cmd:()=>{this.color=Nl,Zl(this,E,lc).call(this)},undo:()=>{this.color=uZ,Zl(this,E,lc).call(this)},mustExec:!0,type:s.AnnotationEditorParamsType.INK_COLOR,overwriteIfSameType:!0,keepUndo:!0})},T=new WeakSet,jd=function(Nl){Nl/=100;const uZ=this.opacity;this.addCommands({cmd:()=>{this.opacity=Nl,Zl(this,E,lc).call(this)},undo:()=>{this.opacity=uZ,Zl(this,E,lc).call(this)},mustExec:!0,type:s.AnnotationEditorParamsType.INK_OPACITY,overwriteIfSameType:!0,keepUndo:!0})},f=new WeakSet,kd=function(){const{parentRotation:Nl,parentDimensions:[uZ,SZ]}=this;switch(Nl){case 90:return[0,SZ,SZ,uZ];case 180:return[uZ,SZ,uZ,SZ];case 270:return[uZ,0,SZ,uZ];default:return[0,0,uZ,SZ]}},Wl=new WeakSet,td=function(){const{ctx:Nl,color:uZ,opacity:SZ,thickness:yZ,parentScale:wZ,scaleFactor:xZ}=this;Nl.lineWidth=yZ*wZ/xZ,Nl.lineCap="round",Nl.lineJoin="round",Nl.miterLimit=10,Nl.strokeStyle=`${uZ}${(0,ZZ.opacityToHex)(SZ)}`},cZ=new WeakSet,Jd=function(Nl,uZ){this.canvas.addEventListener("contextmenu",r.noContextMenu),this.canvas.addEventListener("pointerleave",l(this,k)),this.canvas.addEventListener("pointermove",l(this,j)),this.canvas.addEventListener("pointerup",l(this,w)),this.canvas.removeEventListener("pointerdown",l(this,L)),this.isEditing=!0,l(this,o)||(Al(this,o,!0),Zl(this,DZ,ic).call(this),this.thickness||(this.thickness=MZ._defaultThickness),this.color||(this.color=MZ._defaultColor||Y.AnnotationEditor._defaultLineColor),this.opacity??(this.opacity=MZ._defaultOpacity)),this.currentPath.push([Nl,uZ]),Al(this,y,!1),Zl(this,Wl,td).call(this),Al(this,W,()=>{Zl(this,b,Od).call(this),l(this,W)&&window.requestAnimationFrame(l(this,W))}),window.requestAnimationFrame(l(this,W))},tZ=new WeakSet,bd=function(Nl,uZ){const[SZ,yZ]=this.currentPath.at(-1);if(this.currentPath.length>1&&Nl===SZ&&uZ===yZ)return;const wZ=this.currentPath;let xZ=l(this,n);if(wZ.push([Nl,uZ]),Al(this,y,!0),wZ.length<=2){xZ.moveTo(...wZ[0]),xZ.lineTo(Nl,uZ);return}wZ.length===3&&(Al(this,n,xZ=new Path2D),xZ.moveTo(...wZ[0])),Zl(this,a,Cd).call(this,xZ,...wZ.at(-3),...wZ.at(-2),Nl,uZ)},nZ=new WeakSet,Fd=function(){if(this.currentPath.length===0)return;const Nl=this.currentPath.at(-1);l(this,n).lineTo(...Nl)},R=new WeakSet,Ud=function(Nl,uZ){Al(this,W,null),Nl=Math.min(Math.max(Nl,0),this.canvas.width),uZ=Math.min(Math.max(uZ,0),this.canvas.height),Zl(this,tZ,bd).call(this,Nl,uZ),Zl(this,nZ,Fd).call(this);let SZ;if(this.currentPath.length!==1)SZ=Zl(this,V,gd).call(this);else{const hZ=[Nl,uZ];SZ=[[hZ,hZ.slice(),hZ.slice(),hZ]]}const yZ=l(this,n),wZ=this.currentPath;this.currentPath=[],Al(this,n,new Path2D);const xZ=()=>{this.allRawPaths.push(wZ),this.paths.push(SZ),this.bezierPath2D.push(yZ),this.rebuild()},HZ=()=>{this.allRawPaths.pop(),this.paths.pop(),this.bezierPath2D.pop(),this.paths.length===0?this.remove():(this.canvas||(Zl(this,bZ,zc).call(this),Zl(this,iZ,oc).call(this)),Zl(this,cl,mc).call(this))};this.addCommands({cmd:xZ,undo:HZ,mustExec:!0})},b=new WeakSet,Od=function(){if(!l(this,y))return;Al(this,y,!1);const Nl=Math.ceil(this.thickness*this.parentScale),uZ=this.currentPath.slice(-3),SZ=uZ.map(xZ=>xZ[0]),yZ=uZ.map(xZ=>xZ[1]);Math.min(...SZ)-Nl,Math.max(...SZ)+Nl,Math.min(...yZ)-Nl,Math.max(...yZ)+Nl;const{ctx:wZ}=this;wZ.save(),wZ.clearRect(0,0,this.canvas.width,this.canvas.height);for(const xZ of this.bezierPath2D)wZ.stroke(xZ);wZ.stroke(l(this,n)),wZ.restore()},a=new WeakSet,Cd=function(Nl,uZ,SZ,yZ,wZ,xZ,HZ){const hZ=(uZ+yZ)/2,EZ=(SZ+wZ)/2,RZ=(yZ+xZ)/2,F=(wZ+HZ)/2;Nl.bezierCurveTo(hZ+2*(yZ-hZ)/3,EZ+2*(wZ-EZ)/3,RZ+2*(yZ-RZ)/3,F+2*(wZ-F)/3,RZ,F)},V=new WeakSet,gd=function(){const Nl=this.currentPath;if(Nl.length<=2)return[[Nl[0],Nl[0],Nl.at(-1),Nl.at(-1)]];const uZ=[];let SZ,[yZ,wZ]=Nl[0];for(SZ=1;SZ<Nl.length-2;SZ++){const[Z,X]=Nl[SZ],[U,P]=Nl[SZ+1],Ml=(Z+U)/2,$l=(X+P)/2,GZ=[yZ+2*(Z-yZ)/3,wZ+2*(X-wZ)/3],eZ=[Ml+2*(Z-Ml)/3,$l+2*(X-$l)/3];uZ.push([[yZ,wZ],GZ,eZ,[Ml,$l]]),[yZ,wZ]=[Ml,$l]}const[xZ,HZ]=Nl[SZ],[hZ,EZ]=Nl[SZ+1],RZ=[yZ+2*(xZ-yZ)/3,wZ+2*(HZ-wZ)/3],F=[hZ+2*(xZ-hZ)/3,EZ+2*(HZ-EZ)/3];return uZ.push([[yZ,wZ],RZ,F,[hZ,EZ]]),uZ},E=new WeakSet,lc=function(){if(this.isEmpty()){Zl(this,Xl,Ic).call(this);return}Zl(this,Wl,td).call(this);const{canvas:Nl,ctx:uZ}=this;uZ.setTransform(1,0,0,1,0,0),uZ.clearRect(0,0,Nl.width,Nl.height),Zl(this,Xl,Ic).call(this);for(const SZ of this.bezierPath2D)uZ.stroke(SZ)},el=new WeakSet,sd=function(Nl){this.canvas.removeEventListener("pointerleave",l(this,k)),this.canvas.removeEventListener("pointermove",l(this,j)),this.canvas.removeEventListener("pointerup",l(this,w)),this.canvas.addEventListener("pointerdown",l(this,L)),setTimeout(()=>{this.canvas.removeEventListener("contextmenu",r.noContextMenu)},10),Zl(this,R,Ud).call(this,Nl.offsetX,Nl.offsetY),this.addToAnnotationStorage(),this.setInBackground()},bZ=new WeakSet,zc=function(){this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=0,this.canvas.className="inkEditorCanvas",Y.AnnotationEditor._l10nPromise.get("editor_ink_canvas_aria_label").then(Nl=>{var uZ;return(uZ=this.canvas)==null?void 0:uZ.setAttribute("aria-label",Nl)}),this.div.append(this.canvas),this.ctx=this.canvas.getContext("2d")},iZ=new WeakSet,oc=function(){Al(this,p,new ResizeObserver(Nl=>{const uZ=Nl[0].contentRect;uZ.width&&uZ.height&&this.setDimensions(uZ.width,uZ.height)})),l(this,p).observe(this.div)},DZ=new WeakSet,ic=function(){if(!l(this,o))return;const[Nl,uZ]=this.parentDimensions;this.canvas.width=Math.ceil(this.width*Nl),this.canvas.height=Math.ceil(this.height*uZ),Zl(this,Xl,Ic).call(this)},IZ=new WeakSet,id=function(Nl,uZ){const SZ=Zl(this,dZ,Rc).call(this),yZ=(Nl-SZ)/l(this,N),wZ=(uZ-SZ)/l(this,D);this.scaleFactor=Math.min(yZ,wZ)},Xl=new WeakSet,Ic=function(){const Nl=Zl(this,dZ,Rc).call(this)/2;this.ctx.setTransform(this.scaleFactor,0,0,this.scaleFactor,this.translationX*this.scaleFactor+Nl,this.translationY*this.scaleFactor+Nl)},sZ=new WeakSet,Kd=function(Nl){const uZ=new Path2D;for(let SZ=0,yZ=Nl.length;SZ<yZ;SZ++){const[wZ,xZ,HZ,hZ]=Nl[SZ];SZ===0&&uZ.moveTo(...wZ),uZ.bezierCurveTo(xZ[0],xZ[1],HZ[0],HZ[1],hZ[0],hZ[1])}return uZ},TZ=new WeakSet,md=function(Nl,uZ,SZ){const[yZ,wZ,xZ,HZ]=uZ;switch(SZ){case 0:for(let hZ=0,EZ=Nl.length;hZ<EZ;hZ+=2)Nl[hZ]+=yZ,Nl[hZ+1]=HZ-Nl[hZ+1];break;case 90:for(let hZ=0,EZ=Nl.length;hZ<EZ;hZ+=2){const RZ=Nl[hZ];Nl[hZ]=Nl[hZ+1]+yZ,Nl[hZ+1]=RZ+wZ}break;case 180:for(let hZ=0,EZ=Nl.length;hZ<EZ;hZ+=2)Nl[hZ]=xZ-Nl[hZ],Nl[hZ+1]+=wZ;break;case 270:for(let hZ=0,EZ=Nl.length;hZ<EZ;hZ+=2){const RZ=Nl[hZ];Nl[hZ]=xZ-Nl[hZ+1],Nl[hZ+1]=HZ-RZ}break;default:throw new Error("Invalid rotation")}return Nl},UZ=new WeakSet,rd=function(Nl,uZ,SZ){const[yZ,wZ,xZ,HZ]=uZ;switch(SZ){case 0:for(let hZ=0,EZ=Nl.length;hZ<EZ;hZ+=2)Nl[hZ]-=yZ,Nl[hZ+1]=HZ-Nl[hZ+1];break;case 90:for(let hZ=0,EZ=Nl.length;hZ<EZ;hZ+=2){const RZ=Nl[hZ];Nl[hZ]=Nl[hZ+1]-wZ,Nl[hZ+1]=RZ-yZ}break;case 180:for(let hZ=0,EZ=Nl.length;hZ<EZ;hZ+=2)Nl[hZ]=xZ-Nl[hZ],Nl[hZ+1]-=wZ;break;case 270:for(let hZ=0,EZ=Nl.length;hZ<EZ;hZ+=2){const RZ=Nl[hZ];Nl[hZ]=HZ-Nl[hZ+1],Nl[hZ+1]=xZ-RZ}break;default:throw new Error("Invalid rotation")}return Nl},CZ=new WeakSet,Ed=function(Nl,uZ,SZ,yZ){var EZ,RZ;const wZ=[],xZ=this.thickness/2,HZ=Nl*uZ+xZ,hZ=Nl*SZ+xZ;for(const F of this.paths){const Z=[],X=[];for(let U=0,P=F.length;U<P;U++){const[Ml,$l,GZ,eZ]=F[U],LZ=Nl*Ml[0]+HZ,OZ=Nl*Ml[1]+hZ,zZ=Nl*$l[0]+HZ,oZ=Nl*$l[1]+hZ,kZ=Nl*GZ[0]+HZ,KZ=Nl*GZ[1]+hZ,QZ=Nl*eZ[0]+HZ,PZ=Nl*eZ[1]+hZ;U===0&&(Z.push(LZ,OZ),X.push(LZ,OZ)),Z.push(zZ,oZ,kZ,KZ,QZ,PZ),X.push(zZ,oZ),U===P-1&&X.push(QZ,PZ)}wZ.push({bezier:Zl(EZ=MZ,TZ,md).call(EZ,Z,yZ,this.rotation),points:Zl(RZ=MZ,TZ,md).call(RZ,X,yZ,this.rotation)})}return wZ},FZ=new WeakSet,Wd=function(){let Nl=1/0,uZ=-1/0,SZ=1/0,yZ=-1/0;for(const wZ of this.paths)for(const[xZ,HZ,hZ,EZ]of wZ){const RZ=s.Util.bezierBoundingBox(...xZ,...HZ,...hZ,...EZ);Nl=Math.min(Nl,RZ[0]),SZ=Math.min(SZ,RZ[1]),uZ=Math.max(uZ,RZ[2]),yZ=Math.max(yZ,RZ[3])}return[Nl,SZ,uZ,yZ]},dZ=new WeakSet,Rc=function(){return l(this,u)?Math.ceil(this.thickness*this.parentScale):0},cl=new WeakSet,mc=function(Nl=!1){if(this.isEmpty())return;if(!l(this,u)){Zl(this,E,lc).call(this);return}const uZ=Zl(this,FZ,Wd).call(this),SZ=Zl(this,dZ,Rc).call(this);Al(this,N,Math.max(Y.AnnotationEditor.MIN_SIZE,uZ[2]-uZ[0])),Al(this,D,Math.max(Y.AnnotationEditor.MIN_SIZE,uZ[3]-uZ[1]));const yZ=Math.ceil(SZ+l(this,N)*this.scaleFactor),wZ=Math.ceil(SZ+l(this,D)*this.scaleFactor),[xZ,HZ]=this.parentDimensions;this.width=yZ/xZ,this.height=wZ/HZ,this.setAspectRatio(yZ,wZ);const hZ=this.translationX,EZ=this.translationY;this.translationX=-uZ[0],this.translationY=-uZ[1],Zl(this,DZ,ic).call(this),Zl(this,E,lc).call(this),Al(this,e,yZ),Al(this,G,wZ),this.setDims(yZ,wZ);const RZ=Nl?SZ/this.scaleFactor/2:0;this.translate(hZ-this.translationX-RZ,EZ-this.translationY-RZ)},g(MZ,sZ),g(MZ,TZ),g(MZ,UZ),AZ(MZ,"_defaultColor",null),AZ(MZ,"_defaultOpacity",1),AZ(MZ,"_defaultThickness",1),AZ(MZ,"_type","ink");let C=MZ;m.InkEditor=C},(H,m,O)=>{var C,D,N,j,k,w,L,n,u,y,o,uc,e,Yc,W,Sc,M,Gd,x,Qd,Q,Hd,I,ad,ql,wc,v,Pd;Object.defineProperty(m,"__esModule",{value:!0}),m.StampEditor=void 0;var s=O(1),Y=O(4),B=O(6),r=O(29);const WZ=class WZ extends Y.AnnotationEditor{constructor(R){super({...R,name:"stampEditor"});g(this,o);g(this,e);g(this,W);g(this,M);g(this,x);g(this,Q);g(this,I);g(this,ql);g(this,v);g(this,C,null);g(this,D,null);g(this,N,null);g(this,j,null);g(this,k,null);g(this,w,null);g(this,L,null);g(this,n,null);g(this,u,!1);g(this,y,!1);Al(this,j,R.bitmapUrl),Al(this,k,R.bitmapFile)}static initialize(R){Y.AnnotationEditor.initialize(R)}static get supportedTypes(){const R=["apng","avif","bmp","gif","jpeg","png","svg+xml","webp","x-icon"];return(0,s.shadow)(this,"supportedTypes",R.map(c=>`image/${c}`))}static get supportedTypesStr(){return(0,s.shadow)(this,"supportedTypesStr",this.supportedTypes.join(","))}static isHandlingMimeForPasting(R){return this.supportedTypes.includes(R)}static paste(R,c){c.pasteEditor(s.AnnotationEditorType.STAMP,{bitmapFile:R.getAsFile()})}remove(){var R,c;l(this,D)&&(Al(this,C,null),this._uiManager.imageManager.deleteId(l(this,D)),(R=l(this,w))==null||R.remove(),Al(this,w,null),(c=l(this,L))==null||c.disconnect(),Al(this,L,null)),super.remove()}rebuild(){if(!this.parent){l(this,D)&&Zl(this,W,Sc).call(this);return}super.rebuild(),this.div!==null&&(l(this,D)&&Zl(this,W,Sc).call(this),this.isAttachedToDOM||this.parent.add(this))}onceAdded(){this._isDraggable=!0,this.div.focus()}isEmpty(){return!(l(this,N)||l(this,C)||l(this,j)||l(this,k))}get isResizable(){return!0}render(){if(this.div)return this.div;let R,c;if(this.width&&(R=this.x,c=this.y),super.render(),this.div.hidden=!0,l(this,C)?Zl(this,M,Gd).call(this):Zl(this,W,Sc).call(this),this.width){const[b,d]=this.parentDimensions;this.setAt(R*b,c*d,this.width*b,this.height*d)}return this.div}static deserialize(R,c,b){if(R instanceof r.StampAnnotationElement)return null;const d=super.deserialize(R,c,b),{rect:a,bitmapUrl:h,bitmapId:V,isSvg:J,accessibilityData:E}=R;V&&b.imageManager.isValidId(V)?Al(d,D,V):Al(d,j,h),Al(d,u,J);const[_l,el]=d.pageDimensions;return d.width=(a[2]-a[0])/_l,d.height=(a[3]-a[1])/el,E&&(d.altTextData=E),d}serialize(R=!1,c=null){if(this.isEmpty())return null;const b={annotationType:s.AnnotationEditorType.STAMP,bitmapId:l(this,D),pageIndex:this.pageIndex,rect:this.getRect(0,0),rotation:this.rotation,isSvg:l(this,u),structTreeParentId:this._structTreeParentId};if(R)return b.bitmapUrl=Zl(this,ql,wc).call(this,!0),b.accessibilityData=this.altTextData,b;const{decorative:d,altText:a}=this.altTextData;if(!d&&a&&(b.accessibilityData={type:"Figure",alt:a}),c===null)return b;c.stamps||(c.stamps=new Map);const h=l(this,u)?(b.rect[2]-b.rect[0])*(b.rect[3]-b.rect[1]):null;if(!c.stamps.has(l(this,D)))c.stamps.set(l(this,D),{area:h,serialized:b}),b.bitmap=Zl(this,ql,wc).call(this,!1);else if(l(this,u)){const V=c.stamps.get(l(this,D));h>V.area&&(V.area=h,V.serialized.bitmap.close(),V.serialized.bitmap=Zl(this,ql,wc).call(this,!1))}return b}};C=new WeakMap,D=new WeakMap,N=new WeakMap,j=new WeakMap,k=new WeakMap,w=new WeakMap,L=new WeakMap,n=new WeakMap,u=new WeakMap,y=new WeakMap,o=new WeakSet,uc=function(R,c=!1){if(!R){this.remove();return}Al(this,C,R.bitmap),c||(Al(this,D,R.id),Al(this,u,R.isSvg)),Zl(this,M,Gd).call(this)},e=new WeakSet,Yc=function(){Al(this,N,null),this._uiManager.enableWaiting(!1),l(this,w)&&this.div.focus()},W=new WeakSet,Sc=function(){if(l(this,D)){this._uiManager.enableWaiting(!0),this._uiManager.imageManager.getFromId(l(this,D)).then(c=>Zl(this,o,uc).call(this,c,!0)).finally(()=>Zl(this,e,Yc).call(this));return}if(l(this,j)){const c=l(this,j);Al(this,j,null),this._uiManager.enableWaiting(!0),Al(this,N,this._uiManager.imageManager.getFromUrl(c).then(b=>Zl(this,o,uc).call(this,b)).finally(()=>Zl(this,e,Yc).call(this)));return}if(l(this,k)){const c=l(this,k);Al(this,k,null),this._uiManager.enableWaiting(!0),Al(this,N,this._uiManager.imageManager.getFromFile(c).then(b=>Zl(this,o,uc).call(this,b)).finally(()=>Zl(this,e,Yc).call(this)));return}const R=document.createElement("input");R.type="file",R.accept=WZ.supportedTypesStr,Al(this,N,new Promise(c=>{R.addEventListener("change",async()=>{if(!R.files||R.files.length===0)this.remove();else{this._uiManager.enableWaiting(!0);const b=await this._uiManager.imageManager.getFromFile(R.files[0]);Zl(this,o,uc).call(this,b)}c()}),R.addEventListener("cancel",()=>{this.remove(),c()})}).finally(()=>Zl(this,e,Yc).call(this))),R.click()},M=new WeakSet,Gd=function(){const{div:R}=this;let{width:c,height:b}=l(this,C);const[d,a]=this.pageDimensions,h=.75;if(this.width)c=this.width*d,b=this.height*a;else if(c>h*d||b>h*a){const _l=Math.min(h*d/c,h*a/b);c*=_l,b*=_l}const[V,J]=this.parentDimensions;this.setDims(c*V/d,b*J/a),this._uiManager.enableWaiting(!1);const E=Al(this,w,document.createElement("canvas"));R.append(E),R.hidden=!1,Zl(this,I,ad).call(this,c,b),Zl(this,v,Pd).call(this),l(this,y)||(this.parent.addUndoableEditor(this),Al(this,y,!0)),this._uiManager._eventBus.dispatch("reporttelemetry",{source:this,details:{type:"editing",subtype:this.editorType,data:{action:"inserted_image"}}}),this.addAltTextButton()},x=new WeakSet,Qd=function(R,c){var h;const[b,d]=this.parentDimensions;this.width=R/b,this.height=c/d,this.setDims(R,c),(h=this._initialOptions)!=null&&h.isCentered?this.center():this.fixAndSetPosition(),this._initialOptions=null,l(this,n)!==null&&clearTimeout(l(this,n)),Al(this,n,setTimeout(()=>{Al(this,n,null),Zl(this,I,ad).call(this,R,c)},200))},Q=new WeakSet,Hd=function(R,c){const{width:b,height:d}=l(this,C);let a=b,h=d,V=l(this,C);for(;a>2*R||h>2*c;){const J=a,E=h;a>2*R&&(a=a>=16384?Math.floor(a/2)-1:Math.ceil(a/2)),h>2*c&&(h=h>=16384?Math.floor(h/2)-1:Math.ceil(h/2));const _l=new OffscreenCanvas(a,h);_l.getContext("2d").drawImage(V,0,0,J,E,0,0,a,h),V=_l.transferToImageBitmap()}return V},I=new WeakSet,ad=function(R,c){R=Math.ceil(R),c=Math.ceil(c);const b=l(this,w);if(!b||b.width===R&&b.height===c)return;b.width=R,b.height=c;const d=l(this,u)?l(this,C):Zl(this,Q,Hd).call(this,R,c),a=b.getContext("2d");a.filter=this._uiManager.hcmFilter,a.drawImage(d,0,0,d.width,d.height,0,0,R,c)},ql=new WeakSet,wc=function(R){if(R){if(l(this,u)){const d=this._uiManager.imageManager.getSvgUrl(l(this,D));if(d)return d}const c=document.createElement("canvas");return{width:c.width,height:c.height}=l(this,C),c.getContext("2d").drawImage(l(this,C),0,0),c.toDataURL()}if(l(this,u)){const[c,b]=this.pageDimensions,d=Math.round(this.width*c*B.PixelsPerInch.PDF_TO_CSS_UNITS),a=Math.round(this.height*b*B.PixelsPerInch.PDF_TO_CSS_UNITS),h=new OffscreenCanvas(d,a);return h.getContext("2d").drawImage(l(this,C),0,0,l(this,C).width,l(this,C).height,0,0,d,a),h.transferToImageBitmap()}return structuredClone(l(this,C))},v=new WeakSet,Pd=function(){Al(this,L,new ResizeObserver(R=>{const c=R[0].contentRect;c.width&&c.height&&Zl(this,x,Qd).call(this,c.width,c.height)})),l(this,L).observe(this.div)},AZ(WZ,"_type","stamp");let ZZ=WZ;m.StampEditor=ZZ}],__webpack_module_cache__={};function __w_pdfjs_require__(H){var m=__webpack_module_cache__[H];if(m!==void 0)return m.exports;var O=__webpack_module_cache__[H]={exports:{}};return __webpack_modules__[H](O,O.exports,__w_pdfjs_require__),O.exports}var __webpack_exports__={};return(()=>{var H=__webpack_exports__;Object.defineProperty(H,"__esModule",{value:!0}),Object.defineProperty(H,"AbortException",{enumerable:!0,get:function(){return m.AbortException}}),Object.defineProperty(H,"AnnotationEditorLayer",{enumerable:!0,get:function(){return B.AnnotationEditorLayer}}),Object.defineProperty(H,"AnnotationEditorParamsType",{enumerable:!0,get:function(){return m.AnnotationEditorParamsType}}),Object.defineProperty(H,"AnnotationEditorType",{enumerable:!0,get:function(){return m.AnnotationEditorType}}),Object.defineProperty(H,"AnnotationEditorUIManager",{enumerable:!0,get:function(){return r.AnnotationEditorUIManager}}),Object.defineProperty(H,"AnnotationLayer",{enumerable:!0,get:function(){return ZZ.AnnotationLayer}}),Object.defineProperty(H,"AnnotationMode",{enumerable:!0,get:function(){return m.AnnotationMode}}),Object.defineProperty(H,"CMapCompressionType",{enumerable:!0,get:function(){return m.CMapCompressionType}}),Object.defineProperty(H,"DOMSVGFactory",{enumerable:!0,get:function(){return s.DOMSVGFactory}}),Object.defineProperty(H,"FeatureTest",{enumerable:!0,get:function(){return m.FeatureTest}}),Object.defineProperty(H,"GlobalWorkerOptions",{enumerable:!0,get:function(){return C.GlobalWorkerOptions}}),Object.defineProperty(H,"ImageKind",{enumerable:!0,get:function(){return m.ImageKind}}),Object.defineProperty(H,"InvalidPDFException",{enumerable:!0,get:function(){return m.InvalidPDFException}}),Object.defineProperty(H,"MissingPDFException",{enumerable:!0,get:function(){return m.MissingPDFException}}),Object.defineProperty(H,"OPS",{enumerable:!0,get:function(){return m.OPS}}),Object.defineProperty(H,"PDFDataRangeTransport",{enumerable:!0,get:function(){return O.PDFDataRangeTransport}}),Object.defineProperty(H,"PDFDateString",{enumerable:!0,get:function(){return s.PDFDateString}}),Object.defineProperty(H,"PDFWorker",{enumerable:!0,get:function(){return O.PDFWorker}}),Object.defineProperty(H,"PasswordResponses",{enumerable:!0,get:function(){return m.PasswordResponses}}),Object.defineProperty(H,"PermissionFlag",{enumerable:!0,get:function(){return m.PermissionFlag}}),Object.defineProperty(H,"PixelsPerInch",{enumerable:!0,get:function(){return s.PixelsPerInch}}),Object.defineProperty(H,"PromiseCapability",{enumerable:!0,get:function(){return m.PromiseCapability}}),Object.defineProperty(H,"RenderingCancelledException",{enumerable:!0,get:function(){return s.RenderingCancelledException}}),Object.defineProperty(H,"SVGGraphics",{enumerable:!0,get:function(){return O.SVGGraphics}}),Object.defineProperty(H,"UnexpectedResponseException",{enumerable:!0,get:function(){return m.UnexpectedResponseException}}),Object.defineProperty(H,"Util",{enumerable:!0,get:function(){return m.Util}}),Object.defineProperty(H,"VerbosityLevel",{enumerable:!0,get:function(){return m.VerbosityLevel}}),Object.defineProperty(H,"XfaLayer",{enumerable:!0,get:function(){return D.XfaLayer}}),Object.defineProperty(H,"build",{enumerable:!0,get:function(){return O.build}}),Object.defineProperty(H,"createValidAbsoluteUrl",{enumerable:!0,get:function(){return m.createValidAbsoluteUrl}}),Object.defineProperty(H,"getDocument",{enumerable:!0,get:function(){return O.getDocument}}),Object.defineProperty(H,"getFilenameFromUrl",{enumerable:!0,get:function(){return s.getFilenameFromUrl}}),Object.defineProperty(H,"getPdfFilenameFromUrl",{enumerable:!0,get:function(){return s.getPdfFilenameFromUrl}}),Object.defineProperty(H,"getXfaPageViewport",{enumerable:!0,get:function(){return s.getXfaPageViewport}}),Object.defineProperty(H,"isDataScheme",{enumerable:!0,get:function(){return s.isDataScheme}}),Object.defineProperty(H,"isPdfFile",{enumerable:!0,get:function(){return s.isPdfFile}}),Object.defineProperty(H,"loadScript",{enumerable:!0,get:function(){return s.loadScript}}),Object.defineProperty(H,"noContextMenu",{enumerable:!0,get:function(){return s.noContextMenu}}),Object.defineProperty(H,"normalizeUnicode",{enumerable:!0,get:function(){return m.normalizeUnicode}}),Object.defineProperty(H,"renderTextLayer",{enumerable:!0,get:function(){return Y.renderTextLayer}}),Object.defineProperty(H,"setLayerDimensions",{enumerable:!0,get:function(){return s.setLayerDimensions}}),Object.defineProperty(H,"shadow",{enumerable:!0,get:function(){return m.shadow}}),Object.defineProperty(H,"updateTextLayer",{enumerable:!0,get:function(){return Y.updateTextLayer}}),Object.defineProperty(H,"version",{enumerable:!0,get:function(){return O.version}});var m=__w_pdfjs_require__(1),O=__w_pdfjs_require__(2),s=__w_pdfjs_require__(6),Y=__w_pdfjs_require__(26),B=__w_pdfjs_require__(27),r=__w_pdfjs_require__(5),ZZ=__w_pdfjs_require__(29),C=__w_pdfjs_require__(14),D=__w_pdfjs_require__(32)})(),__webpack_exports__})())})(pdf);var pdfExports=pdf.exports,Gl=Object.defineProperty,ml=(H,m,O)=>m in H?Gl(H,m,{enumerable:!0,configurable:!0,writable:!0,value:O}):H[m]=O,A=(H,m,O)=>(ml(H,typeof m!="symbol"?m+"":m,O),O);const q="internal-link",Tl="link",Ll="file-attachment",yl="form-text",ul="form-select",hl="form-checkbox",zl="form-radio",sl="form-button",_=["click","dblclick","mouseover","input","change"];function K(H,m,O){const s=[];if(O)for(const Y of O)Y[H]===m&&s.push(Y);return s}function S(H,m){return{type:H,data:m}}function t(H,m){switch(H.type){case"textarea":case"text":return S(yl,{fieldName:H.name,value:H.value});case"select-one":case"select-multiple":const O=[];for(const Y of H.options)O.push({value:Y.value,label:Y.label});const s=[];for(const Y of H.selectedOptions)s.push({value:Y.value,label:Y.label});return S(ul,{fieldName:H.name,value:s,options:O});case"checkbox":return S(hl,{fieldName:H.name,checked:H.checked});case"radio":return S(zl,{fieldName:H.name,...m});case"button":return S(sl,{fieldName:H.name,...m})}}function Il(H){return S(Ll,H.file)}async function Rl(H,m){if(H.dest){if(typeof H.dest=="string")return S(q,{referencedPage:Number(H.dest.substring(1,H.dest.length)),offset:null});{const O=await m.getPageIndex(H.dest[0]);return S(q,{referencedPage:O+1,offset:{left:H.dest[2],bottom:H.dest[3]}})}}else if(H.url)return S(Tl,{url:H.url,unsafeUrl:H.unsafeUrl})}function $(H){for(const m of H.getElementsByTagName("span")){let O=m.textContent;const s=JSON.parse(m.dataset.l10nArgs??"{}");if(O)for(const Y in s)O=O.replace(`{{${Y}}}`,s[Y]);m.textContent=O}}function il(H,m,O){var s;let Y=H.target.parentNode;if(Y.tagName==="DIV"&&(Y=Y.firstChild),Y.className==="linkAnnotation"&&H.type==="click"){const B=(s=Y.dataset)==null?void 0:s.annotationId;if(B)return Rl(K("id",B,O)[0],m)}else if(Y.className.includes("popupAnnotation")||Y.className.includes("textAnnotation"))$(Y);else if(Y.className.includes("fileAttachmentAnnotation")){$(Y);const B=Y.dataset.annotationId;if(B&&H.type==="dblclick")return Il(K("id",B,O)[0])}else if(Y.className.includes("textWidgetAnnotation")&&H.type==="input"){let B=Y.getElementsByTagName("input")[0];return B||(B=Y.getElementsByTagName("textarea")[0]),t(B)}else{if(Y.className.includes("choiceWidgetAnnotation")&&H.type==="input")return t(Y.getElementsByTagName("select")[0]);if(Y.className.includes("buttonWidgetAnnotation checkBox")&&H.type==="change")return t(Y.getElementsByTagName("input")[0]);if(Y.className.includes("buttonWidgetAnnotation radioButton")&&H.type==="change"){const B=Y.dataset.annotationId;if(B){const r=K("id",B,O)[0],ZZ=[];for(const C of K("fieldName",r.fieldName,O))C.buttonValue&&ZZ.push(C.buttonValue);return t(Y.getElementsByTagName("input")[0],{value:r.buttonValue,defaultValue:r.fieldValue,options:ZZ})}}else if(Y.className.includes("buttonWidgetAnnotation pushButton")&&H.type==="click"){const B=Y.dataset.annotationId;if(B){const r=K("id",B,O)[0];return r.resetForm?t({name:r.fieldName,type:"button"},{actions:r.actions,reset:!0}):t({name:r.fieldName,type:"button"},{actions:r.actions,reset:!1})}}}}class bl{constructor(){A(this,"externalLinkEnabled"),this.externalLinkEnabled=!0}get pagesCount(){return 0}get page(){return 0}set page(m){}get rotation(){return 0}set rotation(m){}get isInPresentationMode(){return!1}async goToDestination(m){}goToPage(m){}addLinkAttributes(m,O,s=!1){}getDestinationHash(m){return"#"}getAnchorUrl(m){return"#"}setHash(m){}executeNamedAction(m){}executeSetOCGState(m){}cachePageRef(m,O){}}const pl=defineComponent({__name:"AnnotationLayer",props:{page:{},viewport:{},document:{},annotationsFilter:{},annotationsMap:{},imageResourcesPath:{},hideForms:{type:Boolean},enableScripting:{type:Boolean},intent:{}},emits:["annotation","annotationLoaded"],setup(H,{emit:m}){const O=H,s=ref(),Y=ref();function B(N){const j=il(N,O.document,Y.value);Promise.resolve(j).then(k=>{k&&m("annotation",k)})}async function r(){var N;return await((N=toRaw(O.document))==null?void 0:N.getFieldObjects())}async function ZZ(){var N;return await((N=toRaw(O.document))==null?void 0:N.hasJSActions())}async function C(){const N=O.page;let j=await(N==null?void 0:N.getAnnotations({intent:O.intent}));if(O.annotationsFilter){const k=O.annotationsFilter;j=j.filter(w=>{const L=w.subtype,n=w.fieldType?`${L}.${w.fieldType}`:null;return(k==null?void 0:k.includes(L))||n!==null&&(k==null?void 0:k.includes(n))})}return j}async function D(){var N,j;(j=(N=s.value).replaceChildren)==null||j.call(N);for(const p of _)s.value.removeEventListener(p,B);const k=toRaw(O.document),w=O.page,L=O.viewport;Y.value=await C();const n=new Map([]);for(const p of Y.value)if(p.subtype==="Widget"&&p.fieldType==="Btn"&&p.pushButton){const e=p.rect[2]-p.rect[0],G=p.rect[3]-p.rect[1],W=document.createElement("canvas");W.setAttribute("width",(e*L.scale).toString()),W.setAttribute("height",(G*L.scale).toString()),n.set(p.id,W)}const u=k.annotationStorage;if(O.annotationsMap)for(const[p,e]of Object.entries(O.annotationsMap))u.setValue(p,e);const y={accessibilityManager:void 0,annotationCanvasMap:n,div:s.value,l10n:null,page:w,viewport:L.clone({dontFlip:!0})},o={annotations:Y.value,viewport:L.clone({dontFlip:!0}),linkService:new bl,annotationCanvasMap:n,div:s.value,annotationStorage:u,renderForms:!O.hideForms,page:w,enableScripting:!1,hasJSActions:await ZZ(),fieldObjects:await r(),downloadManager:null,imageResourcesPath:O.imageResourcesPath};new pdfExports.AnnotationLayer(y).render(o).then(async()=>{m("annotationLoaded",await C())});for(const p of _)s.value.addEventListener(p,B)}return watch(()=>O.viewport,()=>{O.page&&O.viewport&&s.value&&D()}),onMounted(()=>{O.page&&O.viewport&&s.value&&D()}),(N,j)=>(openBlock(),createElementBlock("div",{ref_key:"layer",ref:s,class:"annotationLayer",style:{display:"block"}},null,512))}});function dl(H){return H.items.map(m=>m.str)}function al(H,m,O){const s=H.join(" "),Y=["g"];O.ignoreCase&&Y.push("i");let B=m.trim();O.completeWords&&(B=`\\b${B}\\b`);const r=new RegExp(B,Y.join("")),ZZ=[];let C;for(;(C=r.exec(s))!==null;)ZZ.push([C.index,C[0].length,C[0]]);return ZZ}function wl(H,m){let O=0,s=0;const Y=m.length-1,B=[];for(let r=0;r<H.length;r++){let ZZ=H[r][0];for(;O!==Y&&ZZ>=s+m[O].length;)s+=m[O].length+1,O++;const C={idx:O,offset:ZZ-s};for(ZZ+=H[r][1];O!==Y&&ZZ>s+m[O].length;)s+=m[O].length+1,O++;const D={idx:O,offset:ZZ-s};B.push({start:C,end:D,str:H[r][2],oindex:H[r][0]})}return B}function Sl(H,m,O){function s(Y,B=-1,r=-1){const ZZ=m.items[Y],C=[];let D="",N="",j="",k=O[Y];if(!k)return;if(k.nodeType===Node.TEXT_NODE){const n=document.createElement("span");k.before(n),n.append(k),O[Y]=n,k=n}B>=0&&r>=0?D=ZZ.str.substring(B,r):B<0&&r<0?D=ZZ.str:B>=0?D=ZZ.str.substring(B):r>=0&&(D=ZZ.str.substring(0,r));const w=document.createTextNode(D),L=document.createElement("span");if(L.className="highlight appended",L.append(w),C.push(L),B>0)if(k.childNodes.length===1&&k.childNodes[0].nodeType===Node.TEXT_NODE){N=ZZ.str.substring(0,B);const n=document.createTextNode(N);C.unshift(n)}else{let n=0;const u=[];for(const y of k.childNodes){const o=y.nodeType===Node.TEXT_NODE?y.nodeValue:y.firstChild.nodeValue;n+=o.length,n<=B?u.push(y):B>=n-o.length&&r<=n&&u.push(document.createTextNode(o.substring(0,B-(n-o.length))))}C.unshift(...u)}if(r>0){j=ZZ.str.substring(r);const n=document.createTextNode(j);C.push(n)}k.replaceChildren(...C)}for(const Y of H)if(Y.start.idx===Y.end.idx)s(Y.start.idx,Y.start.offset,Y.end.offset);else for(let B=Y.start.idx,r=Y.end.idx;B<=r;B++)B===Y.start.idx?s(B,Y.start.offset):B===Y.end.idx?s(B,-1,Y.end.offset):s(B)}function xl(H,m){const O=dl(H);for(let s=0;s<m.length;s++){const Y=m[s];if(Y&&Y.nodeType!==Node.TEXT_NODE){const B=document.createTextNode(O[s]);Y.replaceChildren(B)}}}function jl(H,m,O){const s=dl(m),Y=al(s,H,O);return wl(Y,s)}const Dl=defineComponent({__name:"TextLayer",props:{page:{},viewport:{},highlightText:{},highlightOptions:{}},emits:["highlight","textLoaded"],setup(H,{emit:m}){const O=H,s=ref(),Y=ref(),B=[];function r(){return Object.assign({},{ignoreCase:!0,completeWords:!1},O.highlightOptions)}async function ZZ(j=!1){const k=O.page,w=await(k==null?void 0:k.getTextContent());if(w&&(j&&xl(w,B),O.highlightText)){const L=jl(O.highlightText,w,r());Sl(L,w,B),m("highlight",{matches:L,textContent:w,textDivs:B,page:(k==null?void 0:k.pageNumber)||1})}}function C(){var j,k;(k=(j=s.value).replaceChildren)==null||k.call(j),B.splice(0,B.length);const w=O.page,L=O.viewport,n={textContentSource:w==null?void 0:w.streamTextContent({includeMarkedContent:!0,disableNormalization:!0}),viewport:L,container:s.value,isOffscreenCanvasSupported:!0,textDivs:B,textDivProperties:new WeakMap};pdfExports.renderTextLayer(n).promise.then(async()=>{var u;const y=await(w==null?void 0:w.getTextContent());m("textLoaded",{textDivs:B,textContent:y});const o=document.createElement("div");o.className="endOfContent",(u=s.value)==null||u.appendChild(o),Y.value=o,ZZ()})}function D(){Y.value&&Y.value.classList.add("active")}function N(){Y.value&&Y.value.classList.remove("active")}return watch(()=>O.viewport,j=>{O.page&&O.viewport&&s.value&&C()}),watch(()=>[O.highlightText,O.highlightOptions],j=>{ZZ(!0)},{deep:!0}),onMounted(()=>{O.page&&O.viewport&&s.value&&C()}),(j,k)=>(openBlock(),createElementBlock("div",{ref_key:"layer",ref:s,class:"textLayer",style:{display:"block"},onMousedown:D,onMouseup:N},null,544))}}),Jl=defineComponent({__name:"XFALayer",props:{page:{},document:{},viewport:{}},emits:["xfaLoaded"],setup(H,{emit:m}){const O=H,s=ref();async function Y(){var B,r;(r=(B=s.value).replaceChildren)==null||r.call(B);const ZZ=toRaw(O.document),C=O.page,D=O.viewport;if(ZZ.isPureXfa){const N=await C.getXfa(),j={div:s.value,viewport:D.clone({dontFlip:!0}),linkService:new bl,annotationStorage:ZZ==null?void 0:ZZ.annotationStorage,xfaHtml:N};pdfExports.XfaLayer.render(j),m("xfaLoaded")}}return watch(()=>O.viewport,B=>{O.page&&O.viewport&&s.value&&Y()}),onMounted(()=>{O.page&&O.viewport&&s.value&&Y()}),(B,r)=>(openBlock(),createElementBlock("div",{ref_key:"layer",ref:s,style:{display:"block"}},null,512))}}),Ul=createBaseVNode("canvas",{dir:"ltr",style:{display:"block"},role:"main"},null,-1),ll=defineComponent({__name:"VuePDF",props:{pdf:{},page:{default:1},scale:{default:1},rotation:{},fitParent:{type:Boolean},width:{},height:{},textLayer:{type:Boolean},imageResourcesPath:{},hideForms:{type:Boolean},intent:{default:"display"},annotationLayer:{type:Boolean},annotationsFilter:{},annotationsMap:{},watermarkText:{},watermarkOptions:{},highlightText:{},highlightOptions:{}},emits:["annotation","highlight","loaded","textLoaded","annotationLoaded","xfaLoaded"],setup(H,{expose:m,emit:O}){const s=H,Y=ref(),B=ref(),r=ref(!1);let ZZ;const C=computed(()=>({viewport:void 0,document:void 0,page:void 0})),D=computed(()=>({annotationsMap:s.annotationsMap,annotationsFilter:s.annotationsFilter,imageResourcesPath:s.imageResourcesPath,hideForms:s.hideForms,intent:s.intent})),N=computed(()=>({highlightText:s.highlightText,highlightOptions:s.highlightOptions}));function j(){return Object.assign({},{columns:4,rows:4,rotation:45,fontSize:18,color:"rgba(211, 210, 211, 0.4)"},s.watermarkOptions)}function k(W){if(!(typeof W=="number"&&W%90===0))return 0;const z=W/90;return z>4?k(W-360):z<0?k(W+360):W}function w(W){let z=s.scale;if(s.fitParent){const M=Y.value.parentNode.clientWidth,i=W.getViewport({scale:1}).width;z=M/i}else if(s.width){const M=W.getViewport({scale:1}).width;z=s.width/M}else if(s.height){const M=W.getViewport({scale:1}).height;z=s.height/M}return z}function L(W=1){if(!s.watermarkText)return;const z=n();if(!z)return;const M=z.getContext("2d");if(!M)return;const i=j(),x=s.watermarkText,T=i.columns,Q=i.rows,f=T*Q,I=i.rotation,Wl=i.fontSize*W;M.font=`${Wl}px Trebuchet MS`,M.fillStyle=i.color;for(let ql=0;ql<f;ql++){const cZ=ql%T*(z.width/T)+z.width/(T*2),v=Math.floor(ql/T)*(z.height/Q)+z.height/(Q*2),tZ=M.measureText(x).width;M.save(),M.translate(cZ,v),M.rotate(-I*(Math.PI/180)),M.fillText(x,-tZ/2,Wl/2),M.restore()}}function n(){var W;let z=null;return(W=Y.value)==null||W.childNodes.forEach(M=>{M.tagName==="CANVAS"&&(z=M)}),z}function u(W){var z;let M;const i=n();i&&(i==null?void 0:i.getAttribute("role"))==="main"?M=i:(M=document.createElement("canvas"),M.style.display="block",M.setAttribute("dir","ltr"));const x=window.devicePixelRatio||1;return M.width=Math.floor(W.width*x),M.height=Math.floor(W.height*x),M.style.width=`${Math.floor(W.width)}px`,M.style.height=`${Math.floor(W.height)}px`,(z=Y.value)==null||z.style.setProperty("--scale-factor",`${W.scale}`),B.value.style.width=`${Math.floor(W.width)}px`,B.value.style.height=`${Math.floor(W.height)}px`,B.value.style.top="0",B.value.style.left="0",r.value=!0,M}function y(){ZZ&&ZZ.cancel()}function o(W){var z;(z=toRaw(C.value.document))==null||z.getPage(W).then(M=>{var i;y();const x=M.getViewport(),T={scale:w(M),rotation:k((s.rotation||0)+x.rotation)},Q=M.getViewport(T),f=n(),I=u(Q),Wl=window.devicePixelRatio||1,ql=Wl!==1?[Wl,0,0,Wl,0,0]:void 0,cZ={canvasContext:I.getContext("2d"),viewport:Q,annotationMode:s.hideForms?pdfExports.AnnotationMode.ENABLE:pdfExports.AnnotationMode.ENABLE_FORMS,transform:ql,intent:s.intent};(I==null?void 0:I.getAttribute("role"))!=="main"?f&&((i=Y.value)==null||i.replaceChild(I,f)):I.removeAttribute("role"),C.value.page=M,C.value.viewport=Q,ZZ=M.render(cZ),ZZ.promise.then(()=>{r.value=!1,L(Q.scale),O("loaded",C.value.viewport)}).catch(()=>{})})}function p(W){W.promise.then(async z=>{C.value.document=z,o(s.page)})}watch(()=>s.pdf,W=>{W!==void 0&&p(W)}),watch(()=>[s.scale,s.width,s.height,s.rotation,s.page,s.hideForms,s.intent],()=>{o(s.page)}),onMounted(()=>{s.pdf!==void 0&&p(s.pdf)});function e(){o(s.page)}function G(){y()}return m({reload:e,cancel:G}),(W,z)=>(openBlock(),createElementBlock("div",{ref_key:"container",ref:Y,style:{position:"relative",display:"block"}},[Ul,W.annotationLayer?(openBlock(),createBlock(pl,mergeProps({key:0},{...C.value,...D.value},{onAnnotation:z[0]||(z[0]=M=>O("annotation",M)),onAnnotationLoaded:z[1]||(z[1]=M=>O("annotationLoaded",M))}),null,16)):createCommentVNode("",!0),W.textLayer?(openBlock(),createBlock(Dl,mergeProps({key:1},{...C.value,...N.value},{onHighlight:z[2]||(z[2]=M=>O("highlight",M)),onTextLoaded:z[3]||(z[3]=M=>O("textLoaded",M))}),null,16)):createCommentVNode("",!0),createVNode(Jl,mergeProps({...C.value},{onXfaLoaded:z[4]||(z[4]=M=>O("xfaLoaded"))}),null,16),withDirectives(createBaseVNode("div",{ref_key:"loadingLayer",ref:B,style:{position:"absolute"}},[renderSlot(W.$slots,"default")],512),[[vShow,r.value]])],512))}}),kl="data:application/javascript;base64,LyoqCiAqIEBsaWNzdGFydCBUaGUgZm9sbG93aW5nIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZQogKiBKYXZhU2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlCiAqCiAqIENvcHlyaWdodCAyMDIzIE1vemlsbGEgRm91bmRhdGlvbgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGUKICogSmF2YVNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZQogKi8KIWZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lLnBkZmpzV29ya2VyPXQoKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSgicGRmanMtZGlzdC9idWlsZC9wZGYud29ya2VyIixbXSwoKCk9PmUucGRmanNXb3JrZXI9dCgpKSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdPWUucGRmanNXb3JrZXI9dCgpOmVbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdPWUucGRmanNXb3JrZXI9dCgpfShnbG9iYWxUaGlzLCgoKT0+KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlPVssKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LldvcmtlclRhc2s9dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMyksaT1hKDQpLHM9YSg2KSxvPWEoMTApLGM9YSg2OCksbD1hKDczKSxoPWEoMTA0KSx1PWEoMTA1KSxkPWEoNzIpO2NsYXNzIFdvcmtlclRhc2t7Y29uc3RydWN0b3IoZSl7dGhpcy5uYW1lPWU7dGhpcy50ZXJtaW5hdGVkPSExO3RoaXMuX2NhcGFiaWxpdHk9bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHl9Z2V0IGZpbmlzaGVkKCl7cmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZX1maW5pc2goKXt0aGlzLl9jYXBhYmlsaXR5LnJlc29sdmUoKX10ZXJtaW5hdGUoKXt0aGlzLnRlcm1pbmF0ZWQ9ITB9ZW5zdXJlTm90VGVybWluYXRlZCgpe2lmKHRoaXMudGVybWluYXRlZCl0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB0YXNrIHdhcyB0ZXJtaW5hdGVkIil9fXQuV29ya2VyVGFzaz1Xb3JrZXJUYXNrO2NsYXNzIFdvcmtlck1lc3NhZ2VIYW5kbGVye3N0YXRpYyBzZXR1cChlLHQpe2xldCBhPSExO2Uub24oInRlc3QiLChmdW5jdGlvbih0KXtpZighYSl7YT0hMDtlLnNlbmQoInRlc3QiLHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KX19KSk7ZS5vbigiY29uZmlndXJlIiwoZnVuY3Rpb24oZSl7KDAsci5zZXRWZXJib3NpdHlMZXZlbCkoZS52ZXJib3NpdHkpfSkpO2Uub24oIkdldERvY1JlcXVlc3QiLChmdW5jdGlvbihlKXtyZXR1cm4gV29ya2VyTWVzc2FnZUhhbmRsZXIuY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGUsdCl9KSl9c3RhdGljIGNyZWF0ZURvY3VtZW50SGFuZGxlcihlLHQpe2xldCBhLGY9ITEsZz1udWxsO2NvbnN0IHA9bmV3IFNldCxtPSgwLHIuZ2V0VmVyYm9zaXR5TGV2ZWwpKCkse2RvY0lkOmIsYXBpVmVyc2lvbjp5fT1lLHc9IjMuMTEuMTc0IjtpZih5IT09dyl0aHJvdyBuZXcgRXJyb3IoYFRoZSBBUEkgdmVyc2lvbiAiJHt5fSIgZG9lcyBub3QgbWF0Y2ggdGhlIFdvcmtlciB2ZXJzaW9uICIke3d9Ii5gKTtjb25zdCBTPVtdO2Zvcihjb25zdCBlIGluW10pUy5wdXNoKGUpO2lmKFMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVGhlIGBBcnJheS5wcm90b3R5cGVgIGNvbnRhaW5zIHVuZXhwZWN0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzOiAiK1Muam9pbigiLCAiKSsiOyB0aHVzIGJyZWFraW5nIGUuZy4gYGZvci4uLmluYCBpdGVyYXRpb24gb2YgYEFycmF5YHMuIik7Y29uc3QgeD1iKyJfd29ya2VyIjtsZXQgQz1uZXcgaC5NZXNzYWdlSGFuZGxlcih4LGIsdCk7ZnVuY3Rpb24gZW5zdXJlTm90VGVybWluYXRlZCgpe2lmKGYpdGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQiKX1mdW5jdGlvbiBzdGFydFdvcmtlclRhc2soZSl7cC5hZGQoZSl9ZnVuY3Rpb24gZmluaXNoV29ya2VyVGFzayhlKXtlLmZpbmlzaCgpO3AuZGVsZXRlKGUpfWFzeW5jIGZ1bmN0aW9uIGxvYWREb2N1bWVudChlKXthd2FpdCBhLmVuc3VyZURvYygiY2hlY2tIZWFkZXIiKTthd2FpdCBhLmVuc3VyZURvYygicGFyc2VTdGFydFhSZWYiKTthd2FpdCBhLmVuc3VyZURvYygicGFyc2UiLFtlXSk7YXdhaXQgYS5lbnN1cmVEb2MoImNoZWNrRmlyc3RQYWdlIixbZV0pO2F3YWl0IGEuZW5zdXJlRG9jKCJjaGVja0xhc3RQYWdlIixbZV0pO2NvbnN0IHQ9YXdhaXQgYS5lbnN1cmVEb2MoImlzUHVyZVhmYSIpO2lmKHQpe2NvbnN0IGU9bmV3IFdvcmtlclRhc2soImxvYWRYZmFGb250cyIpO3N0YXJ0V29ya2VyVGFzayhlKTthd2FpdCBQcm9taXNlLmFsbChbYS5sb2FkWGZhRm9udHMoQyxlKS5jYXRjaCgoZT0+e30pKS50aGVuKCgoKT0+ZmluaXNoV29ya2VyVGFzayhlKSkpLGEubG9hZFhmYUltYWdlcygpXSl9Y29uc3RbcixuXT1hd2FpdCBQcm9taXNlLmFsbChbYS5lbnN1cmVEb2MoIm51bVBhZ2VzIiksYS5lbnN1cmVEb2MoImZpbmdlcnByaW50cyIpXSk7cmV0dXJue251bVBhZ2VzOnIsZmluZ2VycHJpbnRzOm4saHRtbEZvclhmYTp0P2F3YWl0IGEuZW5zdXJlRG9jKCJodG1sRm9yWGZhIik6bnVsbH19ZnVuY3Rpb24gZ2V0UGRmTWFuYWdlcih7ZGF0YTplLHBhc3N3b3JkOnQsZGlzYWJsZUF1dG9GZXRjaDphLHJhbmdlQ2h1bmtTaXplOmksbGVuZ3RoOm8sZG9jQmFzZVVybDpjLGVuYWJsZVhmYTpsLGV2YWx1YXRvck9wdGlvbnM6aH0pe2NvbnN0IGQ9e3NvdXJjZTpudWxsLGRpc2FibGVBdXRvRmV0Y2g6YSxkb2NCYXNlVXJsOmMsZG9jSWQ6YixlbmFibGVYZmE6bCxldmFsdWF0b3JPcHRpb25zOmgsaGFuZGxlcjpDLGxlbmd0aDpvLHBhc3N3b3JkOnQscmFuZ2VDaHVua1NpemU6aX0sZj1uZXcgci5Qcm9taXNlQ2FwYWJpbGl0eTtsZXQgcDtpZihlKXt0cnl7ZC5zb3VyY2U9ZTtwPW5ldyBzLkxvY2FsUGRmTWFuYWdlcihkKTtmLnJlc29sdmUocCl9Y2F0Y2goZSl7Zi5yZWplY3QoZSl9cmV0dXJuIGYucHJvbWlzZX1sZXQgbSx5PVtdO3RyeXttPW5ldyB1LlBERldvcmtlclN0cmVhbShDKX1jYXRjaChlKXtmLnJlamVjdChlKTtyZXR1cm4gZi5wcm9taXNlfWNvbnN0IHc9bS5nZXRGdWxsUmVhZGVyKCk7dy5oZWFkZXJzUmVhZHkudGhlbigoZnVuY3Rpb24oKXtpZih3LmlzUmFuZ2VTdXBwb3J0ZWQpe2Quc291cmNlPW07ZC5sZW5ndGg9dy5jb250ZW50TGVuZ3RoO2QuZGlzYWJsZUF1dG9GZXRjaHx8PXcuaXNTdHJlYW1pbmdTdXBwb3J0ZWQ7cD1uZXcgcy5OZXR3b3JrUGRmTWFuYWdlcihkKTtmb3IoY29uc3QgZSBvZiB5KXAuc2VuZFByb2dyZXNzaXZlRGF0YShlKTt5PVtdO2YucmVzb2x2ZShwKTtnPW51bGx9fSkpLmNhdGNoKChmdW5jdGlvbihlKXtmLnJlamVjdChlKTtnPW51bGx9KSk7bGV0IFM9MDtuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSx0KXtjb25zdCByZWFkQ2h1bms9ZnVuY3Rpb24oe3ZhbHVlOmUsZG9uZTphfSl7dHJ5e2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtpZihhKXtwfHxmdW5jdGlvbigpe2NvbnN0IGU9KDAsbi5hcnJheUJ1ZmZlcnNUb0J5dGVzKSh5KTtvJiZlLmxlbmd0aCE9PW8mJigwLHIud2FybikoInJlcG9ydGVkIEhUVFAgbGVuZ3RoIGlzIGRpZmZlcmVudCBmcm9tIGFjdHVhbCIpO3RyeXtkLnNvdXJjZT1lO3A9bmV3IHMuTG9jYWxQZGZNYW5hZ2VyKGQpO2YucmVzb2x2ZShwKX1jYXRjaChlKXtmLnJlamVjdChlKX15PVtdfSgpO2c9bnVsbDtyZXR1cm59Uys9ZS5ieXRlTGVuZ3RoO3cuaXNTdHJlYW1pbmdTdXBwb3J0ZWR8fEMuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6Uyx0b3RhbDpNYXRoLm1heChTLHcuY29udGVudExlbmd0aHx8MCl9KTtwP3Auc2VuZFByb2dyZXNzaXZlRGF0YShlKTp5LnB1c2goZSk7dy5yZWFkKCkudGhlbihyZWFkQ2h1bmssdCl9Y2F0Y2goZSl7dChlKX19O3cucmVhZCgpLnRoZW4ocmVhZENodW5rLHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtmLnJlamVjdChlKTtnPW51bGx9KSk7Zz1mdW5jdGlvbihlKXttLmNhbmNlbEFsbFJlcXVlc3RzKGUpfTtyZXR1cm4gZi5wcm9taXNlfUMub24oIkdldFBhZ2UiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5nZXRQYWdlKGUucGFnZUluZGV4KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW2EuZW5zdXJlKGUsInJvdGF0ZSIpLGEuZW5zdXJlKGUsInJlZiIpLGEuZW5zdXJlKGUsInVzZXJVbml0IiksYS5lbnN1cmUoZSwidmlldyIpXSkudGhlbigoZnVuY3Rpb24oW2UsdCxhLHJdKXtyZXR1cm57cm90YXRlOmUscmVmOnQsdXNlclVuaXQ6YSx2aWV3OnJ9fSkpfSkpfSkpO0Mub24oIkdldFBhZ2VJbmRleCIsKGZ1bmN0aW9uKGUpe2NvbnN0IHQ9aS5SZWYuZ2V0KGUubnVtLGUuZ2VuKTtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJnZXRQYWdlSW5kZXgiLFt0XSl9KSk7Qy5vbigiR2V0RGVzdGluYXRpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygiZGVzdGluYXRpb25zIil9KSk7Qy5vbigiR2V0RGVzdGluYXRpb24iLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJnZXREZXN0aW5hdGlvbiIsW2UuaWRdKX0pKTtDLm9uKCJHZXRQYWdlTGFiZWxzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygicGFnZUxhYmVscyIpfSkpO0Mub24oIkdldFBhZ2VMYXlvdXQiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJwYWdlTGF5b3V0Iil9KSk7Qy5vbigiR2V0UGFnZU1vZGUiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJwYWdlTW9kZSIpfSkpO0Mub24oIkdldFZpZXdlclByZWZlcmVuY2VzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygidmlld2VyUHJlZmVyZW5jZXMiKX0pKTtDLm9uKCJHZXRPcGVuQWN0aW9uIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygib3BlbkFjdGlvbiIpfSkpO0Mub24oIkdldEF0dGFjaG1lbnRzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygiYXR0YWNobWVudHMiKX0pKTtDLm9uKCJHZXREb2NKU0FjdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJqc0FjdGlvbnMiKX0pKTtDLm9uKCJHZXRQYWdlSlNBY3Rpb25zIiwoZnVuY3Rpb24oe3BhZ2VJbmRleDplfSl7cmV0dXJuIGEuZ2V0UGFnZShlKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmUoZSwianNBY3Rpb25zIil9KSl9KSk7Qy5vbigiR2V0T3V0bGluZSIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coImRvY3VtZW50T3V0bGluZSIpfSkpO0Mub24oIkdldE9wdGlvbmFsQ29udGVudENvbmZpZyIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coIm9wdGlvbmFsQ29udGVudENvbmZpZyIpfSkpO0Mub24oIkdldFBlcm1pc3Npb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygicGVybWlzc2lvbnMiKX0pKTtDLm9uKCJHZXRNZXRhZGF0YSIsKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbYS5lbnN1cmVEb2MoImRvY3VtZW50SW5mbyIpLGEuZW5zdXJlQ2F0YWxvZygibWV0YWRhdGEiKV0pfSkpO0Mub24oIkdldE1hcmtJbmZvIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygibWFya0luZm8iKX0pKTtDLm9uKCJHZXREYXRhIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEucmVxdWVzdExvYWRlZFN0cmVhbSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJ5dGVzfSkpfSkpO0Mub24oIkdldEFubm90YXRpb25zIiwoZnVuY3Rpb24oe3BhZ2VJbmRleDplLGludGVudDp0fSl7cmV0dXJuIGEuZ2V0UGFnZShlKS50aGVuKChmdW5jdGlvbihhKXtjb25zdCByPW5ldyBXb3JrZXJUYXNrKGBHZXRBbm5vdGF0aW9uczogcGFnZSAke2V9YCk7c3RhcnRXb3JrZXJUYXNrKHIpO3JldHVybiBhLmdldEFubm90YXRpb25zRGF0YShDLHIsdCkudGhlbigoZT0+e2ZpbmlzaFdvcmtlclRhc2socik7cmV0dXJuIGV9KSwoZT0+e2ZpbmlzaFdvcmtlclRhc2socik7dGhyb3cgZX0pKX0pKX0pKTtDLm9uKCJHZXRGaWVsZE9iamVjdHMiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVEb2MoImZpZWxkT2JqZWN0cyIpfSkpO0Mub24oIkhhc0pTQWN0aW9ucyIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZURvYygiaGFzSlNBY3Rpb25zIil9KSk7Qy5vbigiR2V0Q2FsY3VsYXRpb25PcmRlcklkcyIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZURvYygiY2FsY3VsYXRpb25PcmRlcklkcyIpfSkpO0Mub24oIlNhdmVEb2N1bWVudCIsKGFzeW5jIGZ1bmN0aW9uKHtpc1B1cmVYZmE6ZSxudW1QYWdlczp0LGFubm90YXRpb25TdG9yYWdlOnMsZmlsZW5hbWU6Y30pe2NvbnN0IGg9W2EucmVxdWVzdExvYWRlZFN0cmVhbSgpLGEuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxhLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtUmVmIiksYS5lbnN1cmVEb2MoInN0YXJ0WFJlZiIpLGEuZW5zdXJlRG9jKCJ4cmVmIiksYS5lbnN1cmVEb2MoImxpbmVhcml6YXRpb24iKSxhLmVuc3VyZUNhdGFsb2coInN0cnVjdFRyZWVSb290IildLHU9W10sZj1lP251bGw6KDAsbi5nZXROZXdBbm5vdGF0aW9uc01hcCkocyksW2cscCxtLGIseSx3LFNdPWF3YWl0IFByb21pc2UuYWxsKGgpLHg9eS50cmFpbGVyLmdldFJhdygiUm9vdCIpfHxudWxsO2xldCBrO2lmKGYpe1M/YXdhaXQgUy5jYW5VcGRhdGVTdHJ1Y3RUcmVlKHtwZGZNYW5hZ2VyOmEsbmV3QW5ub3RhdGlvbnNCeVBhZ2U6Zn0pJiYoaz1TKTphd2FpdCBkLlN0cnVjdFRyZWVSb290LmNhbkNyZWF0ZVN0cnVjdHVyZVRyZWUoe2NhdGFsb2dSZWY6eCxwZGZNYW5hZ2VyOmEsbmV3QW5ub3RhdGlvbnNCeVBhZ2U6Zn0pJiYoaz1udWxsKTtjb25zdCBlPW8uQW5ub3RhdGlvbkZhY3RvcnkuZ2VuZXJhdGVJbWFnZXMocy52YWx1ZXMoKSx5LGEuZXZhbHVhdG9yT3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCksdD12b2lkIDA9PT1rP3U6W107Zm9yKGNvbnN0W3Isbl1vZiBmKXQucHVzaChhLmdldFBhZ2UocikudGhlbigodD0+e2NvbnN0IGE9bmV3IFdvcmtlclRhc2soYFNhdmUgKGVkaXRvcik6IHBhZ2UgJHtyfWApO3JldHVybiB0LnNhdmVOZXdBbm5vdGF0aW9ucyhDLGEsbixlKS5maW5hbGx5KChmdW5jdGlvbigpe2ZpbmlzaFdvcmtlclRhc2soYSl9KSl9KSkpO251bGw9PT1rP3UucHVzaChQcm9taXNlLmFsbCh0KS50aGVuKChhc3luYyBlPT57YXdhaXQgZC5TdHJ1Y3RUcmVlUm9vdC5jcmVhdGVTdHJ1Y3R1cmVUcmVlKHtuZXdBbm5vdGF0aW9uc0J5UGFnZTpmLHhyZWY6eSxjYXRhbG9nUmVmOngscGRmTWFuYWdlcjphLG5ld1JlZnM6ZX0pO3JldHVybiBlfSkpKTprJiZ1LnB1c2goUHJvbWlzZS5hbGwodCkudGhlbigoYXN5bmMgZT0+e2F3YWl0IGsudXBkYXRlU3RydWN0dXJlVHJlZSh7bmV3QW5ub3RhdGlvbnNCeVBhZ2U6ZixwZGZNYW5hZ2VyOmEsbmV3UmVmczplfSk7cmV0dXJuIGV9KSkpfWlmKGUpdS5wdXNoKGEuc2VyaWFsaXplWGZhRGF0YShzKSk7ZWxzZSBmb3IobGV0IGU9MDtlPHQ7ZSsrKXUucHVzaChhLmdldFBhZ2UoZSkudGhlbigoZnVuY3Rpb24odCl7Y29uc3QgYT1uZXcgV29ya2VyVGFzayhgU2F2ZTogcGFnZSAke2V9YCk7cmV0dXJuIHQuc2F2ZShDLGEscykuZmluYWxseSgoZnVuY3Rpb24oKXtmaW5pc2hXb3JrZXJUYXNrKGEpfSkpfSkpKTtjb25zdCB2PWF3YWl0IFByb21pc2UuYWxsKHUpO2xldCBGPVtdLE89bnVsbDtpZihlKXtPPXZbMF07aWYoIU8pcmV0dXJuIGcuYnl0ZXN9ZWxzZXtGPXYuZmxhdCgyKTtpZigwPT09Ri5sZW5ndGgpcmV0dXJuIGcuYnl0ZXN9Y29uc3QgVD1tJiZwIGluc3RhbmNlb2YgaS5EaWN0JiZGLnNvbWUoKGU9PmUubmVlZEFwcGVhcmFuY2VzKSksTT1wIGluc3RhbmNlb2YgaS5EaWN0JiZwLmdldCgiWEZBIil8fG51bGw7bGV0IEQ9bnVsbCxFPSExO2lmKEFycmF5LmlzQXJyYXkoTSkpe2ZvcihsZXQgZT0wLHQ9TS5sZW5ndGg7ZTx0O2UrPTIpaWYoImRhdGFzZXRzIj09PU1bZV0pe0Q9TVtlKzFdO0U9ITB9bnVsbD09PUQmJihEPXkuZ2V0TmV3VGVtcG9yYXJ5UmVmKCkpfWVsc2UgTSYmKDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgWEZBIHR5cGUuIik7bGV0IE49T2JqZWN0LmNyZWF0ZShudWxsKTtpZih5LnRyYWlsZXIpe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PXkudHJhaWxlci5nZXQoIkluZm8iKXx8bnVsbDt0IGluc3RhbmNlb2YgaS5EaWN0JiZ0LmZvckVhY2goKCh0LGEpPT57InN0cmluZyI9PXR5cGVvZiBhJiYoZVt0XT0oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShhKSl9KSk7Tj17cm9vdFJlZjp4LGVuY3J5cHRSZWY6eS50cmFpbGVyLmdldFJhdygiRW5jcnlwdCIpfHxudWxsLG5ld1JlZjp5LmdldE5ld1RlbXBvcmFyeVJlZigpLGluZm9SZWY6eS50cmFpbGVyLmdldFJhdygiSW5mbyIpfHxudWxsLGluZm86ZSxmaWxlSWRzOnkudHJhaWxlci5nZXQoIklEIil8fG51bGwsc3RhcnRYUmVmOnc/Yjp5Lmxhc3RYUmVmU3RyZWFtUG9zPz9iLGZpbGVuYW1lOmN9fXJldHVybigwLGwuaW5jcmVtZW50YWxVcGRhdGUpKHtvcmlnaW5hbERhdGE6Zy5ieXRlcyx4cmVmSW5mbzpOLG5ld1JlZnM6Rix4cmVmOnksaGFzWGZhOiEhTSx4ZmFEYXRhc2V0c1JlZjpELGhhc1hmYURhdGFzZXRzRW50cnk6RSxuZWVkQXBwZWFyYW5jZXM6VCxhY3JvRm9ybVJlZjptLGFjcm9Gb3JtOnAseGZhRGF0YTpPfSkuZmluYWxseSgoKCk9Pnt5LnJlc2V0TmV3VGVtcG9yYXJ5UmVmKCl9KSl9KSk7Qy5vbigiR2V0T3BlcmF0b3JMaXN0IiwoZnVuY3Rpb24oZSx0KXtjb25zdCBuPWUucGFnZUluZGV4O2EuZ2V0UGFnZShuKS50aGVuKChmdW5jdGlvbihhKXtjb25zdCBpPW5ldyBXb3JrZXJUYXNrKGBHZXRPcGVyYXRvckxpc3Q6IHBhZ2UgJHtufWApO3N0YXJ0V29ya2VyVGFzayhpKTtjb25zdCBzPW0+PXIuVmVyYm9zaXR5TGV2ZWwuSU5GT1M/RGF0ZS5ub3coKTowO2EuZ2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOkMsc2luazp0LHRhc2s6aSxpbnRlbnQ6ZS5pbnRlbnQsY2FjaGVLZXk6ZS5jYWNoZUtleSxhbm5vdGF0aW9uU3RvcmFnZTplLmFubm90YXRpb25TdG9yYWdlfSkudGhlbigoZnVuY3Rpb24oZSl7ZmluaXNoV29ya2VyVGFzayhpKTtzJiYoMCxyLmluZm8pKGBwYWdlPSR7bisxfSAtIGdldE9wZXJhdG9yTGlzdDogdGltZT0ke0RhdGUubm93KCktc31tcywgbGVuPSR7ZS5sZW5ndGh9YCk7dC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe2ZpbmlzaFdvcmtlclRhc2soaSk7aS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpO0Mub24oIkdldFRleHRDb250ZW50IiwoZnVuY3Rpb24oZSx0KXtjb25zdHtwYWdlSW5kZXg6bixpbmNsdWRlTWFya2VkQ29udGVudDppLGRpc2FibGVOb3JtYWxpemF0aW9uOnN9PWU7YS5nZXRQYWdlKG4pLnRoZW4oKGZ1bmN0aW9uKGUpe2NvbnN0IGE9bmV3IFdvcmtlclRhc2soIkdldFRleHRDb250ZW50OiBwYWdlICIrbik7c3RhcnRXb3JrZXJUYXNrKGEpO2NvbnN0IG89bT49ci5WZXJib3NpdHlMZXZlbC5JTkZPUz9EYXRlLm5vdygpOjA7ZS5leHRyYWN0VGV4dENvbnRlbnQoe2hhbmRsZXI6Qyx0YXNrOmEsc2luazp0LGluY2x1ZGVNYXJrZWRDb250ZW50OmksZGlzYWJsZU5vcm1hbGl6YXRpb246c30pLnRoZW4oKGZ1bmN0aW9uKCl7ZmluaXNoV29ya2VyVGFzayhhKTtvJiYoMCxyLmluZm8pKGBwYWdlPSR7bisxfSAtIGdldFRleHRDb250ZW50OiB0aW1lPWArKERhdGUubm93KCktbykrIm1zIik7dC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe2ZpbmlzaFdvcmtlclRhc2soYSk7YS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpO0Mub24oIkdldFN0cnVjdFRyZWUiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5nZXRQYWdlKGUucGFnZUluZGV4KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmUoZSwiZ2V0U3RydWN0VHJlZSIpfSkpfSkpO0Mub24oIkZvbnRGYWxsYmFjayIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmZvbnRGYWxsYmFjayhlLmlkLEMpfSkpO0Mub24oIkNsZWFudXAiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5jbGVhbnVwKCEwKX0pKTtDLm9uKCJUZXJtaW5hdGUiLChmdW5jdGlvbihlKXtmPSEwO2NvbnN0IHQ9W107aWYoYSl7YS50ZXJtaW5hdGUobmV3IHIuQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7Y29uc3QgZT1hLmNsZWFudXAoKTt0LnB1c2goZSk7YT1udWxsfWVsc2UoMCxjLmNsZWFyR2xvYmFsQ2FjaGVzKSgpO2cmJmcobmV3IHIuQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7Zm9yKGNvbnN0IGUgb2YgcCl7dC5wdXNoKGUuZmluaXNoZWQpO2UudGVybWluYXRlKCl9cmV0dXJuIFByb21pc2UuYWxsKHQpLnRoZW4oKGZ1bmN0aW9uKCl7Qy5kZXN0cm95KCk7Qz1udWxsfSkpfSkpO0Mub24oIlJlYWR5IiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uIHNldHVwRG9jKGUpe2Z1bmN0aW9uIG9uU3VjY2VzcyhlKXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7Qy5zZW5kKCJHZXREb2MiLHtwZGZJbmZvOmV9KX1mdW5jdGlvbiBvbkZhaWx1cmUoZSl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2lmKGUgaW5zdGFuY2VvZiByLlBhc3N3b3JkRXhjZXB0aW9uKXtjb25zdCB0PW5ldyBXb3JrZXJUYXNrKGBQYXNzd29yZEV4Y2VwdGlvbjogcmVzcG9uc2UgJHtlLmNvZGV9YCk7c3RhcnRXb3JrZXJUYXNrKHQpO0Muc2VuZFdpdGhQcm9taXNlKCJQYXNzd29yZFJlcXVlc3QiLGUpLnRoZW4oKGZ1bmN0aW9uKHtwYXNzd29yZDplfSl7ZmluaXNoV29ya2VyVGFzayh0KTthLnVwZGF0ZVBhc3N3b3JkKGUpO3BkZk1hbmFnZXJSZWFkeSgpfSkpLmNhdGNoKChmdW5jdGlvbigpe2ZpbmlzaFdvcmtlclRhc2sodCk7Qy5zZW5kKCJEb2NFeGNlcHRpb24iLGUpfSkpfWVsc2UgZSBpbnN0YW5jZW9mIHIuSW52YWxpZFBERkV4Y2VwdGlvbnx8ZSBpbnN0YW5jZW9mIHIuTWlzc2luZ1BERkV4Y2VwdGlvbnx8ZSBpbnN0YW5jZW9mIHIuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygci5Vbmtub3duRXJyb3JFeGNlcHRpb24/Qy5zZW5kKCJEb2NFeGNlcHRpb24iLGUpOkMuc2VuZCgiRG9jRXhjZXB0aW9uIixuZXcgci5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUudG9TdHJpbmcoKSkpfWZ1bmN0aW9uIHBkZk1hbmFnZXJSZWFkeSgpe2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtsb2FkRG9jdW1lbnQoITEpLnRoZW4ob25TdWNjZXNzLChmdW5jdGlvbihlKXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7ZSBpbnN0YW5jZW9mIG4uWFJlZlBhcnNlRXhjZXB0aW9uP2EucmVxdWVzdExvYWRlZFN0cmVhbSgpLnRoZW4oKGZ1bmN0aW9uKCl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2xvYWREb2N1bWVudCghMCkudGhlbihvblN1Y2Nlc3Msb25GYWlsdXJlKX0pKTpvbkZhaWx1cmUoZSl9KSl9ZW5zdXJlTm90VGVybWluYXRlZCgpO2dldFBkZk1hbmFnZXIoZSkudGhlbigoZnVuY3Rpb24oZSl7aWYoZil7ZS50ZXJtaW5hdGUobmV3IHIuQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7dGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQiKX1hPWU7YS5yZXF1ZXN0TG9hZGVkU3RyZWFtKCEwKS50aGVuKChlPT57Qy5zZW5kKCJEYXRhTG9hZGVkIix7bGVuZ3RoOmUuYnl0ZXMuYnl0ZUxlbmd0aH0pfSkpfSkpLnRoZW4ocGRmTWFuYWdlclJlYWR5LG9uRmFpbHVyZSl9KGUpO2U9bnVsbH0pKTtyZXR1cm4geH1zdGF0aWMgaW5pdGlhbGl6ZUZyb21Qb3J0KGUpe2NvbnN0IHQ9bmV3IGguTWVzc2FnZUhhbmRsZXIoIndvcmtlciIsIm1haW4iLGUpO1dvcmtlck1lc3NhZ2VIYW5kbGVyLnNldHVwKHQsZSk7dC5zZW5kKCJyZWFkeSIsbnVsbCl9fXQuV29ya2VyTWVzc2FnZUhhbmRsZXI9V29ya2VyTWVzc2FnZUhhbmRsZXI7InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3cmJiFyLmlzTm9kZUpTJiYidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJmZ1bmN0aW9uIGlzTWVzc2FnZVBvcnQoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucG9zdE1lc3NhZ2UmJiJvbm1lc3NhZ2UiaW4gZX0oc2VsZikmJldvcmtlck1lc3NhZ2VIYW5kbGVyLmluaXRpYWxpemVGcm9tUG9ydChzZWxmKX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5WZXJib3NpdHlMZXZlbD10LlV0aWw9dC5Vbmtub3duRXJyb3JFeGNlcHRpb249dC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb249dC5UZXh0UmVuZGVyaW5nTW9kZT10LlJlbmRlcmluZ0ludGVudEZsYWc9dC5Qcm9taXNlQ2FwYWJpbGl0eT10LlBlcm1pc3Npb25GbGFnPXQuUGFzc3dvcmRSZXNwb25zZXM9dC5QYXNzd29yZEV4Y2VwdGlvbj10LlBhZ2VBY3Rpb25FdmVudFR5cGU9dC5PUFM9dC5NaXNzaW5nUERGRXhjZXB0aW9uPXQuTUFYX0lNQUdFX1NJWkVfVE9fQ0FDSEU9dC5MSU5FX0ZBQ1RPUj10LkxJTkVfREVTQ0VOVF9GQUNUT1I9dC5JbnZhbGlkUERGRXhjZXB0aW9uPXQuSW1hZ2VLaW5kPXQuSURFTlRJVFlfTUFUUklYPXQuRm9ybWF0RXJyb3I9dC5GZWF0dXJlVGVzdD10LkZPTlRfSURFTlRJVFlfTUFUUklYPXQuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9dC5DTWFwQ29tcHJlc3Npb25UeXBlPXQuQmFzZUV4Y2VwdGlvbj10LkJBU0VMSU5FX0ZBQ1RPUj10LkFubm90YXRpb25UeXBlPXQuQW5ub3RhdGlvblJlcGx5VHlwZT10LkFubm90YXRpb25QcmVmaXg9dC5Bbm5vdGF0aW9uTW9kZT10LkFubm90YXRpb25GbGFnPXQuQW5ub3RhdGlvbkZpZWxkRmxhZz10LkFubm90YXRpb25FZGl0b3JUeXBlPXQuQW5ub3RhdGlvbkVkaXRvclByZWZpeD10LkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlPXQuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZT10LkFubm90YXRpb25BY3Rpb25FdmVudFR5cGU9dC5BYm9ydEV4Y2VwdGlvbj12b2lkIDA7dC5hc3NlcnQ9ZnVuY3Rpb24gYXNzZXJ0KGUsdCl7ZXx8dW5yZWFjaGFibGUodCl9O3QuYnl0ZXNUb1N0cmluZz1ieXRlc1RvU3RyaW5nO3QuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybD1mdW5jdGlvbiBjcmVhdGVWYWxpZEFic29sdXRlVXJsKGUsdD1udWxsLGE9bnVsbCl7aWYoIWUpcmV0dXJuIG51bGw7dHJ5e2lmKGEmJiJzdHJpbmciPT10eXBlb2YgZSl7aWYoYS5hZGREZWZhdWx0UHJvdG9jb2wmJmUuc3RhcnRzV2l0aCgid3d3LiIpKXtjb25zdCB0PWUubWF0Y2goL1wuL2cpO3Q/Lmxlbmd0aD49MiYmKGU9YGh0dHA6Ly8ke2V9YCl9aWYoYS50cnlDb252ZXJ0RW5jb2RpbmcpdHJ5e2U9c3RyaW5nVG9VVEY4U3RyaW5nKGUpfWNhdGNoe319Y29uc3Qgcj10P25ldyBVUkwoZSx0KTpuZXcgVVJMKGUpO2lmKGZ1bmN0aW9uIF9pc1ZhbGlkUHJvdG9jb2woZSl7c3dpdGNoKGU/LnByb3RvY29sKXtjYXNlImh0dHA6IjpjYXNlImh0dHBzOiI6Y2FzZSJmdHA6IjpjYXNlIm1haWx0bzoiOmNhc2UidGVsOiI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19KHIpKXJldHVybiByfWNhdGNoe31yZXR1cm4gbnVsbH07dC5nZXRNb2RpZmljYXRpb25EYXRlPWZ1bmN0aW9uIGdldE1vZGlmaWNhdGlvbkRhdGUoZT1uZXcgRGF0ZSl7cmV0dXJuW2UuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpLChlLmdldFVUQ01vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpXS5qb2luKCIiKX07dC5nZXRVdWlkPWZ1bmN0aW9uIGdldFV1aWQoKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIGNyeXB0bz8ucmFuZG9tVVVJRClyZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtjb25zdCBlPW5ldyBVaW50OEFycmF5KDMyKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIGNyeXB0bz8uZ2V0UmFuZG9tVmFsdWVzKWNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZSk7ZWxzZSBmb3IobGV0IHQ9MDt0PDMyO3QrKyllW3RdPU1hdGguZmxvb3IoMjU1Kk1hdGgucmFuZG9tKCkpO3JldHVybiBieXRlc1RvU3RyaW5nKGUpfTt0LmdldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uIGdldFZlcmJvc2l0eUxldmVsKCl7cmV0dXJuIG59O3QuaW5mbz1mdW5jdGlvbiBpbmZvKGUpe24+PXIuSU5GT1MmJmNvbnNvbGUubG9nKGBJbmZvOiAke2V9YCl9O3QuaXNBcnJheUJ1ZmZlcj1mdW5jdGlvbiBpc0FycmF5QnVmZmVyKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmdm9pZCAwIT09ZT8uYnl0ZUxlbmd0aH07dC5pc0FycmF5RXF1YWw9ZnVuY3Rpb24gaXNBcnJheUVxdWFsKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspaWYoZVthXSE9PXRbYV0pcmV0dXJuITE7cmV0dXJuITB9O3QuaXNOb2RlSlM9dm9pZCAwO3Qubm9ybWFsaXplVW5pY29kZT1mdW5jdGlvbiBub3JtYWxpemVVbmljb2RlKGUpe2lmKCFjKXtjPS8oW1x1MDBhMFx1MDBiNVx1MDM3ZVx1MGViM1x1MjAwMC1cdTIwMGFcdTIwMmZcdTIxMjZcdWZiMDAtXHVmYjA0XHVmYjA2XHVmYjIwLVx1ZmIzNlx1ZmIzOC1cdWZiM2NcdWZiM2VcdWZiNDAtXHVmYjQxXHVmYjQzLVx1ZmI0NFx1ZmI0Ni1cdWZiYTFcdWZiYTQtXHVmYmE5XHVmYmFlLVx1ZmJiMVx1ZmJkMy1cdWZiZGNcdWZiZGUtXHVmYmU3XHVmYmVhLVx1ZmJmOFx1ZmJmYy1cdWZiZmRcdWZjMDAtXHVmYzVkXHVmYzY0LVx1ZmNmMVx1ZmNmNS1cdWZkM2RcdWZkODhcdWZkZjRcdWZkZmEtXHVmZGZiXHVmZTcxXHVmZTc3XHVmZTc5XHVmZTdiXHVmZTdkXSspfChcdWZiMDUrKS9ndTtsPW5ldyBNYXAoW1si76yFIiwixb90Il1dKX1yZXR1cm4gZS5yZXBsYWNlQWxsKGMsKChlLHQsYSk9PnQ/dC5ub3JtYWxpemUoIk5GS0MiKTpsLmdldChhKSkpfTt0Lm9iamVjdEZyb21NYXA9ZnVuY3Rpb24gb2JqZWN0RnJvbU1hcChlKXtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0W2Escl1vZiBlKXRbYV09cjtyZXR1cm4gdH07dC5vYmplY3RTaXplPWZ1bmN0aW9uIG9iamVjdFNpemUoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmxlbmd0aH07dC5zZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbiBzZXRWZXJib3NpdHlMZXZlbChlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYobj1lKX07dC5zaGFkb3c9c2hhZG93O3Quc3RyaW5nMzI9ZnVuY3Rpb24gc3RyaW5nMzIoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZSl9O3Quc3RyaW5nVG9CeXRlcz1zdHJpbmdUb0J5dGVzO3Quc3RyaW5nVG9QREZTdHJpbmc9ZnVuY3Rpb24gc3RyaW5nVG9QREZTdHJpbmcoZSl7aWYoZVswXT49IsOvIil7bGV0IHQ7IsO+Ij09PWVbMF0mJiLDvyI9PT1lWzFdP3Q9InV0Zi0xNmJlIjoiw78iPT09ZVswXSYmIsO+Ij09PWVbMV0/dD0idXRmLTE2bGUiOiLDryI9PT1lWzBdJiYiwrsiPT09ZVsxXSYmIsK/Ij09PWVbMl0mJih0PSJ1dGYtOCIpO2lmKHQpdHJ5e2NvbnN0IGE9bmV3IFRleHREZWNvZGVyKHQse2ZhdGFsOiEwfSkscj1zdHJpbmdUb0J5dGVzKGUpO3JldHVybiBhLmRlY29kZShyKX1jYXRjaChlKXt3YXJuKGBzdHJpbmdUb1BERlN0cmluZzogIiR7ZX0iLmApfX1jb25zdCB0PVtdO2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKyl7Y29uc3Qgcj1vW2UuY2hhckNvZGVBdChhKV07dC5wdXNoKHI/U3RyaW5nLmZyb21DaGFyQ29kZShyKTplLmNoYXJBdChhKSl9cmV0dXJuIHQuam9pbigiIil9O3Quc3RyaW5nVG9VVEY4U3RyaW5nPXN0cmluZ1RvVVRGOFN0cmluZzt0LnVucmVhY2hhYmxlPXVucmVhY2hhYmxlO3QudXRmOFN0cmluZ1RvU3RyaW5nPWZ1bmN0aW9uIHV0ZjhTdHJpbmdUb1N0cmluZyhlKXtyZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKX07dC53YXJuPXdhcm47Y29uc3QgYT0hKCJvYmplY3QiIT10eXBlb2YgcHJvY2Vzc3x8cHJvY2VzcysiIiE9IltvYmplY3QgcHJvY2Vzc10ifHxwcm9jZXNzLnZlcnNpb25zLm53fHxwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uJiZwcm9jZXNzLnR5cGUmJiJicm93c2VyIiE9PXByb2Nlc3MudHlwZSk7dC5pc05vZGVKUz1hO3QuSURFTlRJVFlfTUFUUklYPVsxLDAsMCwxLDAsMF07dC5GT05UX0lERU5USVRZX01BVFJJWD1bLjAwMSwwLDAsLjAwMSwwLDBdO3QuTUFYX0lNQUdFX1NJWkVfVE9fQ0FDSEU9MWU3O3QuTElORV9GQUNUT1I9MS4zNTt0LkxJTkVfREVTQ0VOVF9GQUNUT1I9LjM1O3QuQkFTRUxJTkVfRkFDVE9SPS4yNTkyNTkyNTkyNTkyNTkyNDt0LlJlbmRlcmluZ0ludGVudEZsYWc9e0FOWToxLERJU1BMQVk6MixQUklOVDo0LFNBVkU6OCxBTk5PVEFUSU9OU19GT1JNUzoxNixBTk5PVEFUSU9OU19TVE9SQUdFOjMyLEFOTk9UQVRJT05TX0RJU0FCTEU6NjQsT1BMSVNUOjI1Nn07dC5Bbm5vdGF0aW9uTW9kZT17RElTQUJMRTowLEVOQUJMRToxLEVOQUJMRV9GT1JNUzoyLEVOQUJMRV9TVE9SQUdFOjN9O3QuQW5ub3RhdGlvbkVkaXRvclByZWZpeD0icGRmanNfaW50ZXJuYWxfZWRpdG9yXyI7dC5Bbm5vdGF0aW9uRWRpdG9yVHlwZT17RElTQUJMRTotMSxOT05FOjAsRlJFRVRFWFQ6MyxTVEFNUDoxMyxJTks6MTV9O3QuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGU9e1JFU0laRToxLENSRUFURToyLEZSRUVURVhUX1NJWkU6MTEsRlJFRVRFWFRfQ09MT1I6MTIsRlJFRVRFWFRfT1BBQ0lUWToxMyxJTktfQ09MT1I6MjEsSU5LX1RISUNLTkVTUzoyMixJTktfT1BBQ0lUWToyM307dC5QZXJtaXNzaW9uRmxhZz17UFJJTlQ6NCxNT0RJRllfQ09OVEVOVFM6OCxDT1BZOjE2LE1PRElGWV9BTk5PVEFUSU9OUzozMixGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOjI1NixDT1BZX0ZPUl9BQ0NFU1NJQklMSVRZOjUxMixBU1NFTUJMRToxMDI0LFBSSU5UX0hJR0hfUVVBTElUWToyMDQ4fTt0LlRleHRSZW5kZXJpbmdNb2RlPXtGSUxMOjAsU1RST0tFOjEsRklMTF9TVFJPS0U6MixJTlZJU0lCTEU6MyxGSUxMX0FERF9UT19QQVRIOjQsU1RST0tFX0FERF9UT19QQVRIOjUsRklMTF9TVFJPS0VfQUREX1RPX1BBVEg6NixBRERfVE9fUEFUSDo3LEZJTExfU1RST0tFX01BU0s6MyxBRERfVE9fUEFUSF9GTEFHOjR9O3QuSW1hZ2VLaW5kPXtHUkFZU0NBTEVfMUJQUDoxLFJHQl8yNEJQUDoyLFJHQkFfMzJCUFA6M307dC5Bbm5vdGF0aW9uVHlwZT17VEVYVDoxLExJTks6MixGUkVFVEVYVDozLExJTkU6NCxTUVVBUkU6NSxDSVJDTEU6NixQT0xZR09OOjcsUE9MWUxJTkU6OCxISUdITElHSFQ6OSxVTkRFUkxJTkU6MTAsU1FVSUdHTFk6MTEsU1RSSUtFT1VUOjEyLFNUQU1QOjEzLENBUkVUOjE0LElOSzoxNSxQT1BVUDoxNixGSUxFQVRUQUNITUVOVDoxNyxTT1VORDoxOCxNT1ZJRToxOSxXSURHRVQ6MjAsU0NSRUVOOjIxLFBSSU5URVJNQVJLOjIyLFRSQVBORVQ6MjMsV0FURVJNQVJLOjI0LFRIUkVFRDoyNSxSRURBQ1Q6MjZ9O3QuQW5ub3RhdGlvblJlcGx5VHlwZT17R1JPVVA6Ikdyb3VwIixSRVBMWToiUiJ9O3QuQW5ub3RhdGlvbkZsYWc9e0lOVklTSUJMRToxLEhJRERFTjoyLFBSSU5UOjQsTk9aT09NOjgsTk9ST1RBVEU6MTYsTk9WSUVXOjMyLFJFQURPTkxZOjY0LExPQ0tFRDoxMjgsVE9HR0xFTk9WSUVXOjI1NixMT0NLRURDT05URU5UUzo1MTJ9O3QuQW5ub3RhdGlvbkZpZWxkRmxhZz17UkVBRE9OTFk6MSxSRVFVSVJFRDoyLE5PRVhQT1JUOjQsTVVMVElMSU5FOjQwOTYsUEFTU1dPUkQ6ODE5MixOT1RPR0dMRVRPT0ZGOjE2Mzg0LFJBRElPOjMyNzY4LFBVU0hCVVRUT046NjU1MzYsQ09NQk86MTMxMDcyLEVESVQ6MjYyMTQ0LFNPUlQ6NTI0Mjg4LEZJTEVTRUxFQ1Q6MTA0ODU3NixNVUxUSVNFTEVDVDoyMDk3MTUyLERPTk9UU1BFTExDSEVDSzo0MTk0MzA0LERPTk9UU0NST0xMOjgzODg2MDgsQ09NQjoxNjc3NzIxNixSSUNIVEVYVDozMzU1NDQzMixSQURJT1NJTlVOSVNPTjozMzU1NDQzMixDT01NSVRPTlNFTENIQU5HRTo2NzEwODg2NH07dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXtTT0xJRDoxLERBU0hFRDoyLEJFVkVMRUQ6MyxJTlNFVDo0LFVOREVSTElORTo1fTt0LkFubm90YXRpb25BY3Rpb25FdmVudFR5cGU9e0U6Ik1vdXNlIEVudGVyIixYOiJNb3VzZSBFeGl0IixEOiJNb3VzZSBEb3duIixVOiJNb3VzZSBVcCIsRm86IkZvY3VzIixCbDoiQmx1ciIsUE86IlBhZ2VPcGVuIixQQzoiUGFnZUNsb3NlIixQVjoiUGFnZVZpc2libGUiLFBJOiJQYWdlSW52aXNpYmxlIixLOiJLZXlzdHJva2UiLEY6IkZvcm1hdCIsVjoiVmFsaWRhdGUiLEM6IkNhbGN1bGF0ZSJ9O3QuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9e1dDOiJXaWxsQ2xvc2UiLFdTOiJXaWxsU2F2ZSIsRFM6IkRpZFNhdmUiLFdQOiJXaWxsUHJpbnQiLERQOiJEaWRQcmludCJ9O3QuUGFnZUFjdGlvbkV2ZW50VHlwZT17TzoiUGFnZU9wZW4iLEM6IlBhZ2VDbG9zZSJ9O2NvbnN0IHI9e0VSUk9SUzowLFdBUk5JTkdTOjEsSU5GT1M6NX07dC5WZXJib3NpdHlMZXZlbD1yO3QuQ01hcENvbXByZXNzaW9uVHlwZT17Tk9ORTowLEJJTkFSWToxfTt0Lk9QUz17ZGVwZW5kZW5jeToxLHNldExpbmVXaWR0aDoyLHNldExpbmVDYXA6MyxzZXRMaW5lSm9pbjo0LHNldE1pdGVyTGltaXQ6NSxzZXREYXNoOjYsc2V0UmVuZGVyaW5nSW50ZW50Ojcsc2V0RmxhdG5lc3M6OCxzZXRHU3RhdGU6OSxzYXZlOjEwLHJlc3RvcmU6MTEsdHJhbnNmb3JtOjEyLG1vdmVUbzoxMyxsaW5lVG86MTQsY3VydmVUbzoxNSxjdXJ2ZVRvMjoxNixjdXJ2ZVRvMzoxNyxjbG9zZVBhdGg6MTgscmVjdGFuZ2xlOjE5LHN0cm9rZToyMCxjbG9zZVN0cm9rZToyMSxmaWxsOjIyLGVvRmlsbDoyMyxmaWxsU3Ryb2tlOjI0LGVvRmlsbFN0cm9rZToyNSxjbG9zZUZpbGxTdHJva2U6MjYsY2xvc2VFT0ZpbGxTdHJva2U6MjcsZW5kUGF0aDoyOCxjbGlwOjI5LGVvQ2xpcDozMCxiZWdpblRleHQ6MzEsZW5kVGV4dDozMixzZXRDaGFyU3BhY2luZzozMyxzZXRXb3JkU3BhY2luZzozNCxzZXRIU2NhbGU6MzUsc2V0TGVhZGluZzozNixzZXRGb250OjM3LHNldFRleHRSZW5kZXJpbmdNb2RlOjM4LHNldFRleHRSaXNlOjM5LG1vdmVUZXh0OjQwLHNldExlYWRpbmdNb3ZlVGV4dDo0MSxzZXRUZXh0TWF0cml4OjQyLG5leHRMaW5lOjQzLHNob3dUZXh0OjQ0LHNob3dTcGFjZWRUZXh0OjQ1LG5leHRMaW5lU2hvd1RleHQ6NDYsbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6NDcsc2V0Q2hhcldpZHRoOjQ4LHNldENoYXJXaWR0aEFuZEJvdW5kczo0OSxzZXRTdHJva2VDb2xvclNwYWNlOjUwLHNldEZpbGxDb2xvclNwYWNlOjUxLHNldFN0cm9rZUNvbG9yOjUyLHNldFN0cm9rZUNvbG9yTjo1MyxzZXRGaWxsQ29sb3I6NTQsc2V0RmlsbENvbG9yTjo1NSxzZXRTdHJva2VHcmF5OjU2LHNldEZpbGxHcmF5OjU3LHNldFN0cm9rZVJHQkNvbG9yOjU4LHNldEZpbGxSR0JDb2xvcjo1OSxzZXRTdHJva2VDTVlLQ29sb3I6NjAsc2V0RmlsbENNWUtDb2xvcjo2MSxzaGFkaW5nRmlsbDo2MixiZWdpbklubGluZUltYWdlOjYzLGJlZ2luSW1hZ2VEYXRhOjY0LGVuZElubGluZUltYWdlOjY1LHBhaW50WE9iamVjdDo2NixtYXJrUG9pbnQ6NjcsbWFya1BvaW50UHJvcHM6NjgsYmVnaW5NYXJrZWRDb250ZW50OjY5LGJlZ2luTWFya2VkQ29udGVudFByb3BzOjcwLGVuZE1hcmtlZENvbnRlbnQ6NzEsYmVnaW5Db21wYXQ6NzIsZW5kQ29tcGF0OjczLHBhaW50Rm9ybVhPYmplY3RCZWdpbjo3NCxwYWludEZvcm1YT2JqZWN0RW5kOjc1LGJlZ2luR3JvdXA6NzYsZW5kR3JvdXA6NzcsYmVnaW5Bbm5vdGF0aW9uOjgwLGVuZEFubm90YXRpb246ODEscGFpbnRJbWFnZU1hc2tYT2JqZWN0OjgzLHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOjg0LHBhaW50SW1hZ2VYT2JqZWN0Ojg1LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Ojg2LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ODcscGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6ODgscGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0Ojg5LHBhaW50U29saWRDb2xvckltYWdlTWFzazo5MCxjb25zdHJ1Y3RQYXRoOjkxfTt0LlBhc3N3b3JkUmVzcG9uc2VzPXtORUVEX1BBU1NXT1JEOjEsSU5DT1JSRUNUX1BBU1NXT1JEOjJ9O2xldCBuPXIuV0FSTklOR1M7ZnVuY3Rpb24gd2FybihlKXtuPj1yLldBUk5JTkdTJiZjb25zb2xlLmxvZyhgV2FybmluZzogJHtlfWApfWZ1bmN0aW9uIHVucmVhY2hhYmxlKGUpe3Rocm93IG5ldyBFcnJvcihlKX1mdW5jdGlvbiBzaGFkb3coZSx0LGEscj0hMSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6YSxlbnVtZXJhYmxlOiFyLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pO3JldHVybiBhfWNvbnN0IGk9ZnVuY3Rpb24gQmFzZUV4Y2VwdGlvbkNsb3N1cmUoKXtmdW5jdGlvbiBCYXNlRXhjZXB0aW9uKGUsdCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VFeGNlcHRpb24mJnVucmVhY2hhYmxlKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlRXhjZXB0aW9uLiIpO3RoaXMubWVzc2FnZT1lO3RoaXMubmFtZT10fUJhc2VFeGNlcHRpb24ucHJvdG90eXBlPW5ldyBFcnJvcjtCYXNlRXhjZXB0aW9uLmNvbnN0cnVjdG9yPUJhc2VFeGNlcHRpb247cmV0dXJuIEJhc2VFeGNlcHRpb259KCk7dC5CYXNlRXhjZXB0aW9uPWk7dC5QYXNzd29yZEV4Y2VwdGlvbj1jbGFzcyBQYXNzd29yZEV4Y2VwdGlvbiBleHRlbmRzIGl7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLCJQYXNzd29yZEV4Y2VwdGlvbiIpO3RoaXMuY29kZT10fX07dC5Vbmtub3duRXJyb3JFeGNlcHRpb249Y2xhc3MgVW5rbm93bkVycm9yRXhjZXB0aW9uIGV4dGVuZHMgaXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsIlVua25vd25FcnJvckV4Y2VwdGlvbiIpO3RoaXMuZGV0YWlscz10fX07dC5JbnZhbGlkUERGRXhjZXB0aW9uPWNsYXNzIEludmFsaWRQREZFeGNlcHRpb24gZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkludmFsaWRQREZFeGNlcHRpb24iKX19O3QuTWlzc2luZ1BERkV4Y2VwdGlvbj1jbGFzcyBNaXNzaW5nUERGRXhjZXB0aW9uIGV4dGVuZHMgaXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJNaXNzaW5nUERGRXhjZXB0aW9uIil9fTt0LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj1jbGFzcyBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIik7dGhpcy5zdGF0dXM9dH19O3QuRm9ybWF0RXJyb3I9Y2xhc3MgRm9ybWF0RXJyb3IgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkZvcm1hdEVycm9yIil9fTt0LkFib3J0RXhjZXB0aW9uPWNsYXNzIEFib3J0RXhjZXB0aW9uIGV4dGVuZHMgaXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJBYm9ydEV4Y2VwdGlvbiIpfX07ZnVuY3Rpb24gYnl0ZXNUb1N0cmluZyhlKXsib2JqZWN0Ij09dHlwZW9mIGUmJnZvaWQgMCE9PWU/Lmxlbmd0aHx8dW5yZWFjaGFibGUoIkludmFsaWQgYXJndW1lbnQgZm9yIGJ5dGVzVG9TdHJpbmciKTtjb25zdCB0PWUubGVuZ3RoLGE9ODE5MjtpZih0PGEpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKTtjb25zdCByPVtdO2ZvcihsZXQgbj0wO248dDtuKz1hKXtjb25zdCBpPU1hdGgubWluKG4rYSx0KSxzPWUuc3ViYXJyYXkobixpKTtyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHMpKX1yZXR1cm4gci5qb2luKCIiKX1mdW5jdGlvbiBzdHJpbmdUb0J5dGVzKGUpeyJzdHJpbmciIT10eXBlb2YgZSYmdW5yZWFjaGFibGUoIkludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZ1RvQnl0ZXMiKTtjb25zdCB0PWUubGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkodCk7Zm9yKGxldCByPTA7cjx0OysrcilhW3JdPTI1NSZlLmNoYXJDb2RlQXQocik7cmV0dXJuIGF9dC5GZWF0dXJlVGVzdD1jbGFzcyBGZWF0dXJlVGVzdHtzdGF0aWMgZ2V0IGlzTGl0dGxlRW5kaWFuKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJpc0xpdHRsZUVuZGlhbiIsZnVuY3Rpb24gaXNMaXR0bGVFbmRpYW4oKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KDQpO2VbMF09MTtyZXR1cm4gMT09PW5ldyBVaW50MzJBcnJheShlLmJ1ZmZlciwwLDEpWzBdfSgpKX1zdGF0aWMgZ2V0IGlzRXZhbFN1cHBvcnRlZCgpe3JldHVybiBzaGFkb3codGhpcywiaXNFdmFsU3VwcG9ydGVkIixmdW5jdGlvbiBpc0V2YWxTdXBwb3J0ZWQoKXt0cnl7bmV3IEZ1bmN0aW9uKCIiKTtyZXR1cm4hMH1jYXRjaHtyZXR1cm4hMX19KCkpfXN0YXRpYyBnZXQgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKXtyZXR1cm4gc2hhZG93KHRoaXMsImlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkIiwidW5kZWZpbmVkIiE9dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyl9c3RhdGljIGdldCBwbGF0Zm9ybSgpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yP3NoYWRvdyh0aGlzLCJwbGF0Zm9ybSIse2lzV2luOiExLGlzTWFjOiExfSk6c2hhZG93KHRoaXMsInBsYXRmb3JtIix7aXNXaW46bmF2aWdhdG9yLnBsYXRmb3JtLmluY2x1ZGVzKCJXaW4iKSxpc01hYzpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIk1hYyIpfSl9c3RhdGljIGdldCBpc0NTU1JvdW5kU3VwcG9ydGVkKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJpc0NTU1JvdW5kU3VwcG9ydGVkIixnbG9iYWxUaGlzLkNTUz8uc3VwcG9ydHM/Ligid2lkdGg6IHJvdW5kKDEuNXB4LCAxcHgpIikpfX07Y29uc3Qgcz1bLi4uQXJyYXkoMjU2KS5rZXlzKCldLm1hcCgoZT0+ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKSk7dC5VdGlsPWNsYXNzIFV0aWx7c3RhdGljIG1ha2VIZXhDb2xvcihlLHQsYSl7cmV0dXJuYCMke3NbZV19JHtzW3RdfSR7c1thXX1gfXN0YXRpYyBzY2FsZU1pbk1heChlLHQpe2xldCBhO2lmKGVbMF0pe2lmKGVbMF08MCl7YT10WzBdO3RbMF09dFsxXTt0WzFdPWF9dFswXSo9ZVswXTt0WzFdKj1lWzBdO2lmKGVbM108MCl7YT10WzJdO3RbMl09dFszXTt0WzNdPWF9dFsyXSo9ZVszXTt0WzNdKj1lWzNdfWVsc2V7YT10WzBdO3RbMF09dFsyXTt0WzJdPWE7YT10WzFdO3RbMV09dFszXTt0WzNdPWE7aWYoZVsxXTwwKXthPXRbMl07dFsyXT10WzNdO3RbM109YX10WzJdKj1lWzFdO3RbM10qPWVbMV07aWYoZVsyXTwwKXthPXRbMF07dFswXT10WzFdO3RbMV09YX10WzBdKj1lWzJdO3RbMV0qPWVbMl19dFswXSs9ZVs0XTt0WzFdKz1lWzRdO3RbMl0rPWVbNV07dFszXSs9ZVs1XX1zdGF0aWMgdHJhbnNmb3JtKGUsdCl7cmV0dXJuW2VbMF0qdFswXStlWzJdKnRbMV0sZVsxXSp0WzBdK2VbM10qdFsxXSxlWzBdKnRbMl0rZVsyXSp0WzNdLGVbMV0qdFsyXStlWzNdKnRbM10sZVswXSp0WzRdK2VbMl0qdFs1XStlWzRdLGVbMV0qdFs0XStlWzNdKnRbNV0rZVs1XV19c3RhdGljIGFwcGx5VHJhbnNmb3JtKGUsdCl7cmV0dXJuW2VbMF0qdFswXStlWzFdKnRbMl0rdFs0XSxlWzBdKnRbMV0rZVsxXSp0WzNdK3RbNV1dfXN0YXRpYyBhcHBseUludmVyc2VUcmFuc2Zvcm0oZSx0KXtjb25zdCBhPXRbMF0qdFszXS10WzFdKnRbMl07cmV0dXJuWyhlWzBdKnRbM10tZVsxXSp0WzJdK3RbMl0qdFs1XS10WzRdKnRbM10pL2EsKC1lWzBdKnRbMV0rZVsxXSp0WzBdK3RbNF0qdFsxXS10WzVdKnRbMF0pL2FdfXN0YXRpYyBnZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChlLHQpe2NvbnN0IGE9dGhpcy5hcHBseVRyYW5zZm9ybShlLHQpLHI9dGhpcy5hcHBseVRyYW5zZm9ybShlLnNsaWNlKDIsNCksdCksbj10aGlzLmFwcGx5VHJhbnNmb3JtKFtlWzBdLGVbM11dLHQpLGk9dGhpcy5hcHBseVRyYW5zZm9ybShbZVsyXSxlWzFdXSx0KTtyZXR1cm5bTWF0aC5taW4oYVswXSxyWzBdLG5bMF0saVswXSksTWF0aC5taW4oYVsxXSxyWzFdLG5bMV0saVsxXSksTWF0aC5tYXgoYVswXSxyWzBdLG5bMF0saVswXSksTWF0aC5tYXgoYVsxXSxyWzFdLG5bMV0saVsxXSldfXN0YXRpYyBpbnZlcnNlVHJhbnNmb3JtKGUpe2NvbnN0IHQ9ZVswXSplWzNdLWVbMV0qZVsyXTtyZXR1cm5bZVszXS90LC1lWzFdL3QsLWVbMl0vdCxlWzBdL3QsKGVbMl0qZVs1XS1lWzRdKmVbM10pL3QsKGVbNF0qZVsxXS1lWzVdKmVbMF0pL3RdfXN0YXRpYyBzaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShlKXtjb25zdCB0PVtlWzBdLGVbMl0sZVsxXSxlWzNdXSxhPWVbMF0qdFswXStlWzFdKnRbMl0scj1lWzBdKnRbMV0rZVsxXSp0WzNdLG49ZVsyXSp0WzBdK2VbM10qdFsyXSxpPWVbMl0qdFsxXStlWzNdKnRbM10scz0oYStpKS8yLG89TWF0aC5zcXJ0KChhK2kpKioyLTQqKGEqaS1uKnIpKS8yLGM9cytvfHwxLGw9cy1vfHwxO3JldHVybltNYXRoLnNxcnQoYyksTWF0aC5zcXJ0KGwpXX1zdGF0aWMgbm9ybWFsaXplUmVjdChlKXtjb25zdCB0PWUuc2xpY2UoMCk7aWYoZVswXT5lWzJdKXt0WzBdPWVbMl07dFsyXT1lWzBdfWlmKGVbMV0+ZVszXSl7dFsxXT1lWzNdO3RbM109ZVsxXX1yZXR1cm4gdH1zdGF0aWMgaW50ZXJzZWN0KGUsdCl7Y29uc3QgYT1NYXRoLm1heChNYXRoLm1pbihlWzBdLGVbMl0pLE1hdGgubWluKHRbMF0sdFsyXSkpLHI9TWF0aC5taW4oTWF0aC5tYXgoZVswXSxlWzJdKSxNYXRoLm1heCh0WzBdLHRbMl0pKTtpZihhPnIpcmV0dXJuIG51bGw7Y29uc3Qgbj1NYXRoLm1heChNYXRoLm1pbihlWzFdLGVbM10pLE1hdGgubWluKHRbMV0sdFszXSkpLGk9TWF0aC5taW4oTWF0aC5tYXgoZVsxXSxlWzNdKSxNYXRoLm1heCh0WzFdLHRbM10pKTtyZXR1cm4gbj5pP251bGw6W2EsbixyLGldfXN0YXRpYyBiZXppZXJCb3VuZGluZ0JveChlLHQsYSxyLG4saSxzLG8pe2NvbnN0IGM9W10sbD1bW10sW11dO2xldCBoLHUsZCxmLGcscCxtLGI7Zm9yKGxldCBsPTA7bDwyOysrbCl7aWYoMD09PWwpe3U9NiplLTEyKmErNipuO2g9LTMqZSs5KmEtOSpuKzMqcztkPTMqYS0zKmV9ZWxzZXt1PTYqdC0xMipyKzYqaTtoPS0zKnQrOSpyLTkqaSszKm87ZD0zKnItMyp0fWlmKE1hdGguYWJzKGgpPDFlLTEyKXtpZihNYXRoLmFicyh1KTwxZS0xMiljb250aW51ZTtmPS1kL3U7MDxmJiZmPDEmJmMucHVzaChmKX1lbHNle209dSp1LTQqZCpoO2I9TWF0aC5zcXJ0KG0pO2lmKCEobTwwKSl7Zz0oLXUrYikvKDIqaCk7MDxnJiZnPDEmJmMucHVzaChnKTtwPSgtdS1iKS8oMipoKTswPHAmJnA8MSYmYy5wdXNoKHApfX19bGV0IHksdz1jLmxlbmd0aDtjb25zdCBTPXc7Zm9yKDt3LS07KXtmPWNbd107eT0xLWY7bFswXVt3XT15KnkqeSplKzMqeSp5KmYqYSszKnkqZipmKm4rZipmKmYqcztsWzFdW3ddPXkqeSp5KnQrMyp5KnkqZipyKzMqeSpmKmYqaStmKmYqZipvfWxbMF1bU109ZTtsWzFdW1NdPXQ7bFswXVtTKzFdPXM7bFsxXVtTKzFdPW87bFswXS5sZW5ndGg9bFsxXS5sZW5ndGg9UysyO3JldHVybltNYXRoLm1pbiguLi5sWzBdKSxNYXRoLm1pbiguLi5sWzFdKSxNYXRoLm1heCguLi5sWzBdKSxNYXRoLm1heCguLi5sWzFdKV19fTtjb25zdCBvPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3MjgsNzExLDcxMCw3MjksNzMzLDczMSw3MzAsNzMyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgyMjYsODIyNCw4MjI1LDgyMzAsODIxMiw4MjExLDQwMiw4MjYwLDgyNDksODI1MCw4NzIyLDgyNDAsODIyMiw4MjIwLDgyMjEsODIxNiw4MjE3LDgyMTgsODQ4Miw2NDI1Nyw2NDI1OCwzMjEsMzM4LDM1MiwzNzYsMzgxLDMwNSwzMjIsMzM5LDM1MywzODIsMCw4MzY0XTtmdW5jdGlvbiBzdHJpbmdUb1VURjhTdHJpbmcoZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfXQuUHJvbWlzZUNhcGFiaWxpdHk9Y2xhc3MgUHJvbWlzZUNhcGFiaWxpdHl7I2U9ITE7Y29uc3RydWN0b3IoKXt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKChlLHQpPT57dGhpcy5yZXNvbHZlPXQ9Pnt0aGlzLiNlPSEwO2UodCl9O3RoaXMucmVqZWN0PWU9Pnt0aGlzLiNlPSEwO3QoZSl9fSkpfWdldCBzZXR0bGVkKCl7cmV0dXJuIHRoaXMuI2V9fTtsZXQgYz1udWxsLGw9bnVsbDt0LkFubm90YXRpb25QcmVmaXg9InBkZmpzX2ludGVybmFsX2lkXyJ9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YUmVmUGFyc2VFeGNlcHRpb249dC5YUmVmRW50cnlFeGNlcHRpb249dC5QYXJzZXJFT0ZFeGNlcHRpb249dC5QREZfVkVSU0lPTl9SRUdFWFA9dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj12b2lkIDA7dC5hcnJheUJ1ZmZlcnNUb0J5dGVzPWZ1bmN0aW9uIGFycmF5QnVmZmVyc1RvQnl0ZXMoZSl7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7aWYoMT09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KGVbMF0pO2xldCBhPTA7Zm9yKGxldCByPTA7cjx0O3IrKylhKz1lW3JdLmJ5dGVMZW5ndGg7Y29uc3Qgcj1uZXcgVWludDhBcnJheShhKTtsZXQgbj0wO2ZvcihsZXQgYT0wO2E8dDthKyspe2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoZVthXSk7ci5zZXQodCxuKTtuKz10LmJ5dGVMZW5ndGh9cmV0dXJuIHJ9O3QuY29sbGVjdEFjdGlvbnM9ZnVuY3Rpb24gY29sbGVjdEFjdGlvbnMoZSx0LGEpe2NvbnN0IGk9T2JqZWN0LmNyZWF0ZShudWxsKSxzPWdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6dCxrZXk6IkFBIixzdG9wV2hlbkZvdW5kOiExfSk7aWYocylmb3IobGV0IHQ9cy5sZW5ndGgtMTt0Pj0wO3QtLSl7Y29uc3Qgcj1zW3RdO2lmKHIgaW5zdGFuY2VvZiBuLkRpY3QpZm9yKGNvbnN0IHQgb2Ygci5nZXRLZXlzKCkpe2NvbnN0IHM9YVt0XTtpZighcyljb250aW51ZTtjb25zdCBvPVtdO19jb2xsZWN0SlMoci5nZXRSYXcodCksZSxvLG5ldyBuLlJlZlNldCk7by5sZW5ndGg+MCYmKGlbc109byl9fWlmKHQuaGFzKCJBIikpe2NvbnN0IGE9W107X2NvbGxlY3RKUyh0LmdldCgiQSIpLGUsYSxuZXcgbi5SZWZTZXQpO2EubGVuZ3RoPjAmJihpLkFjdGlvbj1hKX1yZXR1cm4oMCxyLm9iamVjdFNpemUpKGkpPjA/aTpudWxsfTt0LmVuY29kZVRvWG1sU3RyaW5nPWZ1bmN0aW9uIGVuY29kZVRvWG1sU3RyaW5nKGUpe2NvbnN0IHQ9W107bGV0IGE9MDtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2NvbnN0IG49ZS5jb2RlUG9pbnRBdChyKTtpZigzMjw9biYmbjw9MTI2KXtjb25zdCBpPW9bbl07aWYoaSl7YTxyJiZ0LnB1c2goZS5zdWJzdHJpbmcoYSxyKSk7dC5wdXNoKGkpO2E9cisxfX1lbHNle2E8ciYmdC5wdXNoKGUuc3Vic3RyaW5nKGEscikpO3QucHVzaChgJiN4JHtuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfTtgKTtuPjU1Mjk1JiYobjw1NzM0NHx8bj42NTUzMykmJnIrKzthPXIrMX19aWYoMD09PXQubGVuZ3RoKXJldHVybiBlO2E8ZS5sZW5ndGgmJnQucHVzaChlLnN1YnN0cmluZyhhLGUubGVuZ3RoKSk7cmV0dXJuIHQuam9pbigiIil9O3QuZXNjYXBlUERGTmFtZT1mdW5jdGlvbiBlc2NhcGVQREZOYW1lKGUpe2NvbnN0IHQ9W107bGV0IGE9MDtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KHIpO2lmKG48MzN8fG4+MTI2fHwzNT09PW58fDQwPT09bnx8NDE9PT1ufHw2MD09PW58fDYyPT09bnx8OTE9PT1ufHw5Mz09PW58fDEyMz09PW58fDEyNT09PW58fDQ3PT09bnx8Mzc9PT1uKXthPHImJnQucHVzaChlLnN1YnN0cmluZyhhLHIpKTt0LnB1c2goYCMke24udG9TdHJpbmcoMTYpfWApO2E9cisxfX1pZigwPT09dC5sZW5ndGgpcmV0dXJuIGU7YTxlLmxlbmd0aCYmdC5wdXNoKGUuc3Vic3RyaW5nKGEsZS5sZW5ndGgpKTtyZXR1cm4gdC5qb2luKCIiKX07dC5lc2NhcGVTdHJpbmc9ZnVuY3Rpb24gZXNjYXBlU3RyaW5nKGUpe3JldHVybiBlLnJlcGxhY2VBbGwoLyhbKClcXFxuXHJdKS9nLChlPT4iXG4iPT09ZT8iXFxuIjoiXHIiPT09ZT8iXFxyIjpgXFwke2V9YCkpfTt0LmdldEluaGVyaXRhYmxlUHJvcGVydHk9Z2V0SW5oZXJpdGFibGVQcm9wZXJ0eTt0LmdldExvb2t1cFRhYmxlRmFjdG9yeT1mdW5jdGlvbiBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZSl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dD1PYmplY3QuY3JlYXRlKG51bGwpO2UodCk7ZT1udWxsfXJldHVybiB0fX07dC5nZXROZXdBbm5vdGF0aW9uc01hcD1mdW5jdGlvbiBnZXROZXdBbm5vdGF0aW9uc01hcChlKXtpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PW5ldyBNYXA7Zm9yKGNvbnN0W2Esbl1vZiBlKXtpZighYS5zdGFydHNXaXRoKHIuQW5ub3RhdGlvbkVkaXRvclByZWZpeCkpY29udGludWU7bGV0IGU9dC5nZXQobi5wYWdlSW5kZXgpO2lmKCFlKXtlPVtdO3Quc2V0KG4ucGFnZUluZGV4LGUpfWUucHVzaChuKX1yZXR1cm4gdC5zaXplPjA/dDpudWxsfTt0LmdldFJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uIGdldFJvdGF0aW9uTWF0cml4KGUsdCxhKXtzd2l0Y2goZSl7Y2FzZSA5MDpyZXR1cm5bMCwxLC0xLDAsdCwwXTtjYXNlIDE4MDpyZXR1cm5bLTEsMCwwLC0xLHQsYV07Y2FzZSAyNzA6cmV0dXJuWzAsLTEsMSwwLDAsYV07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKX19O3QuaXNBc2NpaT1mdW5jdGlvbiBpc0FzY2lpKGUpe3JldHVybi9eW1x4MDAtXHg3Rl0qJC8udGVzdChlKX07dC5pc1doaXRlU3BhY2U9ZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGUpe3JldHVybiAzMj09PWV8fDk9PT1lfHwxMz09PWV8fDEwPT09ZX07dC5sb2cyPWZ1bmN0aW9uIGxvZzIoZSl7aWYoZTw9MClyZXR1cm4gMDtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nMihlKSl9O3QubnVtYmVyVG9TdHJpbmc9ZnVuY3Rpb24gbnVtYmVyVG9TdHJpbmcoZSl7aWYoTnVtYmVyLmlzSW50ZWdlcihlKSlyZXR1cm4gZS50b1N0cmluZygpO2NvbnN0IHQ9TWF0aC5yb3VuZCgxMDAqZSk7aWYodCUxMDA9PTApcmV0dXJuKHQvMTAwKS50b1N0cmluZygpO2lmKHQlMTA9PTApcmV0dXJuIGUudG9GaXhlZCgxKTtyZXR1cm4gZS50b0ZpeGVkKDIpfTt0LnBhcnNlWEZBUGF0aD1mdW5jdGlvbiBwYXJzZVhGQVBhdGgoZSl7Y29uc3QgdD0vKC4rKVxbKFxkKylcXSQvO3JldHVybiBlLnNwbGl0KCIuIikubWFwKChlPT57Y29uc3QgYT1lLm1hdGNoKHQpO3JldHVybiBhP3tuYW1lOmFbMV0scG9zOnBhcnNlSW50KGFbMl0sMTApfTp7bmFtZTplLHBvczowfX0pKX07dC5yZWFkSW50OD1mdW5jdGlvbiByZWFkSW50OChlLHQpe3JldHVybiBlW3RdPDwyND4+MjR9O3QucmVhZFVpbnQxNj1mdW5jdGlvbiByZWFkVWludDE2KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfTt0LnJlYWRVaW50MzI9ZnVuY3Rpb24gcmVhZFVpbnQzMihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH07dC5yZWNvdmVySnNVUkw9ZnVuY3Rpb24gcmVjb3ZlckpzVVJMKGUpe2NvbnN0IHQ9bmV3IFJlZ0V4cCgiXlxccyooIitbImFwcC5sYXVuY2hVUkwiLCJ3aW5kb3cub3BlbiIsInhmYS5ob3N0LmdvdG9VUkwiXS5qb2luKCJ8IikucmVwbGFjZUFsbCgiLiIsIlxcLiIpKyIpXFwoKD86J3xcIikoW14nXCJdKikoPzonfFwiKSg/OixcXHMqKFxcdyspXFwpfFxcKSkiLCJpIikuZXhlYyhlKTtpZih0Py5bMl0pe2NvbnN0IGU9dFsyXTtsZXQgYT0hMTsidHJ1ZSI9PT10WzNdJiYiYXBwLmxhdW5jaFVSTCI9PT10WzFdJiYoYT0hMCk7cmV0dXJue3VybDplLG5ld1dpbmRvdzphfX1yZXR1cm4gbnVsbH07dC5zdHJpbmdUb1VURjE2SGV4U3RyaW5nPWZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZIZXhTdHJpbmcoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KGEpO3QucHVzaCgocj4+OCYyNTUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIiksKDI1NSZyKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKX1yZXR1cm4gdC5qb2luKCIiKX07dC5zdHJpbmdUb1VURjE2U3RyaW5nPWZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZTdHJpbmcoZSx0PSExKXtjb25zdCBhPVtdO3QmJmEucHVzaCgiw77DvyIpO2ZvcihsZXQgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQodCk7YS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocj4+OCYyNTUpLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JnIpKX1yZXR1cm4gYS5qb2luKCIiKX07dC50b1JvbWFuTnVtZXJhbHM9ZnVuY3Rpb24gdG9Sb21hbk51bWVyYWxzKGUsdD0hMSl7KDAsci5hc3NlcnQpKE51bWJlci5pc0ludGVnZXIoZSkmJmU+MCwiVGhlIG51bWJlciBzaG91bGQgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiIpO2NvbnN0IGE9W107bGV0IG47Zm9yKDtlPj0xZTM7KXtlLT0xZTM7YS5wdXNoKCJNIil9bj1lLzEwMHwwO2UlPTEwMDthLnB1c2goc1tuXSk7bj1lLzEwfDA7ZSU9MTA7YS5wdXNoKHNbMTArbl0pO2EucHVzaChzWzIwK2VdKTtjb25zdCBpPWEuam9pbigiIik7cmV0dXJuIHQ/aS50b0xvd2VyQ2FzZSgpOml9O3QudmFsaWRhdGVDU1NGb250PWZ1bmN0aW9uIHZhbGlkYXRlQ1NTRm9udChlKXtjb25zdCB0PW5ldyBTZXQoWyIxMDAiLCIyMDAiLCIzMDAiLCI0MDAiLCI1MDAiLCI2MDAiLCI3MDAiLCI4MDAiLCI5MDAiLCIxMDAwIiwibm9ybWFsIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiXSkse2ZvbnRGYW1pbHk6YSxmb250V2VpZ2h0OnIsaXRhbGljQW5nbGU6bn09ZTtpZighdmFsaWRhdGVGb250TmFtZShhLCEwKSlyZXR1cm4hMTtjb25zdCBpPXI/ci50b1N0cmluZygpOiIiO2UuZm9udFdlaWdodD10LmhhcyhpKT9pOiI0MDAiO2NvbnN0IHM9cGFyc2VGbG9hdChuKTtlLml0YWxpY0FuZ2xlPWlzTmFOKHMpfHxzPC05MHx8cz45MD8iMTQiOm4udG9TdHJpbmcoKTtyZXR1cm4hMH07dC52YWxpZGF0ZUZvbnROYW1lPXZhbGlkYXRlRm9udE5hbWU7dmFyIHI9YSgyKSxuPWEoNCksaT1hKDUpO3QuUERGX1ZFUlNJT05fUkVHRVhQPS9eWzEtOV1cLlxkJC87Y2xhc3MgTWlzc2luZ0RhdGFFeGNlcHRpb24gZXh0ZW5kcyByLkJhc2VFeGNlcHRpb257Y29uc3RydWN0b3IoZSx0KXtzdXBlcihgTWlzc2luZyBkYXRhIFske2V9LCAke3R9KWAsIk1pc3NpbmdEYXRhRXhjZXB0aW9uIik7dGhpcy5iZWdpbj1lO3RoaXMuZW5kPXR9fXQuTWlzc2luZ0RhdGFFeGNlcHRpb249TWlzc2luZ0RhdGFFeGNlcHRpb247Y2xhc3MgUGFyc2VyRU9GRXhjZXB0aW9uIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIlBhcnNlckVPRkV4Y2VwdGlvbiIpfX10LlBhcnNlckVPRkV4Y2VwdGlvbj1QYXJzZXJFT0ZFeGNlcHRpb247Y2xhc3MgWFJlZkVudHJ5RXhjZXB0aW9uIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIlhSZWZFbnRyeUV4Y2VwdGlvbiIpfX10LlhSZWZFbnRyeUV4Y2VwdGlvbj1YUmVmRW50cnlFeGNlcHRpb247Y2xhc3MgWFJlZlBhcnNlRXhjZXB0aW9uIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIlhSZWZQYXJzZUV4Y2VwdGlvbiIpfX10LlhSZWZQYXJzZUV4Y2VwdGlvbj1YUmVmUGFyc2VFeGNlcHRpb247ZnVuY3Rpb24gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7ZGljdDplLGtleTp0LGdldEFycmF5OmE9ITEsc3RvcFdoZW5Gb3VuZDpyPSEwfSl7bGV0IGk7Y29uc3Qgcz1uZXcgbi5SZWZTZXQ7Zm9yKDtlIGluc3RhbmNlb2Ygbi5EaWN0JiYoIWUub2JqSWR8fCFzLmhhcyhlLm9iaklkKSk7KXtlLm9iaklkJiZzLnB1dChlLm9iaklkKTtjb25zdCBuPWE/ZS5nZXRBcnJheSh0KTplLmdldCh0KTtpZih2b2lkIDAhPT1uKXtpZihyKXJldHVybiBuOyhpfHw9W10pLnB1c2gobil9ZT1lLmdldCgiUGFyZW50Iil9cmV0dXJuIGl9Y29uc3Qgcz1bIiIsIkMiLCJDQyIsIkNDQyIsIkNEIiwiRCIsIkRDIiwiRENDIiwiRENDQyIsIkNNIiwiIiwiWCIsIlhYIiwiWFhYIiwiWEwiLCJMIiwiTFgiLCJMWFgiLCJMWFhYIiwiWEMiLCIiLCJJIiwiSUkiLCJJSUkiLCJJViIsIlYiLCJWSSIsIlZJSSIsIlZJSUkiLCJJWCJdO2Z1bmN0aW9uIF9jb2xsZWN0SlMoZSx0LGEscyl7aWYoIWUpcmV0dXJuO2xldCBvPW51bGw7aWYoZSBpbnN0YW5jZW9mIG4uUmVmKXtpZihzLmhhcyhlKSlyZXR1cm47bz1lO3MucHV0KG8pO2U9dC5mZXRjaChlKX1pZihBcnJheS5pc0FycmF5KGUpKWZvcihjb25zdCByIG9mIGUpX2NvbGxlY3RKUyhyLHQsYSxzKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBuLkRpY3Qpe2lmKCgwLG4uaXNOYW1lKShlLmdldCgiUyIpLCJKYXZhU2NyaXB0Iikpe2NvbnN0IHQ9ZS5nZXQoIkpTIik7bGV0IG47dCBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbT9uPXQuZ2V0U3RyaW5nKCk6InN0cmluZyI9PXR5cGVvZiB0JiYobj10KTtuJiY9KDAsci5zdHJpbmdUb1BERlN0cmluZykobikucmVwbGFjZUFsbCgiXDAiLCIiKTtuJiZhLnB1c2gobil9X2NvbGxlY3RKUyhlLmdldFJhdygiTmV4dCIpLHQsYSxzKX1vJiZzLnJlbW92ZShvKX1jb25zdCBvPXs2MDoiJmx0OyIsNjI6IiZndDsiLDM4OiImYW1wOyIsMzQ6IiZxdW90OyIsMzk6IiZhcG9zOyJ9O2Z1bmN0aW9uIHZhbGlkYXRlRm9udE5hbWUoZSx0PSExKXtjb25zdCBhPS9eKCJ8JykuKigifCcpJC8uZXhlYyhlKTtpZihhJiZhWzFdPT09YVsyXSl7aWYobmV3IFJlZ0V4cChgW15cXFxcXSR7YVsxXX1gKS50ZXN0KGUuc2xpY2UoMSwtMSkpKXt0JiYoMCxyLndhcm4pKGBGb250RmFtaWx5IGNvbnRhaW5zIHVuZXNjYXBlZCAke2FbMV19OiAke2V9LmApO3JldHVybiExfX1lbHNlIGZvcihjb25zdCBhIG9mIGUuc3BsaXQoL1sgXHRdKy8pKWlmKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3QoYSl8fCEvXltcdy1cXF0rJC8udGVzdChhKSl7dCYmKDAsci53YXJuKShgRm9udEZhbWlseSBjb250YWlucyBpbnZhbGlkIDxjdXN0b20taWRlbnQ+OiAke2V9LmApO3JldHVybiExfXJldHVybiEwfX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlJlZlNldENhY2hlPXQuUmVmU2V0PXQuUmVmPXQuTmFtZT10LkVPRj10LkRpY3Q9dC5DbWQ9dC5DSVJDVUxBUl9SRUY9dm9pZCAwO3QuY2xlYXJQcmltaXRpdmVDYWNoZXM9ZnVuY3Rpb24gY2xlYXJQcmltaXRpdmVDYWNoZXMoKXtzPU9iamVjdC5jcmVhdGUobnVsbCk7bz1PYmplY3QuY3JlYXRlKG51bGwpO2M9T2JqZWN0LmNyZWF0ZShudWxsKX07dC5pc0NtZD1mdW5jdGlvbiBpc0NtZChlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgQ21kJiYodm9pZCAwPT09dHx8ZS5jbWQ9PT10KX07dC5pc0RpY3Q9ZnVuY3Rpb24gaXNEaWN0KGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEaWN0JiYodm9pZCAwPT09dHx8aXNOYW1lKGUuZ2V0KCJUeXBlIiksdCkpfTt0LmlzTmFtZT1pc05hbWU7dC5pc1JlZnNFcXVhbD1mdW5jdGlvbiBpc1JlZnNFcXVhbChlLHQpe3JldHVybiBlLm51bT09PXQubnVtJiZlLmdlbj09PXQuZ2VufTt2YXIgcj1hKDIpO2NvbnN0IG49U3ltYm9sKCJDSVJDVUxBUl9SRUYiKTt0LkNJUkNVTEFSX1JFRj1uO2NvbnN0IGk9U3ltYm9sKCJFT0YiKTt0LkVPRj1pO2xldCBzPU9iamVjdC5jcmVhdGUobnVsbCksbz1PYmplY3QuY3JlYXRlKG51bGwpLGM9T2JqZWN0LmNyZWF0ZShudWxsKTtjbGFzcyBOYW1le2NvbnN0cnVjdG9yKGUpe3RoaXMubmFtZT1lfXN0YXRpYyBnZXQoZSl7cmV0dXJuIG9bZV18fD1uZXcgTmFtZShlKX19dC5OYW1lPU5hbWU7Y2xhc3MgQ21ke2NvbnN0cnVjdG9yKGUpe3RoaXMuY21kPWV9c3RhdGljIGdldChlKXtyZXR1cm4gc1tlXXx8PW5ldyBDbWQoZSl9fXQuQ21kPUNtZDtjb25zdCBsPWZ1bmN0aW9uIG5vblNlcmlhbGl6YWJsZUNsb3N1cmUoKXtyZXR1cm4gbH07Y2xhc3MgRGljdHtjb25zdHJ1Y3RvcihlPW51bGwpe3RoaXMuX21hcD1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMueHJlZj1lO3RoaXMub2JqSWQ9bnVsbDt0aGlzLnN1cHByZXNzRW5jcnlwdGlvbj0hMTt0aGlzLl9fbm9uU2VyaWFsaXphYmxlX189bH1hc3NpZ25YcmVmKGUpe3RoaXMueHJlZj1lfWdldCBzaXplKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21hcCkubGVuZ3RofWdldChlLHQsYSl7bGV0IHI9dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PXImJnZvaWQgMCE9PXQpe3I9dGhpcy5fbWFwW3RdO3ZvaWQgMD09PXImJnZvaWQgMCE9PWEmJihyPXRoaXMuX21hcFthXSl9cmV0dXJuIHIgaW5zdGFuY2VvZiBSZWYmJnRoaXMueHJlZj90aGlzLnhyZWYuZmV0Y2gocix0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik6cn1hc3luYyBnZXRBc3luYyhlLHQsYSl7bGV0IHI9dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PXImJnZvaWQgMCE9PXQpe3I9dGhpcy5fbWFwW3RdO3ZvaWQgMD09PXImJnZvaWQgMCE9PWEmJihyPXRoaXMuX21hcFthXSl9cmV0dXJuIHIgaW5zdGFuY2VvZiBSZWYmJnRoaXMueHJlZj90aGlzLnhyZWYuZmV0Y2hBc3luYyhyLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTpyfWdldEFycmF5KGUsdCxhKXtsZXQgcj10aGlzLl9tYXBbZV07aWYodm9pZCAwPT09ciYmdm9pZCAwIT09dCl7cj10aGlzLl9tYXBbdF07dm9pZCAwPT09ciYmdm9pZCAwIT09YSYmKHI9dGhpcy5fbWFwW2FdKX1yIGluc3RhbmNlb2YgUmVmJiZ0aGlzLnhyZWYmJihyPXRoaXMueHJlZi5mZXRjaChyLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKSk7aWYoQXJyYXkuaXNBcnJheShyKSl7cj1yLnNsaWNlKCk7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKXJbZV1pbnN0YW5jZW9mIFJlZiYmdGhpcy54cmVmJiYocltlXT10aGlzLnhyZWYuZmV0Y2gocltlXSx0aGlzLnN1cHByZXNzRW5jcnlwdGlvbikpfXJldHVybiByfWdldFJhdyhlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfWdldEtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbWFwKX1nZXRSYXdWYWx1ZXMoKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9tYXApfXNldChlLHQpe3RoaXMuX21hcFtlXT10fWhhcyhlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbWFwW2VdfWZvckVhY2goZSl7Zm9yKGNvbnN0IHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLmdldCh0KSl9c3RhdGljIGdldCBlbXB0eSgpe2NvbnN0IGU9bmV3IERpY3QobnVsbCk7ZS5zZXQ9KGUsdCk9PnsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGBzZXRgIG9uIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LiIpfTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZW1wdHkiLGUpfXN0YXRpYyBtZXJnZSh7eHJlZjplLGRpY3RBcnJheTp0LG1lcmdlU3ViRGljdHM6YT0hMX0pe2NvbnN0IHI9bmV3IERpY3QoZSksbj1uZXcgTWFwO2Zvcihjb25zdCBlIG9mIHQpaWYoZSBpbnN0YW5jZW9mIERpY3QpZm9yKGNvbnN0W3Qscl1vZiBPYmplY3QuZW50cmllcyhlLl9tYXApKXtsZXQgZT1uLmdldCh0KTtpZih2b2lkIDA9PT1lKXtlPVtdO24uc2V0KHQsZSl9ZWxzZSBpZighKGEmJnIgaW5zdGFuY2VvZiBEaWN0KSljb250aW51ZTtlLnB1c2gocil9Zm9yKGNvbnN0W3QsYV1vZiBuKXtpZigxPT09YS5sZW5ndGh8fCEoYVswXWluc3RhbmNlb2YgRGljdCkpe3IuX21hcFt0XT1hWzBdO2NvbnRpbnVlfWNvbnN0IG49bmV3IERpY3QoZSk7Zm9yKGNvbnN0IGUgb2YgYSlmb3IoY29uc3RbdCxhXW9mIE9iamVjdC5lbnRyaWVzKGUuX21hcCkpdm9pZCAwPT09bi5fbWFwW3RdJiYobi5fbWFwW3RdPWEpO24uc2l6ZT4wJiYoci5fbWFwW3RdPW4pfW4uY2xlYXIoKTtyZXR1cm4gci5zaXplPjA/cjpEaWN0LmVtcHR5fWNsb25lKCl7Y29uc3QgZT1uZXcgRGljdCh0aGlzLnhyZWYpO2Zvcihjb25zdCB0IG9mIHRoaXMuZ2V0S2V5cygpKWUuc2V0KHQsdGhpcy5nZXRSYXcodCkpO3JldHVybiBlfX10LkRpY3Q9RGljdDtjbGFzcyBSZWZ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLm51bT1lO3RoaXMuZ2VuPXR9dG9TdHJpbmcoKXtyZXR1cm4gMD09PXRoaXMuZ2VuP2Ake3RoaXMubnVtfVJgOmAke3RoaXMubnVtfVIke3RoaXMuZ2VufWB9c3RhdGljIGZyb21TdHJpbmcoZSl7Y29uc3QgdD1jW2VdO2lmKHQpcmV0dXJuIHQ7Y29uc3QgYT0vXihcZCspUihcZCopJC8uZXhlYyhlKTtyZXR1cm4gYSYmIjAiIT09YVsxXT9jW2VdPW5ldyBSZWYocGFyc2VJbnQoYVsxXSksYVsyXT9wYXJzZUludChhWzJdKTowKTpudWxsfXN0YXRpYyBnZXQoZSx0KXtjb25zdCBhPTA9PT10P2Ake2V9UmA6YCR7ZX1SJHt0fWA7cmV0dXJuIGNbYV18fD1uZXcgUmVmKGUsdCl9fXQuUmVmPVJlZjtjbGFzcyBSZWZTZXR7Y29uc3RydWN0b3IoZT1udWxsKXt0aGlzLl9zZXQ9bmV3IFNldChlPy5fc2V0KX1oYXMoZSl7cmV0dXJuIHRoaXMuX3NldC5oYXMoZS50b1N0cmluZygpKX1wdXQoZSl7dGhpcy5fc2V0LmFkZChlLnRvU3RyaW5nKCkpfXJlbW92ZShlKXt0aGlzLl9zZXQuZGVsZXRlKGUudG9TdHJpbmcoKSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5fc2V0LnZhbHVlcygpfWNsZWFyKCl7dGhpcy5fc2V0LmNsZWFyKCl9fXQuUmVmU2V0PVJlZlNldDtjbGFzcyBSZWZTZXRDYWNoZXtjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX21hcC5zaXplfWdldChlKXtyZXR1cm4gdGhpcy5fbWFwLmdldChlLnRvU3RyaW5nKCkpfWhhcyhlKXtyZXR1cm4gdGhpcy5fbWFwLmhhcyhlLnRvU3RyaW5nKCkpfXB1dChlLHQpe3RoaXMuX21hcC5zZXQoZS50b1N0cmluZygpLHQpfXB1dEFsaWFzKGUsdCl7dGhpcy5fbWFwLnNldChlLnRvU3RyaW5nKCksdGhpcy5nZXQodCkpfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuX21hcC52YWx1ZXMoKX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX10LlJlZlNldENhY2hlPVJlZlNldENhY2hlO2Z1bmN0aW9uIGlzTmFtZShlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgTmFtZSYmKHZvaWQgMD09PXR8fGUubmFtZT09PXQpfX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkJhc2VTdHJlYW09dm9pZCAwO3ZhciByPWEoMik7Y2xhc3MgQmFzZVN0cmVhbXtjb25zdHJ1Y3Rvcigpe3RoaXMuY29uc3RydWN0b3I9PT1CYXNlU3RyZWFtJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVN0cmVhbS4iKX1nZXQgbGVuZ3RoKCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IGdldHRlciBgbGVuZ3RoYCBhY2Nlc3NlZCIpfWdldCBpc0VtcHR5KCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IGdldHRlciBgaXNFbXB0eWAgYWNjZXNzZWQiKX1nZXQgaXNEYXRhTG9hZGVkKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImlzRGF0YUxvYWRlZCIsITApfWdldEJ5dGUoKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlYCBjYWxsZWQiKX1nZXRCeXRlcyhlKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlc2AgY2FsbGVkIil9cGVla0J5dGUoKXtjb25zdCBlPXRoaXMuZ2V0Qnl0ZSgpOy0xIT09ZSYmdGhpcy5wb3MtLTtyZXR1cm4gZX1wZWVrQnl0ZXMoZSl7Y29uc3QgdD10aGlzLmdldEJ5dGVzKGUpO3RoaXMucG9zLT10Lmxlbmd0aDtyZXR1cm4gdH1nZXRVaW50MTYoKXtjb25zdCBlPXRoaXMuZ2V0Qnl0ZSgpLHQ9dGhpcy5nZXRCeXRlKCk7cmV0dXJuLTE9PT1lfHwtMT09PXQ/LTE6KGU8PDgpK3R9Z2V0SW50MzIoKXtyZXR1cm4odGhpcy5nZXRCeXRlKCk8PDI0KSsodGhpcy5nZXRCeXRlKCk8PDE2KSsodGhpcy5nZXRCeXRlKCk8PDgpK3RoaXMuZ2V0Qnl0ZSgpfWdldEJ5dGVSYW5nZShlLHQpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVSYW5nZWAgY2FsbGVkIil9Z2V0U3RyaW5nKGUpe3JldHVybigwLHIuYnl0ZXNUb1N0cmluZykodGhpcy5nZXRCeXRlcyhlKSl9c2tpcChlKXt0aGlzLnBvcys9ZXx8MX1yZXNldCgpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHJlc2V0YCBjYWxsZWQiKX1tb3ZlU3RhcnQoKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBtb3ZlU3RhcnRgIGNhbGxlZCIpfW1ha2VTdWJTdHJlYW0oZSx0LGE9bnVsbCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbWFrZVN1YlN0cmVhbWAgY2FsbGVkIil9Z2V0QmFzZVN0cmVhbXMoKXtyZXR1cm4gbnVsbH19dC5CYXNlU3RyZWFtPUJhc2VTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5OZXR3b3JrUGRmTWFuYWdlcj10LkxvY2FsUGRmTWFuYWdlcj12b2lkIDA7dmFyIHI9YSgyKSxuPWEoNyksaT1hKDMpLHM9YSg5KSxvPWEoOCk7Y2xhc3MgQmFzZVBkZk1hbmFnZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VQZGZNYW5hZ2VyJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVBkZk1hbmFnZXIuIik7dGhpcy5fZG9jQmFzZVVybD1mdW5jdGlvbiBwYXJzZURvY0Jhc2VVcmwoZSl7aWYoZSl7Y29uc3QgdD0oMCxyLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGUpO2lmKHQpcmV0dXJuIHQuaHJlZjsoMCxyLndhcm4pKGBJbnZhbGlkIGFic29sdXRlIGRvY0Jhc2VVcmw6ICIke2V9Ii5gKX1yZXR1cm4gbnVsbH0oZS5kb2NCYXNlVXJsKTt0aGlzLl9kb2NJZD1lLmRvY0lkO3RoaXMuX3Bhc3N3b3JkPWUucGFzc3dvcmQ7dGhpcy5lbmFibGVYZmE9ZS5lbmFibGVYZmE7ZS5ldmFsdWF0b3JPcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkJiY9ci5GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDt0aGlzLmV2YWx1YXRvck9wdGlvbnM9ZS5ldmFsdWF0b3JPcHRpb25zfWdldCBkb2NJZCgpe3JldHVybiB0aGlzLl9kb2NJZH1nZXQgcGFzc3dvcmQoKXtyZXR1cm4gdGhpcy5fcGFzc3dvcmR9Z2V0IGRvY0Jhc2VVcmwoKXtyZXR1cm4gdGhpcy5fZG9jQmFzZVVybH1nZXQgY2F0YWxvZygpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmNhdGFsb2d9ZW5zdXJlRG9jKGUsdCl7cmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQsZSx0KX1lbnN1cmVYUmVmKGUsdCl7cmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQueHJlZixlLHQpfWVuc3VyZUNhdGFsb2coZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudC5jYXRhbG9nLGUsdCl9Z2V0UGFnZShlKXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5nZXRQYWdlKGUpfWZvbnRGYWxsYmFjayhlLHQpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmZvbnRGYWxsYmFjayhlLHQpfWxvYWRYZmFGb250cyhlLHQpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmxvYWRYZmFGb250cyhlLHQpfWxvYWRYZmFJbWFnZXMoKXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5sb2FkWGZhSW1hZ2VzKCl9c2VyaWFsaXplWGZhRGF0YShlKXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5zZXJpYWxpemVYZmFEYXRhKGUpfWNsZWFudXAoZT0hMSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuY2xlYW51cChlKX1hc3luYyBlbnN1cmUoZSx0LGEpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGVuc3VyZWAgY2FsbGVkIil9cmVxdWVzdFJhbmdlKGUsdCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgcmVxdWVzdFJhbmdlYCBjYWxsZWQiKX1yZXF1ZXN0TG9hZGVkU3RyZWFtKGU9ITEpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHJlcXVlc3RMb2FkZWRTdHJlYW1gIGNhbGxlZCIpfXNlbmRQcm9ncmVzc2l2ZURhdGEoZSl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgc2VuZFByb2dyZXNzaXZlRGF0YWAgY2FsbGVkIil9dXBkYXRlUGFzc3dvcmQoZSl7dGhpcy5fcGFzc3dvcmQ9ZX10ZXJtaW5hdGUoZSl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgdGVybWluYXRlYCBjYWxsZWQiKX19dC5Mb2NhbFBkZk1hbmFnZXI9Y2xhc3MgTG9jYWxQZGZNYW5hZ2VyIGV4dGVuZHMgQmFzZVBkZk1hbmFnZXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3QgdD1uZXcgby5TdHJlYW0oZS5zb3VyY2UpO3RoaXMucGRmRG9jdW1lbnQ9bmV3IHMuUERGRG9jdW1lbnQodGhpcyx0KTt0aGlzLl9sb2FkZWRTdHJlYW1Qcm9taXNlPVByb21pc2UucmVzb2x2ZSh0KX1hc3luYyBlbnN1cmUoZSx0LGEpe2NvbnN0IHI9ZVt0XTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KGUsYSk6cn1yZXF1ZXN0UmFuZ2UoZSx0KXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9cmVxdWVzdExvYWRlZFN0cmVhbShlPSExKXtyZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZX10ZXJtaW5hdGUoZSl7fX07dC5OZXR3b3JrUGRmTWFuYWdlcj1jbGFzcyBOZXR3b3JrUGRmTWFuYWdlciBleHRlbmRzIEJhc2VQZGZNYW5hZ2Vye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuc3RyZWFtTWFuYWdlcj1uZXcgbi5DaHVua2VkU3RyZWFtTWFuYWdlcihlLnNvdXJjZSx7bXNnSGFuZGxlcjplLmhhbmRsZXIsbGVuZ3RoOmUubGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6ZS5kaXNhYmxlQXV0b0ZldGNoLHJhbmdlQ2h1bmtTaXplOmUucmFuZ2VDaHVua1NpemV9KTt0aGlzLnBkZkRvY3VtZW50PW5ldyBzLlBERkRvY3VtZW50KHRoaXMsdGhpcy5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKX1hc3luYyBlbnN1cmUoZSx0LGEpe3RyeXtjb25zdCByPWVbdF07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseShlLGEpOnJ9Y2F0Y2gocil7aWYoIShyIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpdGhyb3cgcjthd2FpdCB0aGlzLnJlcXVlc3RSYW5nZShyLmJlZ2luLHIuZW5kKTtyZXR1cm4gdGhpcy5lbnN1cmUoZSx0LGEpfX1yZXF1ZXN0UmFuZ2UoZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfXJlcXVlc3RMb2FkZWRTdHJlYW0oZT0hMSl7cmV0dXJuIHRoaXMuc3RyZWFtTWFuYWdlci5yZXF1ZXN0QWxsQ2h1bmtzKGUpfXNlbmRQcm9ncmVzc2l2ZURhdGEoZSl7dGhpcy5zdHJlYW1NYW5hZ2VyLm9uUmVjZWl2ZURhdGEoe2NodW5rOmV9KX10ZXJtaW5hdGUoZSl7dGhpcy5zdHJlYW1NYW5hZ2VyLmFib3J0KGUpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5DaHVua2VkU3RyZWFtTWFuYWdlcj10LkNodW5rZWRTdHJlYW09dm9pZCAwO3ZhciByPWEoMyksbj1hKDIpLGk9YSg4KTtjbGFzcyBDaHVua2VkU3RyZWFtIGV4dGVuZHMgaS5TdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKG5ldyBVaW50OEFycmF5KGUpLDAsZSxudWxsKTt0aGlzLmNodW5rU2l6ZT10O3RoaXMuX2xvYWRlZENodW5rcz1uZXcgU2V0O3RoaXMubnVtQ2h1bmtzPU1hdGguY2VpbChlL3QpO3RoaXMubWFuYWdlcj1hO3RoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPTA7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz0tMX1nZXRNaXNzaW5nQ2h1bmtzKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxhPXRoaXMubnVtQ2h1bmtzO3Q8YTsrK3QpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KXx8ZS5wdXNoKHQpO3JldHVybiBlfWdldCBudW1DaHVua3NMb2FkZWQoKXtyZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLnNpemV9Z2V0IGlzRGF0YUxvYWRlZCgpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfW9uUmVjZWl2ZURhdGEoZSx0KXtjb25zdCBhPXRoaXMuY2h1bmtTaXplO2lmKGUlYSE9MCl0aHJvdyBuZXcgRXJyb3IoYEJhZCBiZWdpbiBvZmZzZXQ6ICR7ZX1gKTtjb25zdCByPWUrdC5ieXRlTGVuZ3RoO2lmKHIlYSE9MCYmciE9PXRoaXMuYnl0ZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgQmFkIGVuZCBvZmZzZXQ6ICR7cn1gKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheSh0KSxlKTtjb25zdCBuPU1hdGguZmxvb3IoZS9hKSxpPU1hdGguZmxvb3IoKHItMSkvYSkrMTtmb3IobGV0IGU9bjtlPGk7KytlKXRoaXMuX2xvYWRlZENodW5rcy5hZGQoZSl9b25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKGUpe2xldCB0PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoO2NvbnN0IGE9TWF0aC5mbG9vcih0L3RoaXMuY2h1bmtTaXplKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShlKSx0KTt0Kz1lLmJ5dGVMZW5ndGg7dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9dDtjb25zdCByPXQ+PXRoaXMuZW5kP3RoaXMubnVtQ2h1bmtzOk1hdGguZmxvb3IodC90aGlzLmNodW5rU2l6ZSk7Zm9yKGxldCBlPWE7ZTxyOysrZSl0aGlzLl9sb2FkZWRDaHVua3MuYWRkKGUpfWVuc3VyZUJ5dGUoZSl7aWYoZTx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aClyZXR1cm47Y29uc3QgdD1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKCEodD50aGlzLm51bUNodW5rcykmJnQhPT10aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKXtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KSl0aHJvdyBuZXcgci5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLGUrMSk7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz10fX1lbnN1cmVSYW5nZShlLHQpe2lmKGU+PXQpcmV0dXJuO2lmKHQ8PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKXJldHVybjtjb25zdCBhPU1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSk7aWYoYT50aGlzLm51bUNodW5rcylyZXR1cm47Y29uc3Qgbj1NYXRoLm1pbihNYXRoLmZsb29yKCh0LTEpL3RoaXMuY2h1bmtTaXplKSsxLHRoaXMubnVtQ2h1bmtzKTtmb3IobGV0IGk9YTtpPG47KytpKWlmKCF0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGkpKXRocm93IG5ldyByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKGUsdCl9bmV4dEVtcHR5Q2h1bmsoZSl7Y29uc3QgdD10aGlzLm51bUNodW5rcztmb3IobGV0IGE9MDthPHQ7KythKXtjb25zdCByPShlK2EpJXQ7aWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMocikpcmV0dXJuIHJ9cmV0dXJuIG51bGx9aGFzQ2h1bmsoZSl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5oYXMoZSl9Z2V0Qnl0ZSgpe2NvbnN0IGU9dGhpcy5wb3M7aWYoZT49dGhpcy5lbmQpcmV0dXJuLTE7ZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKTtyZXR1cm4gdGhpcy5ieXRlc1t0aGlzLnBvcysrXX1nZXRCeXRlcyhlKXtjb25zdCB0PXRoaXMuYnl0ZXMsYT10aGlzLnBvcyxyPXRoaXMuZW5kO2lmKCFlKXtyPnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGEscik7cmV0dXJuIHQuc3ViYXJyYXkoYSxyKX1sZXQgbj1hK2U7bj5yJiYobj1yKTtuPnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGEsbik7dGhpcy5wb3M9bjtyZXR1cm4gdC5zdWJhcnJheShhLG4pfWdldEJ5dGVSYW5nZShlLHQpe2U8MCYmKGU9MCk7dD50aGlzLmVuZCYmKHQ9dGhpcy5lbmQpO3Q+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UoZSx0KTtyZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfW1ha2VTdWJTdHJlYW0oZSx0LGE9bnVsbCl7dD9lK3Q+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UoZSxlK3QpOmU+PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZUJ5dGUoZSk7ZnVuY3Rpb24gQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbSgpe31DaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHRoaXMpO0NodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlLmdldE1pc3NpbmdDaHVua3M9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMuY2h1bmtTaXplLHQ9TWF0aC5mbG9vcih0aGlzLnN0YXJ0L2UpLGE9TWF0aC5mbG9vcigodGhpcy5lbmQtMSkvZSkrMSxyPVtdO2ZvcihsZXQgZT10O2U8YTsrK2UpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhlKXx8ci5wdXNoKGUpO3JldHVybiByfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbS5wcm90b3R5cGUsImlzRGF0YUxvYWRlZCIse2dldCgpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfHwwPT09dGhpcy5nZXRNaXNzaW5nQ2h1bmtzKCkubGVuZ3RofSxjb25maWd1cmFibGU6ITB9KTtjb25zdCByPW5ldyBDaHVua2VkU3RyZWFtU3Vic3RyZWFtO3IucG9zPXIuc3RhcnQ9ZTtyLmVuZD1lK3R8fHRoaXMuZW5kO3IuZGljdD1hO3JldHVybiByfWdldEJhc2VTdHJlYW1zKCl7cmV0dXJuW3RoaXNdfX10LkNodW5rZWRTdHJlYW09Q2h1bmtlZFN0cmVhbTt0LkNodW5rZWRTdHJlYW1NYW5hZ2VyPWNsYXNzIENodW5rZWRTdHJlYW1NYW5hZ2Vye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5sZW5ndGg9dC5sZW5ndGg7dGhpcy5jaHVua1NpemU9dC5yYW5nZUNodW5rU2l6ZTt0aGlzLnN0cmVhbT1uZXcgQ2h1bmtlZFN0cmVhbSh0aGlzLmxlbmd0aCx0aGlzLmNodW5rU2l6ZSx0aGlzKTt0aGlzLnBkZk5ldHdvcmtTdHJlYW09ZTt0aGlzLmRpc2FibGVBdXRvRmV0Y2g9dC5kaXNhYmxlQXV0b0ZldGNoO3RoaXMubXNnSGFuZGxlcj10Lm1zZ0hhbmRsZXI7dGhpcy5jdXJyUmVxdWVzdElkPTA7dGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0PW5ldyBNYXA7dGhpcy5fcmVxdWVzdHNCeUNodW5rPW5ldyBNYXA7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Q9bmV3IE1hcDt0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wO3RoaXMuYWJvcnRlZD0hMTt0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5PW5ldyBuLlByb21pc2VDYXBhYmlsaXR5fXNlbmRSZXF1ZXN0KGUsdCl7Y29uc3QgYT10aGlzLnBkZk5ldHdvcmtTdHJlYW0uZ2V0UmFuZ2VSZWFkZXIoZSx0KTthLmlzU3RyZWFtaW5nU3VwcG9ydGVkfHwoYS5vblByb2dyZXNzPXRoaXMub25Qcm9ncmVzcy5iaW5kKHRoaXMpKTtsZXQgbj1bXSxpPTA7cmV0dXJuIG5ldyBQcm9taXNlKCgoZSx0KT0+e2NvbnN0IHJlYWRDaHVuaz0oe3ZhbHVlOnMsZG9uZTpvfSk9Pnt0cnl7aWYobyl7Y29uc3QgdD0oMCxyLmFycmF5QnVmZmVyc1RvQnl0ZXMpKG4pO249bnVsbDtlKHQpO3JldHVybn1pKz1zLmJ5dGVMZW5ndGg7YS5pc1N0cmVhbWluZ1N1cHBvcnRlZCYmdGhpcy5vblByb2dyZXNzKHtsb2FkZWQ6aX0pO24ucHVzaChzKTthLnJlYWQoKS50aGVuKHJlYWRDaHVuayx0KX1jYXRjaChlKXt0KGUpfX07YS5yZWFkKCkudGhlbihyZWFkQ2h1bmssdCl9KSkudGhlbigodD0+e3RoaXMuYWJvcnRlZHx8dGhpcy5vblJlY2VpdmVEYXRhKHtjaHVuazp0LGJlZ2luOmV9KX0pKX1yZXF1ZXN0QWxsQ2h1bmtzKGU9ITEpe2lmKCFlKXtjb25zdCBlPXRoaXMuc3RyZWFtLmdldE1pc3NpbmdDaHVua3MoKTt0aGlzLl9yZXF1ZXN0Q2h1bmtzKGUpfXJldHVybiB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnByb21pc2V9X3JlcXVlc3RDaHVua3MoZSl7Y29uc3QgdD10aGlzLmN1cnJSZXF1ZXN0SWQrKyxhPW5ldyBTZXQ7dGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0LnNldCh0LGEpO2Zvcihjb25zdCB0IG9mIGUpdGhpcy5zdHJlYW0uaGFzQ2h1bmsodCl8fGEuYWRkKHQpO2lmKDA9PT1hLnNpemUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2NvbnN0IHI9bmV3IG4uUHJvbWlzZUNhcGFiaWxpdHk7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Quc2V0KHQscik7Y29uc3QgaT1bXTtmb3IoY29uc3QgZSBvZiBhKXtsZXQgYT10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGUpO2lmKCFhKXthPVtdO3RoaXMuX3JlcXVlc3RzQnlDaHVuay5zZXQoZSxhKTtpLnB1c2goZSl9YS5wdXNoKHQpfWlmKGkubGVuZ3RoPjApe2NvbnN0IGU9dGhpcy5ncm91cENodW5rcyhpKTtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPXQuYmVnaW5DaHVuayp0aGlzLmNodW5rU2l6ZSxhPU1hdGgubWluKHQuZW5kQ2h1bmsqdGhpcy5jaHVua1NpemUsdGhpcy5sZW5ndGgpO3RoaXMuc2VuZFJlcXVlc3QoZSxhKS5jYXRjaChyLnJlamVjdCl9fXJldHVybiByLnByb21pc2UuY2F0Y2goKGU9PntpZighdGhpcy5hYm9ydGVkKXRocm93IGV9KSl9Z2V0U3RyZWFtKCl7cmV0dXJuIHRoaXMuc3RyZWFtfXJlcXVlc3RSYW5nZShlLHQpe3Q9TWF0aC5taW4odCx0aGlzLmxlbmd0aCk7Y29uc3QgYT10aGlzLmdldEJlZ2luQ2h1bmsoZSkscj10aGlzLmdldEVuZENodW5rKHQpLG49W107Zm9yKGxldCBlPWE7ZTxyOysrZSluLnB1c2goZSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3Mobil9cmVxdWVzdFJhbmdlcyhlPVtdKXtjb25zdCB0PVtdO2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGU9dGhpcy5nZXRCZWdpbkNodW5rKGEuYmVnaW4pLHI9dGhpcy5nZXRFbmRDaHVuayhhLmVuZCk7Zm9yKGxldCBhPWU7YTxyOysrYSl0LmluY2x1ZGVzKGEpfHx0LnB1c2goYSl9dC5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3ModCl9Z3JvdXBDaHVua3MoZSl7Y29uc3QgdD1bXTtsZXQgYT0tMSxyPS0xO2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbil7Y29uc3QgaT1lW25dO2E8MCYmKGE9aSk7aWYocj49MCYmcisxIT09aSl7dC5wdXNoKHtiZWdpbkNodW5rOmEsZW5kQ2h1bms6cisxfSk7YT1pfW4rMT09PWUubGVuZ3RoJiZ0LnB1c2goe2JlZ2luQ2h1bms6YSxlbmRDaHVuazppKzF9KTtyPWl9cmV0dXJuIHR9b25Qcm9ncmVzcyhlKXt0aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKnRoaXMuY2h1bmtTaXplK2UubG9hZGVkLHRvdGFsOnRoaXMubGVuZ3RofSl9b25SZWNlaXZlRGF0YShlKXtjb25zdCB0PWUuY2h1bmssYT12b2lkIDA9PT1lLmJlZ2luLHI9YT90aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aDplLmJlZ2luLG49cit0LmJ5dGVMZW5ndGgsaT1NYXRoLmZsb29yKHIvdGhpcy5jaHVua1NpemUpLHM9bjx0aGlzLmxlbmd0aD9NYXRoLmZsb29yKG4vdGhpcy5jaHVua1NpemUpOk1hdGguY2VpbChuL3RoaXMuY2h1bmtTaXplKTtpZihhKXt0aGlzLnN0cmVhbS5vblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEodCk7dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9bn1lbHNlIHRoaXMuc3RyZWFtLm9uUmVjZWl2ZURhdGEocix0KTt0aGlzLnN0cmVhbS5pc0RhdGFMb2FkZWQmJnRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnN0cmVhbSk7Y29uc3Qgbz1bXTtmb3IobGV0IGU9aTtlPHM7KytlKXtjb25zdCB0PXRoaXMuX3JlcXVlc3RzQnlDaHVuay5nZXQoZSk7aWYodCl7dGhpcy5fcmVxdWVzdHNCeUNodW5rLmRlbGV0ZShlKTtmb3IoY29uc3QgYSBvZiB0KXtjb25zdCB0PXRoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5nZXQoYSk7dC5oYXMoZSkmJnQuZGVsZXRlKGUpO3Quc2l6ZT4wfHxvLnB1c2goYSl9fX1pZighdGhpcy5kaXNhYmxlQXV0b0ZldGNoJiYwPT09dGhpcy5fcmVxdWVzdHNCeUNodW5rLnNpemUpe2xldCBlO2lmKDE9PT10aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQpe2NvbnN0IHQ9dGhpcy5zdHJlYW0ubnVtQ2h1bmtzLTE7dGhpcy5zdHJlYW0uaGFzQ2h1bmsodCl8fChlPXQpfWVsc2UgZT10aGlzLnN0cmVhbS5uZXh0RW1wdHlDaHVuayhzKTtOdW1iZXIuaXNJbnRlZ2VyKGUpJiZ0aGlzLl9yZXF1ZXN0Q2h1bmtzKFtlXSl9Zm9yKGNvbnN0IGUgb2Ygbyl7Y29uc3QgdD10aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5nZXQoZSk7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZGVsZXRlKGUpO3QucmVzb2x2ZSgpfXRoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUsdG90YWw6dGhpcy5sZW5ndGh9KX1vbkVycm9yKGUpe3RoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGUpfWdldEJlZ2luQ2h1bmsoZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSl9Z2V0RW5kQ2h1bmsoZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUtMSkvdGhpcy5jaHVua1NpemUpKzF9YWJvcnQoZSl7dGhpcy5hYm9ydGVkPSEwO3RoaXMucGRmTmV0d29ya1N0cmVhbT8uY2FuY2VsQWxsUmVxdWVzdHMoZSk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QudmFsdWVzKCkpdC5yZWplY3QoZSl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlN0cmluZ1N0cmVhbT10LlN0cmVhbT10Lk51bGxTdHJlYW09dm9pZCAwO3ZhciByPWEoNSksbj1hKDIpO2NsYXNzIFN0cmVhbSBleHRlbmRzIHIuQmFzZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSxyKXtzdXBlcigpO3RoaXMuYnl0ZXM9ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/ZTpuZXcgVWludDhBcnJheShlKTt0aGlzLnN0YXJ0PXR8fDA7dGhpcy5wb3M9dGhpcy5zdGFydDt0aGlzLmVuZD10K2F8fHRoaXMuYnl0ZXMubGVuZ3RoO3RoaXMuZGljdD1yfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbmQtdGhpcy5zdGFydH1nZXQgaXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5sZW5ndGh9Z2V0Qnl0ZSgpe3JldHVybiB0aGlzLnBvcz49dGhpcy5lbmQ/LTE6dGhpcy5ieXRlc1t0aGlzLnBvcysrXX1nZXRCeXRlcyhlKXtjb25zdCB0PXRoaXMuYnl0ZXMsYT10aGlzLnBvcyxyPXRoaXMuZW5kO2lmKCFlKXJldHVybiB0LnN1YmFycmF5KGEscik7bGV0IG49YStlO24+ciYmKG49cik7dGhpcy5wb3M9bjtyZXR1cm4gdC5zdWJhcnJheShhLG4pfWdldEJ5dGVSYW5nZShlLHQpe2U8MCYmKGU9MCk7dD50aGlzLmVuZCYmKHQ9dGhpcy5lbmQpO3JldHVybiB0aGlzLmJ5dGVzLnN1YmFycmF5KGUsdCl9cmVzZXQoKXt0aGlzLnBvcz10aGlzLnN0YXJ0fW1vdmVTdGFydCgpe3RoaXMuc3RhcnQ9dGhpcy5wb3N9bWFrZVN1YlN0cmVhbShlLHQsYT1udWxsKXtyZXR1cm4gbmV3IFN0cmVhbSh0aGlzLmJ5dGVzLmJ1ZmZlcixlLHQsYSl9fXQuU3RyZWFtPVN0cmVhbTt0LlN0cmluZ1N0cmVhbT1jbGFzcyBTdHJpbmdTdHJlYW0gZXh0ZW5kcyBTdHJlYW17Y29uc3RydWN0b3IoZSl7c3VwZXIoKDAsbi5zdHJpbmdUb0J5dGVzKShlKSl9fTt0Lk51bGxTdHJlYW09Y2xhc3MgTnVsbFN0cmVhbSBleHRlbmRzIFN0cmVhbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBVaW50OEFycmF5KDApKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUGFnZT10LlBERkRvY3VtZW50PXZvaWQgMDt2YXIgcj1hKDIpLG49YSgxMCksaT1hKDMpLHM9YSg0KSxvPWEoNTEpLGM9YSg1KSxsPWEoNzQpLGg9YSg2NiksdT1hKDY4KSxkPWEoMTAyKSxmPWEoMTYpLGc9YSg4KSxwPWEoNzYpLG09YSg2NCksYj1hKDEzKSx5PWEoMTgpLHc9YSg3MiksUz1hKDczKSx4PWEoNzcpLEM9YSgxMDMpO2NvbnN0IGs9WzAsMCw2MTIsNzkyXTtjbGFzcyBQYWdle2NvbnN0cnVjdG9yKHtwZGZNYW5hZ2VyOmUseHJlZjp0LHBhZ2VJbmRleDphLHBhZ2VEaWN0OnIscmVmOm4sZ2xvYmFsSWRGYWN0b3J5OmksZm9udENhY2hlOnMsYnVpbHRJbkNNYXBDYWNoZTpvLHN0YW5kYXJkRm9udERhdGFDYWNoZTpjLGdsb2JhbEltYWdlQ2FjaGU6bCxzeXN0ZW1Gb250Q2FjaGU6aCxub25CbGVuZE1vZGVzU2V0OnUseGZhRmFjdG9yeTpkfSl7dGhpcy5wZGZNYW5hZ2VyPWU7dGhpcy5wYWdlSW5kZXg9YTt0aGlzLnBhZ2VEaWN0PXI7dGhpcy54cmVmPXQ7dGhpcy5yZWY9bjt0aGlzLmZvbnRDYWNoZT1zO3RoaXMuYnVpbHRJbkNNYXBDYWNoZT1vO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPWM7dGhpcy5nbG9iYWxJbWFnZUNhY2hlPWw7dGhpcy5zeXN0ZW1Gb250Q2FjaGU9aDt0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9dTt0aGlzLmV2YWx1YXRvck9wdGlvbnM9ZS5ldmFsdWF0b3JPcHRpb25zO3RoaXMucmVzb3VyY2VzUHJvbWlzZT1udWxsO3RoaXMueGZhRmFjdG9yeT1kO2NvbnN0IGY9e29iajowfTt0aGlzLl9sb2NhbElkRmFjdG9yeT1jbGFzcyBleHRlbmRzIGl7c3RhdGljIGNyZWF0ZU9iaklkKCl7cmV0dXJuYHAke2F9XyR7KytmLm9ian1gfXN0YXRpYyBnZXRQYWdlT2JqSWQoKXtyZXR1cm5gcCR7bi50b1N0cmluZygpfWB9fX1fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eShlLHQ9ITEpe2NvbnN0IGE9KDAsaS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0aGlzLnBhZ2VEaWN0LGtleTplLGdldEFycmF5OnQsc3RvcFdoZW5Gb3VuZDohMX0pO3JldHVybiBBcnJheS5pc0FycmF5KGEpPzEhPT1hLmxlbmd0aCYmYVswXWluc3RhbmNlb2Ygcy5EaWN0P3MuRGljdC5tZXJnZSh7eHJlZjp0aGlzLnhyZWYsZGljdEFycmF5OmF9KTphWzBdOmF9Z2V0IGNvbnRlbnQoKXtyZXR1cm4gdGhpcy5wYWdlRGljdC5nZXRBcnJheSgiQ29udGVudHMiKX1nZXQgcmVzb3VyY2VzKCl7Y29uc3QgZT10aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJSZXNvdXJjZXMiKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywicmVzb3VyY2VzIixlIGluc3RhbmNlb2Ygcy5EaWN0P2U6cy5EaWN0LmVtcHR5KX1fZ2V0Qm91bmRpbmdCb3goZSl7aWYodGhpcy54ZmFEYXRhKXJldHVybiB0aGlzLnhmYURhdGEuYmJveDtsZXQgdD10aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KGUsITApO2lmKEFycmF5LmlzQXJyYXkodCkmJjQ9PT10Lmxlbmd0aCl7dD1yLlV0aWwubm9ybWFsaXplUmVjdCh0KTtpZih0WzJdLXRbMF0+MCYmdFszXS10WzFdPjApcmV0dXJuIHQ7KDAsci53YXJuKShgRW1wdHksIG9yIGludmFsaWQsIC8ke2V9IGVudHJ5LmApfXJldHVybiBudWxsfWdldCBtZWRpYUJveCgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJtZWRpYUJveCIsdGhpcy5fZ2V0Qm91bmRpbmdCb3goIk1lZGlhQm94Iil8fGspfWdldCBjcm9wQm94KCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImNyb3BCb3giLHRoaXMuX2dldEJvdW5kaW5nQm94KCJDcm9wQm94Iil8fHRoaXMubWVkaWFCb3gpfWdldCB1c2VyVW5pdCgpe2xldCBlPXRoaXMucGFnZURpY3QuZ2V0KCJVc2VyVW5pdCIpOygibnVtYmVyIiE9dHlwZW9mIGV8fGU8PTApJiYoZT0xKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywidXNlclVuaXQiLGUpfWdldCB2aWV3KCl7Y29uc3R7Y3JvcEJveDplLG1lZGlhQm94OnR9PXRoaXM7aWYoZSE9PXQmJiEoMCxyLmlzQXJyYXlFcXVhbCkoZSx0KSl7Y29uc3QgYT1yLlV0aWwuaW50ZXJzZWN0KGUsdCk7aWYoYSYmYVsyXS1hWzBdPjAmJmFbM10tYVsxXT4wKXJldHVybigwLHIuc2hhZG93KSh0aGlzLCJ2aWV3IixhKTsoMCxyLndhcm4pKCJFbXB0eSAvQ3JvcEJveCBhbmQgL01lZGlhQm94IGludGVyc2VjdGlvbi4iKX1yZXR1cm4oMCxyLnNoYWRvdykodGhpcywidmlldyIsdCl9Z2V0IHJvdGF0ZSgpe2xldCBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJvdGF0ZSIpfHwwO2UlOTAhPTA/ZT0wOmU+PTM2MD9lJT0zNjA6ZTwwJiYoZT0oZSUzNjArMzYwKSUzNjApO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJyb3RhdGUiLGUpfV9vblN1YlN0cmVhbUVycm9yKGUsdCl7aWYoIXRoaXMuZXZhbHVhdG9yT3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxyLndhcm4pKGBnZXRDb250ZW50U3RyZWFtIC0gaWdub3Jpbmcgc3ViLXN0cmVhbSAoJHt0fSk6ICIke2V9Ii5gKX1nZXRDb250ZW50U3RyZWFtKCl7cmV0dXJuIHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywiY29udGVudCIpLnRoZW4oKGU9PmUgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0/ZTpBcnJheS5pc0FycmF5KGUpP25ldyB5LlN0cmVhbXNTZXF1ZW5jZVN0cmVhbShlLHRoaXMuX29uU3ViU3RyZWFtRXJyb3IuYmluZCh0aGlzKSk6bmV3IGcuTnVsbFN0cmVhbSkpfWdldCB4ZmFEYXRhKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInhmYURhdGEiLHRoaXMueGZhRmFjdG9yeT97YmJveDp0aGlzLnhmYUZhY3RvcnkuZ2V0Qm91bmRpbmdCb3godGhpcy5wYWdlSW5kZXgpfTpudWxsKX0jdChlLHQsYSl7Zm9yKGNvbnN0IG4gb2YgZSlpZihuLmlkKXtjb25zdCBlPXMuUmVmLmZyb21TdHJpbmcobi5pZCk7aWYoIWUpeygwLHIud2FybikoYEEgbm9uLWxpbmtlZCBhbm5vdGF0aW9uIGNhbm5vdCBiZSBtb2RpZmllZDogJHtuLmlkfWApO2NvbnRpbnVlfWlmKG4uZGVsZXRlZCl7dC5wdXQoZSk7Y29udGludWV9YT8ucHV0KGUpO24ucmVmPWU7ZGVsZXRlIG4uaWR9fWFzeW5jIHNhdmVOZXdBbm5vdGF0aW9ucyhlLHQsYSxyKXtpZih0aGlzLnhmYUZhY3RvcnkpdGhyb3cgbmV3IEVycm9yKCJYRkE6IENhbm5vdCBzYXZlIG5ldyBhbm5vdGF0aW9ucy4iKTtjb25zdCBpPW5ldyBiLlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6ZSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsc3lzdGVtRm9udENhY2hlOnRoaXMuc3lzdGVtRm9udENhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSksbz1uZXcgcy5SZWZTZXQsYz1uZXcgcy5SZWZTZXQ7dGhpcy4jdChhLG8sYyk7Y29uc3QgbD10aGlzLnBhZ2VEaWN0LGg9dGhpcy5hbm5vdGF0aW9ucy5maWx0ZXIoKGU9PiEoZSBpbnN0YW5jZW9mIHMuUmVmJiZvLmhhcyhlKSkpKSx1PWF3YWl0IG4uQW5ub3RhdGlvbkZhY3Rvcnkuc2F2ZU5ld0Fubm90YXRpb25zKGksdCxhLHIpO2Zvcihjb25zdHtyZWY6ZX1vZiB1LmFubm90YXRpb25zKWUgaW5zdGFuY2VvZiBzLlJlZiYmIWMuaGFzKGUpJiZoLnB1c2goZSk7Y29uc3QgZD1sLmdldCgiQW5ub3RzIik7bC5zZXQoIkFubm90cyIsaCk7Y29uc3QgZj1bXTthd2FpdCgwLFMud3JpdGVPYmplY3QpKHRoaXMucmVmLGwsZix0aGlzLnhyZWYpO2QmJmwuc2V0KCJBbm5vdHMiLGQpO2NvbnN0IGc9dS5kZXBlbmRlbmNpZXM7Zy5wdXNoKHtyZWY6dGhpcy5yZWYsZGF0YTpmLmpvaW4oIiIpfSwuLi51LmFubm90YXRpb25zKTtyZXR1cm4gZ31zYXZlKGUsdCxhKXtjb25zdCBuPW5ldyBiLlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6ZSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsc3lzdGVtRm9udENhY2hlOnRoaXMuc3lzdGVtRm9udENhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSk7cmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oKGZ1bmN0aW9uKGUpe2NvbnN0IGk9W107Zm9yKGNvbnN0IHMgb2YgZSlzLm11c3RCZVByaW50ZWQoYSkmJmkucHVzaChzLnNhdmUobix0LGEpLmNhdGNoKChmdW5jdGlvbihlKXsoMCxyLndhcm4pKGBzYXZlIC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyAiJHt0Lm5hbWV9IiB0YXNrOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpO3JldHVybiBQcm9taXNlLmFsbChpKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIoKGU9PiEhZSkpfSkpfSkpfWxvYWRSZXNvdXJjZXMoZSl7dGhpcy5yZXNvdXJjZXNQcm9taXNlfHwodGhpcy5yZXNvdXJjZXNQcm9taXNlPXRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywicmVzb3VyY2VzIikpO3JldHVybiB0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbigoKCk9Pm5ldyBwLk9iamVjdExvYWRlcih0aGlzLnJlc291cmNlcyxlLHRoaXMueHJlZikubG9hZCgpKSl9Z2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOmUsc2luazp0LHRhc2s6YSxpbnRlbnQ6byxjYWNoZUtleTpjLGFubm90YXRpb25TdG9yYWdlOmw9bnVsbH0pe2NvbnN0IGg9dGhpcy5nZXRDb250ZW50U3RyZWFtKCksdT10aGlzLmxvYWRSZXNvdXJjZXMoWyJDb2xvclNwYWNlIiwiRXh0R1N0YXRlIiwiRm9udCIsIlBhdHRlcm4iLCJQcm9wZXJ0aWVzIiwiU2hhZGluZyIsIlhPYmplY3QiXSksZD1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0aGlzLnN5c3RlbUZvbnRDYWNoZSxvcHRpb25zOnRoaXMuZXZhbHVhdG9yT3B0aW9uc30pLGY9dGhpcy54ZmFGYWN0b3J5P251bGw6KDAsaS5nZXROZXdBbm5vdGF0aW9uc01hcCkobCk7bGV0IGc9bnVsbCxwPVByb21pc2UucmVzb2x2ZShudWxsKTtpZihmKXtjb25zdCBlPWYuZ2V0KHRoaXMucGFnZUluZGV4KTtpZihlKXtjb25zdCB0PXRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoImFubm90YXRpb25HbG9iYWxzIik7bGV0IGk7Y29uc3Qgbz1uZXcgU2V0O2Zvcihjb25zdHtiaXRtYXBJZDp0LGJpdG1hcDphfW9mIGUpIXR8fGF8fG8uaGFzKHQpfHxvLmFkZCh0KTtjb25zdHtpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpjfT10aGlzLmV2YWx1YXRvck9wdGlvbnM7aWYoby5zaXplPjApe2NvbnN0IHQ9ZS5zbGljZSgpO2Zvcihjb25zdFtlLGFdb2YgbCllLnN0YXJ0c1dpdGgoci5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4KSYmYS5iaXRtYXAmJm8uaGFzKGEuYml0bWFwSWQpJiZ0LnB1c2goYSk7aT1uLkFubm90YXRpb25GYWN0b3J5LmdlbmVyYXRlSW1hZ2VzKHQsdGhpcy54cmVmLGMpfWVsc2UgaT1uLkFubm90YXRpb25GYWN0b3J5LmdlbmVyYXRlSW1hZ2VzKGUsdGhpcy54cmVmLGMpO2c9bmV3IHMuUmVmU2V0O3RoaXMuI3QoZSxnLG51bGwpO3A9dC50aGVuKCh0PT50P24uQW5ub3RhdGlvbkZhY3RvcnkucHJpbnROZXdBbm5vdGF0aW9ucyh0LGQsYSxlLGkpOm51bGwpKX19Y29uc3QgeT1Qcm9taXNlLmFsbChbaCx1XSkudGhlbigoKFtyXSk9Pntjb25zdCBuPW5ldyBtLk9wZXJhdG9yTGlzdChvLHQpO2Uuc2VuZCgiU3RhcnRSZW5kZXJQYWdlIix7dHJhbnNwYXJlbmN5OmQuaGFzQmxlbmRNb2Rlcyh0aGlzLnJlc291cmNlcyx0aGlzLm5vbkJsZW5kTW9kZXNTZXQpLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxjYWNoZUtleTpjfSk7cmV0dXJuIGQuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06cix0YXNrOmEscmVzb3VyY2VzOnRoaXMucmVzb3VyY2VzLG9wZXJhdG9yTGlzdDpufSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKX0pKTtyZXR1cm4gUHJvbWlzZS5hbGwoW3ksdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMscF0pLnRoZW4oKGZ1bmN0aW9uKFtlLHQsbl0pe2lmKG4pe3Q9dC5maWx0ZXIoKGU9PiEoZS5yZWYmJmcuaGFzKGUucmVmKSkpKTtmb3IobGV0IGU9MCxhPW4ubGVuZ3RoO2U8YTtlKyspe2NvbnN0IHI9bltlXTtpZihyLnJlZlRvUmVwbGFjZSl7Y29uc3QgaT10LmZpbmRJbmRleCgoZT0+ZS5yZWYmJigwLHMuaXNSZWZzRXF1YWwpKGUucmVmLHIucmVmVG9SZXBsYWNlKSkpO2lmKGk+PTApe3Quc3BsaWNlKGksMSxyKTtuLnNwbGljZShlLS0sMSk7YS0tfX19dD10LmNvbmNhdChuKX1pZigwPT09dC5sZW5ndGh8fG8mci5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOTk9UQVRJT05TX0RJU0FCTEUpe2UuZmx1c2goITApO3JldHVybntsZW5ndGg6ZS50b3RhbExlbmd0aH19Y29uc3QgaT0hIShvJnIuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19GT1JNUyksYz0hIShvJnIuUmVuZGVyaW5nSW50ZW50RmxhZy5BTlkpLGg9ISEobyZyLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSksdT0hIShvJnIuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCksZj1bXTtmb3IoY29uc3QgZSBvZiB0KShjfHxoJiZlLm11c3RCZVZpZXdlZChsLGkpfHx1JiZlLm11c3RCZVByaW50ZWQobCkpJiZmLnB1c2goZS5nZXRPcGVyYXRvckxpc3QoZCxhLG8saSxsKS5jYXRjaCgoZnVuY3Rpb24oZSl7KDAsci53YXJuKShgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyAiJHthLm5hbWV9IiB0YXNrOiAiJHtlfSIuYCk7cmV0dXJue29wTGlzdDpudWxsLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX19KSkpO3JldHVybiBQcm9taXNlLmFsbChmKS50aGVuKChmdW5jdGlvbih0KXtsZXQgYT0hMSxyPSExO2Zvcihjb25zdHtvcExpc3Q6bixzZXBhcmF0ZUZvcm06aSxzZXBhcmF0ZUNhbnZhczpzfW9mIHQpe2UuYWRkT3BMaXN0KG4pO2F8fD1pO3J8fD1zfWUuZmx1c2goITAse2Zvcm06YSxjYW52YXM6cn0pO3JldHVybntsZW5ndGg6ZS50b3RhbExlbmd0aH19KSl9KSl9ZXh0cmFjdFRleHRDb250ZW50KHtoYW5kbGVyOmUsdGFzazp0LGluY2x1ZGVNYXJrZWRDb250ZW50OmEsZGlzYWJsZU5vcm1hbGl6YXRpb246cixzaW5rOm59KXtjb25zdCBpPXRoaXMuZ2V0Q29udGVudFN0cmVhbSgpLHM9dGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiRm9udCIsIlByb3BlcnRpZXMiLCJYT2JqZWN0Il0pO3JldHVybiBQcm9taXNlLmFsbChbaSxzXSkudGhlbigoKFtpXSk9Pm5ldyBiLlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6ZSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsc3lzdGVtRm9udENhY2hlOnRoaXMuc3lzdGVtRm9udENhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSkuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTppLHRhc2s6dCxyZXNvdXJjZXM6dGhpcy5yZXNvdXJjZXMsaW5jbHVkZU1hcmtlZENvbnRlbnQ6YSxkaXNhYmxlTm9ybWFsaXphdGlvbjpyLHNpbms6bix2aWV3Qm94OnRoaXMudmlld30pKSl9YXN5bmMgZ2V0U3RydWN0VHJlZSgpe2NvbnN0IGU9YXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInN0cnVjdFRyZWVSb290Iik7aWYoIWUpcmV0dXJuIG51bGw7YXdhaXQgdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnM7cmV0dXJuKGF3YWl0IHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywiX3BhcnNlU3RydWN0VHJlZSIsW2VdKSkuc2VyaWFsaXphYmxlfV9wYXJzZVN0cnVjdFRyZWUoZSl7Y29uc3QgdD1uZXcgdy5TdHJ1Y3RUcmVlUGFnZShlLHRoaXMucGFnZURpY3QpO3QucGFyc2UodGhpcy5yZWYpO3JldHVybiB0fWFzeW5jIGdldEFubm90YXRpb25zRGF0YShlLHQsYSl7Y29uc3Qgbj1hd2FpdCB0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucztpZigwPT09bi5sZW5ndGgpcmV0dXJuIG47Y29uc3QgaT1bXSxzPVtdO2xldCBvO2NvbnN0IGM9ISEoYSZyLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxsPSEhKGEmci5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLGg9ISEoYSZyLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpO2Zvcihjb25zdCBhIG9mIG4pe2NvbnN0IG49Y3x8bCYmYS52aWV3YWJsZTsobnx8aCYmYS5wcmludGFibGUpJiZpLnB1c2goYS5kYXRhKTtpZihhLmhhc1RleHRDb250ZW50JiZuKXtvfHw9bmV3IGIuUGFydGlhbEV2YWx1YXRvcih7eHJlZjp0aGlzLnhyZWYsaGFuZGxlcjplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxpZEZhY3Rvcnk6dGhpcy5fbG9jYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dGhpcy5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6dGhpcy5zeXN0ZW1Gb250Q2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KTtzLnB1c2goYS5leHRyYWN0VGV4dENvbnRlbnQobyx0LFstMS8wLC0xLzAsMS8wLDEvMF0pLmNhdGNoKChmdW5jdGlvbihlKXsoMCxyLndhcm4pKGBnZXRBbm5vdGF0aW9uc0RhdGEgLSBpZ25vcmluZyB0ZXh0Q29udGVudCBkdXJpbmcgIiR7dC5uYW1lfSIgdGFzazogIiR7ZX0iLmApfSkpKX19YXdhaXQgUHJvbWlzZS5hbGwocyk7cmV0dXJuIGl9Z2V0IGFubm90YXRpb25zKCl7Y29uc3QgZT10aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJBbm5vdHMiKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiYW5ub3RhdGlvbnMiLEFycmF5LmlzQXJyYXkoZSk/ZTpbXSl9Z2V0IF9wYXJzZWRBbm5vdGF0aW9ucygpe2NvbnN0IGU9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJhbm5vdGF0aW9ucyIpLnRoZW4oKGFzeW5jIGU9PntpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGU7Y29uc3QgdD1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJhbm5vdGF0aW9uR2xvYmFscyIpO2lmKCF0KXJldHVybltdO2NvbnN0IGE9W107Zm9yKGNvbnN0IGkgb2YgZSlhLnB1c2gobi5Bbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUodGhpcy54cmVmLGksdCx0aGlzLl9sb2NhbElkRmFjdG9yeSwhMSx0aGlzLnJlZikuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLHIud2FybikoYF9wYXJzZWRBbm5vdGF0aW9uczogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpKTtjb25zdCBpPVtdO2xldCBzO2Zvcihjb25zdCBlIG9mIGF3YWl0IFByb21pc2UuYWxsKGEpKWUmJihlIGluc3RhbmNlb2Ygbi5Qb3B1cEFubm90YXRpb24/KHN8fD1bXSkucHVzaChlKTppLnB1c2goZSkpO3MmJmkucHVzaCguLi5zKTtyZXR1cm4gaX0pKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiX3BhcnNlZEFubm90YXRpb25zIixlKX1nZXQganNBY3Rpb25zKCl7Y29uc3QgZT0oMCxpLmNvbGxlY3RBY3Rpb25zKSh0aGlzLnhyZWYsdGhpcy5wYWdlRGljdCxyLlBhZ2VBY3Rpb25FdmVudFR5cGUpO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJqc0FjdGlvbnMiLGUpfX10LlBhZ2U9UGFnZTtjb25zdCB2PW5ldyBVaW50OEFycmF5KFszNyw4MCw2OCw3MCw0NV0pLEY9bmV3IFVpbnQ4QXJyYXkoWzExNSwxMTYsOTcsMTE0LDExNiwxMjAsMTE0LDEwMSwxMDJdKSxPPW5ldyBVaW50OEFycmF5KFsxMDEsMTEwLDEwMCwxMTEsOTgsMTA2XSk7ZnVuY3Rpb24gZmluZChlLHQsYT0xMDI0LHI9ITEpe2NvbnN0IG49dC5sZW5ndGgsaT1lLnBlZWtCeXRlcyhhKSxzPWkubGVuZ3RoLW47aWYoczw9MClyZXR1cm4hMTtpZihyKXtjb25zdCBhPW4tMTtsZXQgcj1pLmxlbmd0aC0xO2Zvcig7cj49YTspe2xldCBzPTA7Zm9yKDtzPG4mJmlbci1zXT09PXRbYS1zXTspcysrO2lmKHM+PW4pe2UucG9zKz1yLWE7cmV0dXJuITB9ci0tfX1lbHNle2xldCBhPTA7Zm9yKDthPD1zOyl7bGV0IHI9MDtmb3IoO3I8biYmaVthK3JdPT09dFtyXTspcisrO2lmKHI+PW4pe2UucG9zKz1hO3JldHVybiEwfWErK319cmV0dXJuITF9dC5QREZEb2N1bWVudD1jbGFzcyBQREZEb2N1bWVudHtjb25zdHJ1Y3RvcihlLHQpe2lmKHQubGVuZ3RoPD0wKXRocm93IG5ldyByLkludmFsaWRQREZFeGNlcHRpb24oIlRoZSBQREYgZmlsZSBpcyBlbXB0eSwgaS5lLiBpdHMgc2l6ZSBpcyB6ZXJvIGJ5dGVzLiIpO3RoaXMucGRmTWFuYWdlcj1lO3RoaXMuc3RyZWFtPXQ7dGhpcy54cmVmPW5ldyBDLlhSZWYodCxlKTt0aGlzLl9wYWdlUHJvbWlzZXM9bmV3IE1hcDt0aGlzLl92ZXJzaW9uPW51bGw7Y29uc3QgYT17Zm9udDowfTt0aGlzLl9nbG9iYWxJZEZhY3Rvcnk9Y2xhc3N7c3RhdGljIGdldERvY0lkKCl7cmV0dXJuYGdfJHtlLmRvY0lkfWB9c3RhdGljIGNyZWF0ZUZvbnRJZCgpe3JldHVybiJmIisgKythLmZvbnR9c3RhdGljIGNyZWF0ZU9iaklkKCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgY3JlYXRlT2JqSWRgIGNhbGxlZC4iKX1zdGF0aWMgZ2V0UGFnZU9iaklkKCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0UGFnZU9iaklkYCBjYWxsZWQuIil9fX1wYXJzZShlKXt0aGlzLnhyZWYucGFyc2UoZSk7dGhpcy5jYXRhbG9nPW5ldyBoLkNhdGFsb2codGhpcy5wZGZNYW5hZ2VyLHRoaXMueHJlZil9Z2V0IGxpbmVhcml6YXRpb24oKXtsZXQgZT1udWxsO3RyeXtlPWYuTGluZWFyaXphdGlvbi5jcmVhdGUodGhpcy5zdHJlYW0pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci5pbmZvKShlKX1yZXR1cm4oMCxyLnNoYWRvdykodGhpcywibGluZWFyaXphdGlvbiIsZSl9Z2V0IHN0YXJ0WFJlZigpe2NvbnN0IGU9dGhpcy5zdHJlYW07bGV0IHQ9MDtpZih0aGlzLmxpbmVhcml6YXRpb24pe2UucmVzZXQoKTtmaW5kKGUsTykmJih0PWUucG9zKzYtZS5zdGFydCl9ZWxzZXtjb25zdCBhPTEwMjQscj1GLmxlbmd0aDtsZXQgbj0hMSxzPWUuZW5kO2Zvcig7IW4mJnM+MDspe3MtPWEtcjtzPDAmJihzPTApO2UucG9zPXM7bj1maW5kKGUsRixhLCEwKX1pZihuKXtlLnNraXAoOSk7bGV0IGE7ZG97YT1lLmdldEJ5dGUoKX13aGlsZSgoMCxpLmlzV2hpdGVTcGFjZSkoYSkpO2xldCByPSIiO2Zvcig7YT49MzImJmE8PTU3Oyl7cis9U3RyaW5nLmZyb21DaGFyQ29kZShhKTthPWUuZ2V0Qnl0ZSgpfXQ9cGFyc2VJbnQociwxMCk7aXNOYU4odCkmJih0PTApfX1yZXR1cm4oMCxyLnNoYWRvdykodGhpcywic3RhcnRYUmVmIix0KX1jaGVja0hlYWRlcigpe2NvbnN0IGU9dGhpcy5zdHJlYW07ZS5yZXNldCgpO2lmKCFmaW5kKGUsdikpcmV0dXJuO2UubW92ZVN0YXJ0KCk7ZS5za2lwKHYubGVuZ3RoKTtsZXQgdCxhPSIiO2Zvcig7KHQ9ZS5nZXRCeXRlKCkpPjMyJiZhLmxlbmd0aDw3OylhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2kuUERGX1ZFUlNJT05fUkVHRVhQLnRlc3QoYSk/dGhpcy5fdmVyc2lvbj1hOigwLHIud2FybikoYEludmFsaWQgUERGIGhlYWRlciB2ZXJzaW9uOiAke2F9YCl9cGFyc2VTdGFydFhSZWYoKXt0aGlzLnhyZWYuc2V0U3RhcnRYUmVmKHRoaXMuc3RhcnRYUmVmKX1nZXQgbnVtUGFnZXMoKXtsZXQgZT0wO2U9dGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuY2F0YWxvZy5udW1QYWdlczp0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldE51bVBhZ2VzKCk6dGhpcy5saW5lYXJpemF0aW9uP3RoaXMubGluZWFyaXphdGlvbi5udW1QYWdlczp0aGlzLmNhdGFsb2cubnVtUGFnZXM7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIm51bVBhZ2VzIixlKX1faGFzT25seURvY3VtZW50U2lnbmF0dXJlcyhlLHQ9MCl7cmV0dXJuISFBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KChlPT57aWYoISgoZT10aGlzLnhyZWYuZmV0Y2hJZlJlZihlKSlpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuITE7aWYoZS5oYXMoIktpZHMiKSl7aWYoKyt0PjEwKXsoMCxyLndhcm4pKCJfaGFzT25seURvY3VtZW50U2lnbmF0dXJlczogbWF4aW11bSByZWN1cnNpb24gZGVwdGggcmVhY2hlZCIpO3JldHVybiExfXJldHVybiB0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGUuZ2V0KCJLaWRzIiksdCl9Y29uc3QgYT0oMCxzLmlzTmFtZSkoZS5nZXQoIkZUIiksIlNpZyIpLG49ZS5nZXQoIlJlY3QiKSxpPUFycmF5LmlzQXJyYXkobikmJm4uZXZlcnkoKGU9PjA9PT1lKSk7cmV0dXJuIGEmJml9KSl9Z2V0IF94ZmFTdHJlYW1zKCl7Y29uc3QgZT10aGlzLmNhdGFsb2cuYWNyb0Zvcm07aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmdldCgiWEZBIiksYT17InhkcDp4ZHAiOiIiLHRlbXBsYXRlOiIiLGRhdGFzZXRzOiIiLGNvbmZpZzoiIixjb25uZWN0aW9uU2V0OiIiLGxvY2FsZVNldDoiIixzdHlsZXNoZWV0OiIiLCIveGRwOnhkcCI6IiJ9O2lmKHQgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiF0LmlzRW1wdHkpe2FbInhkcDp4ZHAiXT10O3JldHVybiBhfWlmKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKGxldCBlPTAscj10Lmxlbmd0aDtlPHI7ZSs9Mil7bGV0IG47bj0wPT09ZT8ieGRwOnhkcCI6ZT09PXItMj8iL3hkcDp4ZHAiOnRbZV07aWYoIWEuaGFzT3duUHJvcGVydHkobikpY29udGludWU7Y29uc3QgaT10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W2UrMV0pO2kgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFpLmlzRW1wdHkmJihhW25dPWkpfXJldHVybiBhfWdldCB4ZmFEYXRhc2V0cygpe2NvbnN0IGU9dGhpcy5feGZhU3RyZWFtcztpZighZSlyZXR1cm4oMCxyLnNoYWRvdykodGhpcywieGZhRGF0YXNldHMiLG51bGwpO2Zvcihjb25zdCB0IG9mWyJkYXRhc2V0cyIsInhkcDp4ZHAiXSl7Y29uc3QgYT1lW3RdO2lmKGEpdHJ5e2NvbnN0IGU9e1t0XTooMCxyLnN0cmluZ1RvVVRGOFN0cmluZykoYS5nZXRTdHJpbmcoKSl9O3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbmV3IGQuRGF0YXNldFJlYWRlcihlKSl9Y2F0Y2h7KDAsci53YXJuKSgiWEZBIC0gSW52YWxpZCB1dGYtOCBzdHJpbmcuIik7YnJlYWt9fXJldHVybigwLHIuc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbnVsbCl9Z2V0IHhmYURhdGEoKXtjb25zdCBlPXRoaXMuX3hmYVN0cmVhbXM7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFthLG5db2YgT2JqZWN0LmVudHJpZXMoZSkpaWYobil0cnl7dFthXT0oMCxyLnN0cmluZ1RvVVRGOFN0cmluZykobi5nZXRTdHJpbmcoKSl9Y2F0Y2h7KDAsci53YXJuKSgiWEZBIC0gSW52YWxpZCB1dGYtOCBzdHJpbmcuIik7cmV0dXJuIG51bGx9cmV0dXJuIHR9Z2V0IHhmYUZhY3RvcnkoKXtsZXQgZTt0aGlzLnBkZk1hbmFnZXIuZW5hYmxlWGZhJiZ0aGlzLmNhdGFsb2cubmVlZHNSZW5kZXJpbmcmJnRoaXMuZm9ybUluZm8uaGFzWGZhJiYhdGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSYmKGU9dGhpcy54ZmFEYXRhKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywieGZhRmFjdG9yeSIsZT9uZXcgeC5YRkFGYWN0b3J5KGUpOm51bGwpfWdldCBpc1B1cmVYZmEoKXtyZXR1cm4hIXRoaXMueGZhRmFjdG9yeSYmdGhpcy54ZmFGYWN0b3J5LmlzVmFsaWQoKX1nZXQgaHRtbEZvclhmYSgpe3JldHVybiB0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldFBhZ2VzKCk6bnVsbH1hc3luYyBsb2FkWGZhSW1hZ2VzKCl7Y29uc3QgZT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygieGZhSW1hZ2VzIik7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9ZS5nZXRLZXlzKCksYT1uZXcgcC5PYmplY3RMb2FkZXIoZSx0LHRoaXMueHJlZik7YXdhaXQgYS5sb2FkKCk7Y29uc3Qgcj1uZXcgTWFwO2Zvcihjb25zdCBhIG9mIHQpe2NvbnN0IHQ9ZS5nZXQoYSk7dCBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSYmci5zZXQoYSx0LmdldEJ5dGVzKCkpfXRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMocil9YXN5bmMgbG9hZFhmYUZvbnRzKGUsdCl7Y29uc3QgYT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKTtpZighYSlyZXR1cm47Y29uc3Qgbj1hd2FpdCBhLmdldEFzeW5jKCJEUiIpO2lmKCEobiBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IGM9bmV3IHAuT2JqZWN0TG9hZGVyKG4sWyJGb250Il0sdGhpcy54cmVmKTthd2FpdCBjLmxvYWQoKTtjb25zdCBsPW4uZ2V0KCJGb250Iik7aWYoIShsIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3QgaD1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMpO2gudXNlU3lzdGVtRm9udHM9ITE7Y29uc3QgdT1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4Oi0xLGlkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuY2F0YWxvZy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmNhdGFsb2cuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5jYXRhbG9nLnN0YW5kYXJkRm9udERhdGFDYWNoZSxvcHRpb25zOmh9KSxkPW5ldyBtLk9wZXJhdG9yTGlzdCxmPVtdLGc9e2dldCBmb250KCl7cmV0dXJuIGYuYXQoLTEpfSxzZXQgZm9udChlKXtmLnB1c2goZSl9LGNsb25lKCl7cmV0dXJuIHRoaXN9fSx5PW5ldyBNYXA7bC5mb3JFYWNoKCgoZSx0KT0+e3kuc2V0KGUsdCl9KSk7Y29uc3Qgdz1bXTtmb3IoY29uc3RbZSxhXW9mIHkpe2NvbnN0IG89YS5nZXQoIkZvbnREZXNjcmlwdG9yIik7aWYoIShvIGluc3RhbmNlb2Ygcy5EaWN0KSljb250aW51ZTtsZXQgYz1vLmdldCgiRm9udEZhbWlseSIpO2M9Yy5yZXBsYWNlQWxsKC9bIF0rKFxkKS9nLCIkMSIpO2NvbnN0IGw9e2ZvbnRGYW1pbHk6Yyxmb250V2VpZ2h0Om8uZ2V0KCJGb250V2VpZ2h0IiksaXRhbGljQW5nbGU6LW8uZ2V0KCJJdGFsaWNBbmdsZSIpfTsoMCxpLnZhbGlkYXRlQ1NTRm9udCkobCkmJncucHVzaCh1LmhhbmRsZVNldEZvbnQobixbcy5OYW1lLmdldChlKSwxXSxudWxsLGQsdCxnLG51bGwsbCkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLHIud2FybikoYGxvYWRYZmFGb250czogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpKX1hd2FpdCBQcm9taXNlLmFsbCh3KTtjb25zdCBTPXRoaXMueGZhRmFjdG9yeS5zZXRGb250cyhmKTtpZighUylyZXR1cm47aC5pZ25vcmVFcnJvcnM9ITA7dy5sZW5ndGg9MDtmLmxlbmd0aD0wO2NvbnN0IHg9bmV3IFNldDtmb3IoY29uc3QgZSBvZiBTKSgwLG8uZ2V0WGZhRm9udE5hbWUpKGAke2V9LVJlZ3VsYXJgKXx8eC5hZGQoZSk7eC5zaXplJiZTLnB1c2goIlBkZkpTLUZhbGxiYWNrIik7Zm9yKGNvbnN0IGUgb2YgUylpZigheC5oYXMoZSkpZm9yKGNvbnN0IGEgb2Zbe25hbWU6IlJlZ3VsYXIiLGZvbnRXZWlnaHQ6NDAwLGl0YWxpY0FuZ2xlOjB9LHtuYW1lOiJCb2xkIixmb250V2VpZ2h0OjcwMCxpdGFsaWNBbmdsZTowfSx7bmFtZToiSXRhbGljIixmb250V2VpZ2h0OjQwMCxpdGFsaWNBbmdsZToxMn0se25hbWU6IkJvbGRJdGFsaWMiLGZvbnRXZWlnaHQ6NzAwLGl0YWxpY0FuZ2xlOjEyfV0pe2NvbnN0IGk9YCR7ZX0tJHthLm5hbWV9YCxjPSgwLG8uZ2V0WGZhRm9udERpY3QpKGkpO3cucHVzaCh1LmhhbmRsZVNldEZvbnQobixbcy5OYW1lLmdldChpKSwxXSxudWxsLGQsdCxnLGMse2ZvbnRGYW1pbHk6ZSxmb250V2VpZ2h0OmEuZm9udFdlaWdodCxpdGFsaWNBbmdsZTphLml0YWxpY0FuZ2xlfSkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLHIud2FybikoYGxvYWRYZmFGb250czogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpKX1hd2FpdCBQcm9taXNlLmFsbCh3KTt0aGlzLnhmYUZhY3RvcnkuYXBwZW5kRm9udHMoZix4KX1hc3luYyBzZXJpYWxpemVYZmFEYXRhKGUpe3JldHVybiB0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LnNlcmlhbGl6ZURhdGEoZSk6bnVsbH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLmNhdGFsb2cudmVyc2lvbnx8dGhpcy5fdmVyc2lvbn1nZXQgZm9ybUluZm8oKXtjb25zdCBlPXtoYXNGaWVsZHM6ITEsaGFzQWNyb0Zvcm06ITEsaGFzWGZhOiExLGhhc1NpZ25hdHVyZXM6ITF9LHQ9dGhpcy5jYXRhbG9nLmFjcm9Gb3JtO2lmKCF0KXJldHVybigwLHIuc2hhZG93KSh0aGlzLCJmb3JtSW5mbyIsZSk7dHJ5e2NvbnN0IGE9dC5nZXQoIkZpZWxkcyIpLHI9QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg+MDtlLmhhc0ZpZWxkcz1yO2NvbnN0IG49dC5nZXQoIlhGQSIpO2UuaGFzWGZhPUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjB8fG4gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFuLmlzRW1wdHk7Y29uc3QgaT0hISgxJnQuZ2V0KCJTaWdGbGFncyIpKSxzPWkmJnRoaXMuX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXMoYSk7ZS5oYXNBY3JvRm9ybT1yJiYhcztlLmhhc1NpZ25hdHVyZXM9aX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoYENhbm5vdCBmZXRjaCBmb3JtIGluZm9ybWF0aW9uOiAiJHtlfSIuYCl9cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImZvcm1JbmZvIixlKX1nZXQgZG9jdW1lbnRJbmZvKCl7Y29uc3QgZT17UERGRm9ybWF0VmVyc2lvbjp0aGlzLnZlcnNpb24sTGFuZ3VhZ2U6dGhpcy5jYXRhbG9nLmxhbmcsRW5jcnlwdEZpbHRlck5hbWU6dGhpcy54cmVmLmVuY3J5cHQ/dGhpcy54cmVmLmVuY3J5cHQuZmlsdGVyTmFtZTpudWxsLElzTGluZWFyaXplZDohIXRoaXMubGluZWFyaXphdGlvbixJc0Fjcm9Gb3JtUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtLElzWEZBUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc1hmYSxJc0NvbGxlY3Rpb25QcmVzZW50OiEhdGhpcy5jYXRhbG9nLmNvbGxlY3Rpb24sSXNTaWduYXR1cmVzUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc1NpZ25hdHVyZXN9O2xldCB0O3RyeXt0PXRoaXMueHJlZi50cmFpbGVyLmdldCgiSW5mbyIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci5pbmZvKSgiVGhlIGRvY3VtZW50IGluZm9ybWF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX1pZighKHQgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybigwLHIuc2hhZG93KSh0aGlzLCJkb2N1bWVudEluZm8iLGUpO2Zvcihjb25zdCBhIG9mIHQuZ2V0S2V5cygpKXtjb25zdCBuPXQuZ2V0KGEpO3N3aXRjaChhKXtjYXNlIlRpdGxlIjpjYXNlIkF1dGhvciI6Y2FzZSJTdWJqZWN0IjpjYXNlIktleXdvcmRzIjpjYXNlIkNyZWF0b3IiOmNhc2UiUHJvZHVjZXIiOmNhc2UiQ3JlYXRpb25EYXRlIjpjYXNlIk1vZERhdGUiOmlmKCJzdHJpbmciPT10eXBlb2Ygbil7ZVthXT0oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShuKTtjb250aW51ZX1icmVhaztjYXNlIlRyYXBwZWQiOmlmKG4gaW5zdGFuY2VvZiBzLk5hbWUpe2VbYV09bjtjb250aW51ZX1icmVhaztkZWZhdWx0OmxldCB0O3N3aXRjaCh0eXBlb2Ygbil7Y2FzZSJzdHJpbmciOnQ9KDAsci5zdHJpbmdUb1BERlN0cmluZykobik7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6dD1uO2JyZWFrO2RlZmF1bHQ6biBpbnN0YW5jZW9mIHMuTmFtZSYmKHQ9bil9aWYodm9pZCAwPT09dCl7KDAsci53YXJuKShgQmFkIHZhbHVlLCBmb3IgY3VzdG9tIGtleSAiJHthfSIsIGluIEluZm86ICR7bn0uYCk7Y29udGludWV9ZS5DdXN0b218fChlLkN1c3RvbT1PYmplY3QuY3JlYXRlKG51bGwpKTtlLkN1c3RvbVthXT10O2NvbnRpbnVlfSgwLHIud2FybikoYEJhZCB2YWx1ZSwgZm9yIGtleSAiJHthfSIsIGluIEluZm86ICR7bn0uYCl9cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImRvY3VtZW50SW5mbyIsZSl9Z2V0IGZpbmdlcnByaW50cygpe2Z1bmN0aW9uIHZhbGlkYXRlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MCYmIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIiE9PWV9ZnVuY3Rpb24gaGV4U3RyaW5nKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgZT1hLnRvU3RyaW5nKDE2KTt0LnB1c2goZS5wYWRTdGFydCgyLCIwIikpfXJldHVybiB0LmpvaW4oIiIpfWNvbnN0IGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJJRCIpO2xldCB0LGE7aWYoQXJyYXkuaXNBcnJheShlKSYmdmFsaWRhdGUoZVswXSkpe3Q9KDAsci5zdHJpbmdUb0J5dGVzKShlWzBdKTtlWzFdIT09ZVswXSYmdmFsaWRhdGUoZVsxXSkmJihhPSgwLHIuc3RyaW5nVG9CeXRlcykoZVsxXSkpfWVsc2UgdD0oMCxsLmNhbGN1bGF0ZU1ENSkodGhpcy5zdHJlYW0uZ2V0Qnl0ZVJhbmdlKDAsMTAyNCksMCwxMDI0KTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZmluZ2VycHJpbnRzIixbaGV4U3RyaW5nKHQpLGE/aGV4U3RyaW5nKGEpOm51bGxdKX1hc3luYyBfZ2V0TGluZWFyaXphdGlvblBhZ2UoZSl7Y29uc3R7Y2F0YWxvZzp0LGxpbmVhcml6YXRpb246YSx4cmVmOm59PXRoaXMsaT1zLlJlZi5nZXQoYS5vYmplY3ROdW1iZXJGaXJzdCwwKTt0cnl7Y29uc3QgZT1hd2FpdCBuLmZldGNoQXN5bmMoaSk7aWYoZSBpbnN0YW5jZW9mIHMuRGljdCl7bGV0IGE9ZS5nZXRSYXcoIlR5cGUiKTthIGluc3RhbmNlb2Ygcy5SZWYmJihhPWF3YWl0IG4uZmV0Y2hBc3luYyhhKSk7aWYoKDAscy5pc05hbWUpKGEsIlBhZ2UiKXx8IWUuaGFzKCJUeXBlIikmJiFlLmhhcygiS2lkcyIpKXt0LnBhZ2VLaWRzQ291bnRDYWNoZS5oYXMoaSl8fHQucGFnZUtpZHNDb3VudENhY2hlLnB1dChpLDEpO3QucGFnZUluZGV4Q2FjaGUuaGFzKGkpfHx0LnBhZ2VJbmRleENhY2hlLnB1dChpLDApO3JldHVybltlLGldfX10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVGhlIExpbmVhcml6YXRpb24gZGljdGlvbmFyeSBkb2Vzbid0IHBvaW50IHRvIGEgdmFsaWQgUGFnZSBkaWN0aW9uYXJ5LiIpfWNhdGNoKGEpeygwLHIud2FybikoYF9nZXRMaW5lYXJpemF0aW9uUGFnZTogIiR7YS5tZXNzYWdlfSIuYCk7cmV0dXJuIHQuZ2V0UGFnZURpY3QoZSl9fWdldFBhZ2UoZSl7Y29uc3QgdD10aGlzLl9wYWdlUHJvbWlzZXMuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3R7Y2F0YWxvZzphLGxpbmVhcml6YXRpb246cix4ZmFGYWN0b3J5Om59PXRoaXM7bGV0IGk7aT1uP1Byb21pc2UucmVzb2x2ZShbcy5EaWN0LmVtcHR5LG51bGxdKTpyPy5wYWdlRmlyc3Q9PT1lP3RoaXMuX2dldExpbmVhcml6YXRpb25QYWdlKGUpOmEuZ2V0UGFnZURpY3QoZSk7aT1pLnRoZW4oKChbdCxyXSk9Pm5ldyBQYWdlKHtwZGZNYW5hZ2VyOnRoaXMucGRmTWFuYWdlcix4cmVmOnRoaXMueHJlZixwYWdlSW5kZXg6ZSxwYWdlRGljdDp0LHJlZjpyLGdsb2JhbElkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOmEuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6YS5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTphLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOmEuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6YS5zeXN0ZW1Gb250Q2FjaGUsbm9uQmxlbmRNb2Rlc1NldDphLm5vbkJsZW5kTW9kZXNTZXQseGZhRmFjdG9yeTpufSkpKTt0aGlzLl9wYWdlUHJvbWlzZXMuc2V0KGUsaSk7cmV0dXJuIGl9YXN5bmMgY2hlY2tGaXJzdFBhZ2UoZT0hMSl7aWYoIWUpdHJ5e2F3YWl0IHRoaXMuZ2V0UGFnZSgwKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5YUmVmRW50cnlFeGNlcHRpb24pe3RoaXMuX3BhZ2VQcm9taXNlcy5kZWxldGUoMCk7YXdhaXQgdGhpcy5jbGVhbnVwKCk7dGhyb3cgbmV3IGkuWFJlZlBhcnNlRXhjZXB0aW9ufX19YXN5bmMgY2hlY2tMYXN0UGFnZShlPSExKXtjb25zdHtjYXRhbG9nOnQscGRmTWFuYWdlcjphfT10aGlzO3Quc2V0QWN0dWFsTnVtUGFnZXMoKTtsZXQgbjt0cnl7YXdhaXQgUHJvbWlzZS5hbGwoW2EuZW5zdXJlRG9jKCJ4ZmFGYWN0b3J5IiksYS5lbnN1cmVEb2MoImxpbmVhcml6YXRpb24iKSxhLmVuc3VyZUNhdGFsb2coIm51bVBhZ2VzIildKTtpZih0aGlzLnhmYUZhY3RvcnkpcmV0dXJuO249dGhpcy5saW5lYXJpemF0aW9uP3RoaXMubGluZWFyaXphdGlvbi5udW1QYWdlczp0Lm51bVBhZ2VzO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKG4pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJQYWdlIGNvdW50IGlzIG5vdCBhbiBpbnRlZ2VyLiIpO2lmKG48PTEpcmV0dXJuO2F3YWl0IHRoaXMuZ2V0UGFnZShuLTEpfWNhdGNoKHMpe3RoaXMuX3BhZ2VQcm9taXNlcy5kZWxldGUobi0xKTthd2FpdCB0aGlzLmNsZWFudXAoKTtpZihzIGluc3RhbmNlb2YgaS5YUmVmRW50cnlFeGNlcHRpb24mJiFlKXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbjsoMCxyLndhcm4pKGBjaGVja0xhc3RQYWdlIC0gaW52YWxpZCAvUGFnZXMgdHJlZSAvQ291bnQ6ICR7bn0uYCk7bGV0IG87dHJ5e289YXdhaXQgdC5nZXRBbGxQYWdlRGljdHMoZSl9Y2F0Y2goYSl7aWYoYSBpbnN0YW5jZW9mIGkuWFJlZkVudHJ5RXhjZXB0aW9uJiYhZSl0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247dC5zZXRBY3R1YWxOdW1QYWdlcygxKTtyZXR1cm59Zm9yKGNvbnN0W2UsW3Isbl1db2Ygbyl7bGV0IGk7aWYociBpbnN0YW5jZW9mIEVycm9yKXtpPVByb21pc2UucmVqZWN0KHIpO2kuY2F0Y2goKCgpPT57fSkpfWVsc2UgaT1Qcm9taXNlLnJlc29sdmUobmV3IFBhZ2Uoe3BkZk1hbmFnZXI6YSx4cmVmOnRoaXMueHJlZixwYWdlSW5kZXg6ZSxwYWdlRGljdDpyLHJlZjpuLGdsb2JhbElkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnQuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dC5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0LnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnQuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6dC5zeXN0ZW1Gb250Q2FjaGUsbm9uQmxlbmRNb2Rlc1NldDp0Lm5vbkJsZW5kTW9kZXNTZXQseGZhRmFjdG9yeTpudWxsfSkpO3RoaXMuX3BhZ2VQcm9taXNlcy5zZXQoZSxpKX10LnNldEFjdHVhbE51bVBhZ2VzKG8uc2l6ZSl9fWZvbnRGYWxsYmFjayhlLHQpe3JldHVybiB0aGlzLmNhdGFsb2cuZm9udEZhbGxiYWNrKGUsdCl9YXN5bmMgY2xlYW51cChlPSExKXtyZXR1cm4gdGhpcy5jYXRhbG9nP3RoaXMuY2F0YWxvZy5jbGVhbnVwKGUpOigwLHUuY2xlYXJHbG9iYWxDYWNoZXMpKCl9I2EoZSx0LGEsaSl7Y29uc3Qgcz10aGlzLnhyZWYuZmV0Y2hJZlJlZih0KTtpZihzLmhhcygiVCIpKXtjb25zdCB0PSgwLHIuc3RyaW5nVG9QREZTdHJpbmcpKHMuZ2V0KCJUIikpO2U9IiI9PT1lP3Q6YCR7ZX0uJHt0fWB9YS5oYXMoZSl8fGEuc2V0KGUsW10pO2EuZ2V0KGUpLnB1c2gobi5Bbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUodGhpcy54cmVmLHQsaSx0aGlzLl9sb2NhbElkRmFjdG9yeSwhMCxudWxsKS50aGVuKChlPT5lPy5nZXRGaWVsZE9iamVjdCgpKSkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLHIud2FybikoYCNjb2xsZWN0RmllbGRPYmplY3RzOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpO2lmKHMuaGFzKCJLaWRzIikpZm9yKGNvbnN0IHQgb2Ygcy5nZXQoIktpZHMiKSl0aGlzLiNhKGUsdCxhLGkpfWdldCBmaWVsZE9iamVjdHMoKXtpZighdGhpcy5mb3JtSW5mby5oYXNGaWVsZHMpcmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImZpZWxkT2JqZWN0cyIsUHJvbWlzZS5yZXNvbHZlKG51bGwpKTtjb25zdCBlPXRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoImFubm90YXRpb25HbG9iYWxzIikudGhlbigoYXN5bmMgZT0+e2lmKCFlKXJldHVybiBudWxsO2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxhPW5ldyBNYXA7Zm9yKGNvbnN0IHQgb2YgdGhpcy5jYXRhbG9nLmFjcm9Gb3JtLmdldCgiRmllbGRzIikpdGhpcy4jYSgiIix0LGEsZSk7Y29uc3Qgcj1bXTtmb3IoY29uc3RbZSxuXW9mIGEpci5wdXNoKFByb21pc2UuYWxsKG4pLnRoZW4oKGE9PnsoYT1hLmZpbHRlcigoZT0+ISFlKSkpLmxlbmd0aD4wJiYodFtlXT1hKX0pKSk7YXdhaXQgUHJvbWlzZS5hbGwocik7cmV0dXJuIHR9KSk7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImZpZWxkT2JqZWN0cyIsZSl9Z2V0IGhhc0pTQWN0aW9ucygpe2NvbnN0IGU9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiX3BhcnNlSGFzSlNBY3Rpb25zIik7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImhhc0pTQWN0aW9ucyIsZSl9YXN5bmMgX3BhcnNlSGFzSlNBY3Rpb25zKCl7Y29uc3RbZSx0XT1hd2FpdCBQcm9taXNlLmFsbChbdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImpzQWN0aW9ucyIpLHRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoImZpZWxkT2JqZWN0cyIpXSk7cmV0dXJuISFlfHwhIXQmJk9iamVjdC52YWx1ZXModCkuc29tZSgoZT0+ZS5zb21lKChlPT5udWxsIT09ZS5hY3Rpb25zKSkpKX1nZXQgY2FsY3VsYXRpb25PcmRlcklkcygpe2NvbnN0IGU9dGhpcy5jYXRhbG9nLmFjcm9Gb3JtO2lmKCFlPy5oYXMoIkNPIikpcmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG51bGwpO2NvbnN0IHQ9ZS5nZXQoIkNPIik7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk7Y29uc3QgYT1bXTtmb3IoY29uc3QgZSBvZiB0KWUgaW5zdGFuY2VvZiBzLlJlZiYmYS5wdXNoKGUudG9TdHJpbmcoKSk7cmV0dXJuIDA9PT1hLmxlbmd0aD8oMCxyLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk6KDAsci5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLGEpfWdldCBhbm5vdGF0aW9uR2xvYmFscygpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJhbm5vdGF0aW9uR2xvYmFscyIsbi5Bbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGVHbG9iYWxzKHRoaXMucGRmTWFuYWdlcikpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Qb3B1cEFubm90YXRpb249dC5NYXJrdXBBbm5vdGF0aW9uPXQuQW5ub3RhdGlvbkZhY3Rvcnk9dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGU9dC5Bbm5vdGF0aW9uPXZvaWQgMDt0LmdldFF1YWRQb2ludHM9Z2V0UXVhZFBvaW50czt2YXIgcj1hKDIpLG49YSgzKSxpPWEoMTEpLHM9YSg0KSxvPWEoOCksYz1hKDUpLGw9YSg2MCksaD1hKDY2KSx1PWEoMTIpLGQ9YSg2OSksZj1hKDI2KSxnPWEoNzYpLHA9YSg2NCksbT1hKDczKSxiPWEoNzcpO3QuQW5ub3RhdGlvbkZhY3Rvcnk9Y2xhc3MgQW5ub3RhdGlvbkZhY3Rvcnl7c3RhdGljIGNyZWF0ZUdsb2JhbHMoZSl7cmV0dXJuIFByb21pc2UuYWxsKFtlLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIiksZS5lbnN1cmVEb2MoInhmYURhdGFzZXRzIiksZS5lbnN1cmVDYXRhbG9nKCJzdHJ1Y3RUcmVlUm9vdCIpLGUuZW5zdXJlQ2F0YWxvZygiYmFzZVVybCIpLGUuZW5zdXJlQ2F0YWxvZygiYXR0YWNobWVudHMiKV0pLnRoZW4oKChbdCxhLHIsbixpXSk9Pih7cGRmTWFuYWdlcjplLGFjcm9Gb3JtOnQgaW5zdGFuY2VvZiBzLkRpY3Q/dDpzLkRpY3QuZW1wdHkseGZhRGF0YXNldHM6YSxzdHJ1Y3RUcmVlUm9vdDpyLGJhc2VVcmw6bixhdHRhY2htZW50czppfSkpLChlPT57KDAsci53YXJuKShgY3JlYXRlR2xvYmFsczogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpfXN0YXRpYyBhc3luYyBjcmVhdGUoZSx0LGEscixuLGkpe2NvbnN0IHM9bj9hd2FpdCB0aGlzLl9nZXRQYWdlSW5kZXgoZSx0LGEucGRmTWFuYWdlcik6bnVsbDtyZXR1cm4gYS5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJfY3JlYXRlIixbZSx0LGEscixuLHMsaV0pfXN0YXRpYyBfY3JlYXRlKGUsdCxhLGksbz0hMSxjPW51bGwsbD1udWxsKXtjb25zdCBoPWUuZmV0Y2hJZlJlZih0KTtpZighKGggaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtjb25zdHthY3JvRm9ybTp1LHBkZk1hbmFnZXI6ZH09YSxmPXQgaW5zdGFuY2VvZiBzLlJlZj90LnRvU3RyaW5nKCk6YGFubm90XyR7aS5jcmVhdGVPYmpJZCgpfWA7bGV0IGc9aC5nZXQoIlN1YnR5cGUiKTtnPWcgaW5zdGFuY2VvZiBzLk5hbWU/Zy5uYW1lOm51bGw7Y29uc3QgcD17eHJlZjplLHJlZjp0LGRpY3Q6aCxzdWJ0eXBlOmcsaWQ6Zixhbm5vdGF0aW9uR2xvYmFsczphLGNvbGxlY3RGaWVsZHM6byxuZWVkQXBwZWFyYW5jZXM6IW8mJiEwPT09dS5nZXQoIk5lZWRBcHBlYXJhbmNlcyIpLHBhZ2VJbmRleDpjLGV2YWx1YXRvck9wdGlvbnM6ZC5ldmFsdWF0b3JPcHRpb25zLHBhZ2VSZWY6bH07c3dpdGNoKGcpe2Nhc2UiTGluayI6cmV0dXJuIG5ldyBMaW5rQW5ub3RhdGlvbihwKTtjYXNlIlRleHQiOnJldHVybiBuZXcgVGV4dEFubm90YXRpb24ocCk7Y2FzZSJXaWRnZXQiOmxldCBlPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6aCxrZXk6IkZUIn0pO2U9ZSBpbnN0YW5jZW9mIHMuTmFtZT9lLm5hbWU6bnVsbDtzd2l0Y2goZSl7Y2FzZSJUeCI6cmV0dXJuIG5ldyBUZXh0V2lkZ2V0QW5ub3RhdGlvbihwKTtjYXNlIkJ0biI6cmV0dXJuIG5ldyBCdXR0b25XaWRnZXRBbm5vdGF0aW9uKHApO2Nhc2UiQ2giOnJldHVybiBuZXcgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbihwKTtjYXNlIlNpZyI6cmV0dXJuIG5ldyBTaWduYXR1cmVXaWRnZXRBbm5vdGF0aW9uKHApfSgwLHIud2FybikoYFVuaW1wbGVtZW50ZWQgd2lkZ2V0IGZpZWxkIHR5cGUgIiR7ZX0iLCBmYWxsaW5nIGJhY2sgdG8gYmFzZSBmaWVsZCB0eXBlLmApO3JldHVybiBuZXcgV2lkZ2V0QW5ub3RhdGlvbihwKTtjYXNlIlBvcHVwIjpyZXR1cm4gbmV3IFBvcHVwQW5ub3RhdGlvbihwKTtjYXNlIkZyZWVUZXh0IjpyZXR1cm4gbmV3IEZyZWVUZXh0QW5ub3RhdGlvbihwKTtjYXNlIkxpbmUiOnJldHVybiBuZXcgTGluZUFubm90YXRpb24ocCk7Y2FzZSJTcXVhcmUiOnJldHVybiBuZXcgU3F1YXJlQW5ub3RhdGlvbihwKTtjYXNlIkNpcmNsZSI6cmV0dXJuIG5ldyBDaXJjbGVBbm5vdGF0aW9uKHApO2Nhc2UiUG9seUxpbmUiOnJldHVybiBuZXcgUG9seWxpbmVBbm5vdGF0aW9uKHApO2Nhc2UiUG9seWdvbiI6cmV0dXJuIG5ldyBQb2x5Z29uQW5ub3RhdGlvbihwKTtjYXNlIkNhcmV0IjpyZXR1cm4gbmV3IENhcmV0QW5ub3RhdGlvbihwKTtjYXNlIkluayI6cmV0dXJuIG5ldyBJbmtBbm5vdGF0aW9uKHApO2Nhc2UiSGlnaGxpZ2h0IjpyZXR1cm4gbmV3IEhpZ2hsaWdodEFubm90YXRpb24ocCk7Y2FzZSJVbmRlcmxpbmUiOnJldHVybiBuZXcgVW5kZXJsaW5lQW5ub3RhdGlvbihwKTtjYXNlIlNxdWlnZ2x5IjpyZXR1cm4gbmV3IFNxdWlnZ2x5QW5ub3RhdGlvbihwKTtjYXNlIlN0cmlrZU91dCI6cmV0dXJuIG5ldyBTdHJpa2VPdXRBbm5vdGF0aW9uKHApO2Nhc2UiU3RhbXAiOnJldHVybiBuZXcgU3RhbXBBbm5vdGF0aW9uKHApO2Nhc2UiRmlsZUF0dGFjaG1lbnQiOnJldHVybiBuZXcgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uKHApO2RlZmF1bHQ6b3x8KGc/KDAsci53YXJuKShgVW5pbXBsZW1lbnRlZCBhbm5vdGF0aW9uIHR5cGUgIiR7Z30iLCBmYWxsaW5nIGJhY2sgdG8gYmFzZSBhbm5vdGF0aW9uLmApOigwLHIud2FybikoIkFubm90YXRpb24gaXMgbWlzc2luZyB0aGUgcmVxdWlyZWQgL1N1YnR5cGUuIikpO3JldHVybiBuZXcgQW5ub3RhdGlvbihwKX19c3RhdGljIGFzeW5jIF9nZXRQYWdlSW5kZXgoZSx0LGEpe3RyeXtjb25zdCBuPWF3YWl0IGUuZmV0Y2hJZlJlZkFzeW5jKHQpO2lmKCEobiBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuLTE7Y29uc3QgaT1uLmdldFJhdygiUCIpO2lmKGkgaW5zdGFuY2VvZiBzLlJlZil0cnl7cmV0dXJuIGF3YWl0IGEuZW5zdXJlQ2F0YWxvZygiZ2V0UGFnZUluZGV4IixbaV0pfWNhdGNoKGUpeygwLHIuaW5mbykoYF9nZXRQYWdlSW5kZXggLS0gbm90IGEgdmFsaWQgcGFnZSByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZihuLmhhcygiS2lkcyIpKXJldHVybi0xO2NvbnN0IG89YXdhaXQgYS5lbnN1cmVEb2MoIm51bVBhZ2VzIik7Zm9yKGxldCBlPTA7ZTxvO2UrKyl7Y29uc3Qgcj1hd2FpdCBhLmdldFBhZ2UoZSksbj1hd2FpdCBhLmVuc3VyZShyLCJhbm5vdGF0aW9ucyIpO2Zvcihjb25zdCBhIG9mIG4paWYoYSBpbnN0YW5jZW9mIHMuUmVmJiYoMCxzLmlzUmVmc0VxdWFsKShhLHQpKXJldHVybiBlfX1jYXRjaChlKXsoMCxyLndhcm4pKGBfZ2V0UGFnZUluZGV4OiAiJHtlfSIuYCl9cmV0dXJuLTF9c3RhdGljIGdlbmVyYXRlSW1hZ2VzKGUsdCxhKXtpZighYSl7KDAsci53YXJuKSgiZ2VuZXJhdGVJbWFnZXM6IE9mZnNjcmVlbkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLCBjYW5ub3Qgc2F2ZSBvciBwcmludCBzb21lIGFubm90YXRpb25zIHdpdGggaW1hZ2VzLiIpO3JldHVybiBudWxsfWxldCBuO2Zvcihjb25zdHtiaXRtYXBJZDphLGJpdG1hcDpyfW9mIGUpaWYocil7bnx8PW5ldyBNYXA7bi5zZXQoYSxTdGFtcEFubm90YXRpb24uY3JlYXRlSW1hZ2Uocix0KSl9cmV0dXJuIG59c3RhdGljIGFzeW5jIHNhdmVOZXdBbm5vdGF0aW9ucyhlLHQsYSxuKXtjb25zdCBpPWUueHJlZjtsZXQgbztjb25zdCBjPVtdLGw9W10se2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOmh9PWUub3B0aW9ucztmb3IoY29uc3QgdSBvZiBhKWlmKCF1LmRlbGV0ZWQpc3dpdGNoKHUuYW5ub3RhdGlvblR5cGUpe2Nhc2Ugci5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVDppZighbyl7Y29uc3QgZT1uZXcgcy5EaWN0KGkpO2Uuc2V0KCJCYXNlRm9udCIscy5OYW1lLmdldCgiSGVsdmV0aWNhIikpO2Uuc2V0KCJUeXBlIixzLk5hbWUuZ2V0KCJGb250IikpO2Uuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJUeXBlMSIpKTtlLnNldCgiRW5jb2RpbmciLHMuTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKTtjb25zdCB0PVtdO289aS5nZXROZXdUZW1wb3JhcnlSZWYoKTthd2FpdCgwLG0ud3JpdGVPYmplY3QpKG8sZSx0LGkpO2MucHVzaCh7cmVmOm8sZGF0YTp0LmpvaW4oIiIpfSl9bC5wdXNoKEZyZWVUZXh0QW5ub3RhdGlvbi5jcmVhdGVOZXdBbm5vdGF0aW9uKGksdSxjLHtldmFsdWF0b3I6ZSx0YXNrOnQsYmFzZUZvbnRSZWY6b30pKTticmVhaztjYXNlIHIuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOmwucHVzaChJbmtBbm5vdGF0aW9uLmNyZWF0ZU5ld0Fubm90YXRpb24oaSx1LGMpKTticmVhaztjYXNlIHIuQW5ub3RhdGlvbkVkaXRvclR5cGUuU1RBTVA6aWYoIWgpYnJlYWs7Y29uc3QgYT1hd2FpdCBuLmdldCh1LmJpdG1hcElkKTtpZihhLmltYWdlU3RyZWFtKXtjb25zdHtpbWFnZVN0cmVhbTplLHNtYXNrU3RyZWFtOnR9PWEscj1bXTtpZih0KXtjb25zdCBhPWkuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7YXdhaXQoMCxtLndyaXRlT2JqZWN0KShhLHQscixpKTtjLnB1c2goe3JlZjphLGRhdGE6ci5qb2luKCIiKX0pO2UuZGljdC5zZXQoIlNNYXNrIixhKTtyLmxlbmd0aD0wfWNvbnN0IG49YS5pbWFnZVJlZj1pLmdldE5ld1RlbXBvcmFyeVJlZigpO2F3YWl0KDAsbS53cml0ZU9iamVjdCkobixlLHIsaSk7Yy5wdXNoKHtyZWY6bixkYXRhOnIuam9pbigiIil9KTthLmltYWdlU3RyZWFtPWEuc21hc2tTdHJlYW09bnVsbH1sLnB1c2goU3RhbXBBbm5vdGF0aW9uLmNyZWF0ZU5ld0Fubm90YXRpb24oaSx1LGMse2ltYWdlOmF9KSl9cmV0dXJue2Fubm90YXRpb25zOmF3YWl0IFByb21pc2UuYWxsKGwpLGRlcGVuZGVuY2llczpjfX1zdGF0aWMgYXN5bmMgcHJpbnROZXdBbm5vdGF0aW9ucyhlLHQsYSxuLGkpe2lmKCFuKXJldHVybiBudWxsO2NvbnN0e29wdGlvbnM6cyx4cmVmOm99PXQsYz1bXTtmb3IoY29uc3QgbCBvZiBuKWlmKCFsLmRlbGV0ZWQpc3dpdGNoKGwuYW5ub3RhdGlvblR5cGUpe2Nhc2Ugci5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVDpjLnB1c2goRnJlZVRleHRBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLG8sbCx7ZXZhbHVhdG9yOnQsdGFzazphLGV2YWx1YXRvck9wdGlvbnM6c30pKTticmVhaztjYXNlIHIuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOmMucHVzaChJbmtBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLG8sbCx7ZXZhbHVhdG9yT3B0aW9uczpzfSkpO2JyZWFrO2Nhc2Ugci5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5TVEFNUDppZighcy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZClicmVhaztjb25zdCBuPWF3YWl0IGkuZ2V0KGwuYml0bWFwSWQpO2lmKG4uaW1hZ2VTdHJlYW0pe2NvbnN0e2ltYWdlU3RyZWFtOmUsc21hc2tTdHJlYW06dH09bjt0JiZlLmRpY3Quc2V0KCJTTWFzayIsdCk7bi5pbWFnZVJlZj1uZXcgZi5KcGVnU3RyZWFtKGUsZS5sZW5ndGgpO24uaW1hZ2VTdHJlYW09bi5zbWFza1N0cmVhbT1udWxsfWMucHVzaChTdGFtcEFubm90YXRpb24uY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKGUsbyxsLHtpbWFnZTpuLGV2YWx1YXRvck9wdGlvbnM6c30pKX1yZXR1cm4gUHJvbWlzZS5hbGwoYyl9fTtmdW5jdGlvbiBnZXRSZ2JDb2xvcihlLHQ9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gdDtjb25zdCBhPXR8fG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDE6dS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2JJdGVtKGUsMCxhLDApO3JldHVybiBhO2Nhc2UgMzp1LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiSXRlbShlLDAsYSwwKTtyZXR1cm4gYTtjYXNlIDQ6dS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKGUsMCxhLDApO3JldHVybiBhO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIGdldFBkZkNvbG9yQXJyYXkoZSl7cmV0dXJuIEFycmF5LmZyb20oZSwoZT0+ZS8yNTUpKX1mdW5jdGlvbiBnZXRRdWFkUG9pbnRzKGUsdCl7Y29uc3QgYT1lLmdldEFycmF5KCJRdWFkUG9pbnRzIik7aWYoIUFycmF5LmlzQXJyYXkoYSl8fDA9PT1hLmxlbmd0aHx8YS5sZW5ndGglOD4wKXJldHVybiBudWxsO2NvbnN0IHI9W107Zm9yKGxldCBlPTAsbj1hLmxlbmd0aC84O2U8bjtlKyspe2xldCBuPTEvMCxpPS0xLzAscz0xLzAsbz0tMS8wO2ZvcihsZXQgdD04KmUscj04KmUrODt0PHI7dCs9Mil7Y29uc3QgZT1hW3RdLHI9YVt0KzFdO249TWF0aC5taW4oZSxuKTtpPU1hdGgubWF4KGUsaSk7cz1NYXRoLm1pbihyLHMpO289TWF0aC5tYXgocixvKX1pZihudWxsIT09dCYmKG48dFswXXx8aT50WzJdfHxzPHRbMV18fG8+dFszXSkpcmV0dXJuIG51bGw7ci5wdXNoKFt7eDpuLHk6b30se3g6aSx5Om99LHt4Om4seTpzfSx7eDppLHk6c31dKX1yZXR1cm4gcn1mdW5jdGlvbiBnZXRUcmFuc2Zvcm1NYXRyaXgoZSx0LGEpe2NvbnN0W24saSxzLG9dPXIuVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LGEpO2lmKG49PT1zfHxpPT09bylyZXR1cm5bMSwwLDAsMSxlWzBdLGVbMV1dO2NvbnN0IGM9KGVbMl0tZVswXSkvKHMtbiksbD0oZVszXS1lWzFdKS8oby1pKTtyZXR1cm5bYywwLDAsbCxlWzBdLW4qYyxlWzFdLWkqbF19Y2xhc3MgQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtjb25zdHtkaWN0OnQseHJlZjphLGFubm90YXRpb25HbG9iYWxzOml9PWU7dGhpcy5zZXRUaXRsZSh0LmdldCgiVCIpKTt0aGlzLnNldENvbnRlbnRzKHQuZ2V0KCJDb250ZW50cyIpKTt0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUodC5nZXQoIk0iKSk7dGhpcy5zZXRGbGFncyh0LmdldCgiRiIpKTt0aGlzLnNldFJlY3RhbmdsZSh0LmdldEFycmF5KCJSZWN0IikpO3RoaXMuc2V0Q29sb3IodC5nZXRBcnJheSgiQyIpKTt0aGlzLnNldEJvcmRlclN0eWxlKHQpO3RoaXMuc2V0QXBwZWFyYW5jZSh0KTt0aGlzLnNldE9wdGlvbmFsQ29udGVudCh0KTtjb25zdCBvPXQuZ2V0KCJNSyIpO3RoaXMuc2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyhvKTt0aGlzLnNldFJvdGF0aW9uKG8sdCk7dGhpcy5yZWY9ZS5yZWYgaW5zdGFuY2VvZiBzLlJlZj9lLnJlZjpudWxsO3RoaXMuX3N0cmVhbXM9W107dGhpcy5hcHBlYXJhbmNlJiZ0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5hcHBlYXJhbmNlKTtjb25zdCBjPSEhKHRoaXMuZmxhZ3Mmci5Bbm5vdGF0aW9uRmxhZy5MT0NLRUQpLGw9ISEodGhpcy5mbGFncyZyLkFubm90YXRpb25GbGFnLkxPQ0tFRENPTlRFTlRTKTtpZihpLnN0cnVjdFRyZWVSb290KXtsZXQgYT10LmdldCgiU3RydWN0UGFyZW50Iik7YT1OdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPj0wP2E6LTE7aS5zdHJ1Y3RUcmVlUm9vdC5hZGRBbm5vdGF0aW9uSWRUb1BhZ2UoZS5wYWdlUmVmLGEpfXRoaXMuZGF0YT17YW5ub3RhdGlvbkZsYWdzOnRoaXMuZmxhZ3MsYm9yZGVyU3R5bGU6dGhpcy5ib3JkZXJTdHlsZSxjb2xvcjp0aGlzLmNvbG9yLGJhY2tncm91bmRDb2xvcjp0aGlzLmJhY2tncm91bmRDb2xvcixib3JkZXJDb2xvcjp0aGlzLmJvcmRlckNvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sY29udGVudHNPYmo6dGhpcy5fY29udGVudHMsaGFzQXBwZWFyYW5jZTohIXRoaXMuYXBwZWFyYW5jZSxpZDplLmlkLG1vZGlmaWNhdGlvbkRhdGU6dGhpcy5tb2RpZmljYXRpb25EYXRlLHJlY3Q6dGhpcy5yZWN0YW5nbGUsc3VidHlwZTplLnN1YnR5cGUsaGFzT3duQ2FudmFzOiExLG5vUm90YXRlOiEhKHRoaXMuZmxhZ3Mmci5Bbm5vdGF0aW9uRmxhZy5OT1JPVEFURSksbm9IVE1MOmMmJmx9O2lmKGUuY29sbGVjdEZpZWxkcyl7Y29uc3QgaT10LmdldCgiS2lkcyIpO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgaSl0IGluc3RhbmNlb2Ygcy5SZWYmJmUucHVzaCh0LnRvU3RyaW5nKCkpOzAhPT1lLmxlbmd0aCYmKHRoaXMuZGF0YS5raWRJZHM9ZSl9dGhpcy5kYXRhLmFjdGlvbnM9KDAsbi5jb2xsZWN0QWN0aW9ucykoYSx0LHIuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZSk7dGhpcy5kYXRhLmZpZWxkTmFtZT10aGlzLl9jb25zdHJ1Y3RGaWVsZE5hbWUodCk7dGhpcy5kYXRhLnBhZ2VJbmRleD1lLnBhZ2VJbmRleH10aGlzLl9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD1lLmV2YWx1YXRvck9wdGlvbnMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ7dGhpcy5fZmFsbGJhY2tGb250RGljdD1udWxsO3RoaXMuX25lZWRBcHBlYXJhbmNlcz0hMX1faGFzRmxhZyhlLHQpe3JldHVybiEhKGUmdCl9X2lzVmlld2FibGUoZSl7cmV0dXJuIXRoaXMuX2hhc0ZsYWcoZSxyLkFubm90YXRpb25GbGFnLklOVklTSUJMRSkmJiF0aGlzLl9oYXNGbGFnKGUsci5Bbm5vdGF0aW9uRmxhZy5OT1ZJRVcpfV9pc1ByaW50YWJsZShlKXtyZXR1cm4gdGhpcy5faGFzRmxhZyhlLHIuQW5ub3RhdGlvbkZsYWcuUFJJTlQpJiYhdGhpcy5faGFzRmxhZyhlLHIuQW5ub3RhdGlvbkZsYWcuSElEREVOKSYmIXRoaXMuX2hhc0ZsYWcoZSxyLkFubm90YXRpb25GbGFnLklOVklTSUJMRSl9bXVzdEJlVmlld2VkKGUsdCl7Y29uc3QgYT1lPy5nZXQodGhpcy5kYXRhLmlkKT8ubm9WaWV3O3JldHVybiB2b2lkIDAhPT1hPyFhOnRoaXMudmlld2FibGUmJiF0aGlzLl9oYXNGbGFnKHRoaXMuZmxhZ3Msci5Bbm5vdGF0aW9uRmxhZy5ISURERU4pfW11c3RCZVByaW50ZWQoZSl7Y29uc3QgdD1lPy5nZXQodGhpcy5kYXRhLmlkKT8ubm9QcmludDtyZXR1cm4gdm9pZCAwIT09dD8hdDp0aGlzLnByaW50YWJsZX1nZXQgdmlld2FibGUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuZGF0YS5xdWFkUG9pbnRzJiYoMD09PXRoaXMuZmxhZ3N8fHRoaXMuX2lzVmlld2FibGUodGhpcy5mbGFncykpfWdldCBwcmludGFibGUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuZGF0YS5xdWFkUG9pbnRzJiYoMCE9PXRoaXMuZmxhZ3MmJnRoaXMuX2lzUHJpbnRhYmxlKHRoaXMuZmxhZ3MpKX1fcGFyc2VTdHJpbmdIZWxwZXIoZSl7Y29uc3QgdD0ic3RyaW5nIj09dHlwZW9mIGU/KDAsci5zdHJpbmdUb1BERlN0cmluZykoZSk6IiI7cmV0dXJue3N0cjp0LGRpcjp0JiYicnRsIj09PSgwLGwuYmlkaSkodCkuZGlyPyJydGwiOiJsdHIifX1zZXREZWZhdWx0QXBwZWFyYW5jZShlKXtjb25zdHtkaWN0OnQsYW5ub3RhdGlvbkdsb2JhbHM6YX09ZSxyPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6IkRBIn0pfHxhLmFjcm9Gb3JtLmdldCgiREEiKTt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0ic3RyaW5nIj09dHlwZW9mIHI/cjoiIjt0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UpfXNldFRpdGxlKGUpe3RoaXMuX3RpdGxlPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfXNldENvbnRlbnRzKGUpe3RoaXMuX2NvbnRlbnRzPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfXNldE1vZGlmaWNhdGlvbkRhdGUoZSl7dGhpcy5tb2RpZmljYXRpb25EYXRlPSJzdHJpbmciPT10eXBlb2YgZT9lOm51bGx9c2V0RmxhZ3MoZSl7dGhpcy5mbGFncz1OdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjA/ZTowfWhhc0ZsYWcoZSl7cmV0dXJuIHRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxlKX1zZXRSZWN0YW5nbGUoZSl7dGhpcy5yZWN0YW5nbGU9QXJyYXkuaXNBcnJheShlKSYmND09PWUubGVuZ3RoP3IuVXRpbC5ub3JtYWxpemVSZWN0KGUpOlswLDAsMCwwXX1zZXRDb2xvcihlKXt0aGlzLmNvbG9yPWdldFJnYkNvbG9yKGUpfXNldExpbmVFbmRpbmdzKGUpe3RoaXMubGluZUVuZGluZ3M9WyJOb25lIiwiTm9uZSJdO2lmKEFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aClmb3IobGV0IHQ9MDt0PDI7dCsrKXtjb25zdCBhPWVbdF07aWYoYSBpbnN0YW5jZW9mIHMuTmFtZSlzd2l0Y2goYS5uYW1lKXtjYXNlIk5vbmUiOmNvbnRpbnVlO2Nhc2UiU3F1YXJlIjpjYXNlIkNpcmNsZSI6Y2FzZSJEaWFtb25kIjpjYXNlIk9wZW5BcnJvdyI6Y2FzZSJDbG9zZWRBcnJvdyI6Y2FzZSJCdXR0IjpjYXNlIlJPcGVuQXJyb3ciOmNhc2UiUkNsb3NlZEFycm93IjpjYXNlIlNsYXNoIjp0aGlzLmxpbmVFbmRpbmdzW3RdPWEubmFtZTtjb250aW51ZX0oMCxyLndhcm4pKGBJZ25vcmluZyBpbnZhbGlkIGxpbmVFbmRpbmc6ICR7YX1gKX19c2V0Um90YXRpb24oZSx0KXt0aGlzLnJvdGF0aW9uPTA7bGV0IGE9ZSBpbnN0YW5jZW9mIHMuRGljdD9lLmdldCgiUiIpfHwwOnQuZ2V0KCJSb3RhdGUiKXx8MDtpZihOdW1iZXIuaXNJbnRlZ2VyKGEpJiYwIT09YSl7YSU9MzYwO2E8MCYmKGErPTM2MCk7YSU5MD09MCYmKHRoaXMucm90YXRpb249YSl9fXNldEJvcmRlckFuZEJhY2tncm91bmRDb2xvcnMoZSl7aWYoZSBpbnN0YW5jZW9mIHMuRGljdCl7dGhpcy5ib3JkZXJDb2xvcj1nZXRSZ2JDb2xvcihlLmdldEFycmF5KCJCQyIpLG51bGwpO3RoaXMuYmFja2dyb3VuZENvbG9yPWdldFJnYkNvbG9yKGUuZ2V0QXJyYXkoIkJHIiksbnVsbCl9ZWxzZSB0aGlzLmJvcmRlckNvbG9yPXRoaXMuYmFja2dyb3VuZENvbG9yPW51bGx9c2V0Qm9yZGVyU3R5bGUoZSl7dGhpcy5ib3JkZXJTdHlsZT1uZXcgQW5ub3RhdGlvbkJvcmRlclN0eWxlO2lmKGUgaW5zdGFuY2VvZiBzLkRpY3QpaWYoZS5oYXMoIkJTIikpe2NvbnN0IHQ9ZS5nZXQoIkJTIiksYT10LmdldCgiVHlwZSIpO2lmKCFhfHwoMCxzLmlzTmFtZSkoYSwiQm9yZGVyIikpe3RoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgodC5nZXQoIlciKSx0aGlzLnJlY3RhbmdsZSk7dGhpcy5ib3JkZXJTdHlsZS5zZXRTdHlsZSh0LmdldCgiUyIpKTt0aGlzLmJvcmRlclN0eWxlLnNldERhc2hBcnJheSh0LmdldEFycmF5KCJEIikpfX1lbHNlIGlmKGUuaGFzKCJCb3JkZXIiKSl7Y29uc3QgdD1lLmdldEFycmF5KCJCb3JkZXIiKTtpZihBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD49Myl7dGhpcy5ib3JkZXJTdHlsZS5zZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKHRbMF0pO3RoaXMuYm9yZGVyU3R5bGUuc2V0VmVydGljYWxDb3JuZXJSYWRpdXModFsxXSk7dGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCh0WzJdLHRoaXMucmVjdGFuZ2xlKTs0PT09dC5sZW5ndGgmJnRoaXMuYm9yZGVyU3R5bGUuc2V0RGFzaEFycmF5KHRbM10sITApfX1lbHNlIHRoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgoMCl9c2V0QXBwZWFyYW5jZShlKXt0aGlzLmFwcGVhcmFuY2U9bnVsbDtjb25zdCB0PWUuZ2V0KCJBUCIpO2lmKCEodCBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IGE9dC5nZXQoIk4iKTtpZihhIGluc3RhbmNlb2YgYy5CYXNlU3RyZWFtKXt0aGlzLmFwcGVhcmFuY2U9YTtyZXR1cm59aWYoIShhIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3Qgcj1lLmdldCgiQVMiKTtpZighKHIgaW5zdGFuY2VvZiBzLk5hbWUmJmEuaGFzKHIubmFtZSkpKXJldHVybjtjb25zdCBuPWEuZ2V0KHIubmFtZSk7biBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSYmKHRoaXMuYXBwZWFyYW5jZT1uKX1zZXRPcHRpb25hbENvbnRlbnQoZSl7dGhpcy5vYz1udWxsO2NvbnN0IHQ9ZS5nZXQoIk9DIik7dCBpbnN0YW5jZW9mIHMuTmFtZT8oMCxyLndhcm4pKCJzZXRPcHRpb25hbENvbnRlbnQ6IFN1cHBvcnQgZm9yIC9OYW1lLWVudHJ5IGlzIG5vdCBpbXBsZW1lbnRlZC4iKTp0IGluc3RhbmNlb2Ygcy5EaWN0JiYodGhpcy5vYz10KX1sb2FkUmVzb3VyY2VzKGUsdCl7cmV0dXJuIHQuZGljdC5nZXRBc3luYygiUmVzb3VyY2VzIikudGhlbigodD0+e2lmKCF0KXJldHVybjtyZXR1cm4gbmV3IGcuT2JqZWN0TG9hZGVyKHQsZSx0LnhyZWYpLmxvYWQoKS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0fSkpfSkpfWFzeW5jIGdldE9wZXJhdG9yTGlzdChlLHQsYSxuLGkpe2NvbnN0IGM9dGhpcy5kYXRhO2xldCBsPXRoaXMuYXBwZWFyYW5jZTtjb25zdCBoPSEhKHRoaXMuZGF0YS5oYXNPd25DYW52YXMmJmEmci5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpO2lmKCFsKXtpZighaClyZXR1cm57b3BMaXN0Om5ldyBwLk9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9O2w9bmV3IG8uU3RyaW5nU3RyZWFtKCIiKTtsLmRpY3Q9bmV3IHMuRGljdH1jb25zdCB1PWwuZGljdCxkPWF3YWl0IHRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIkNvbG9yU3BhY2UiLCJQYXR0ZXJuIiwiU2hhZGluZyIsIlhPYmplY3QiLCJGb250Il0sbCksZj11LmdldEFycmF5KCJCQm94Iil8fFswLDAsMSwxXSxnPXUuZ2V0QXJyYXkoIk1hdHJpeCIpfHxbMSwwLDAsMSwwLDBdLG09Z2V0VHJhbnNmb3JtTWF0cml4KGMucmVjdCxmLGcpLGI9bmV3IHAuT3BlcmF0b3JMaXN0O2xldCB5O3RoaXMub2MmJih5PWF3YWl0IGUucGFyc2VNYXJrZWRDb250ZW50UHJvcHModGhpcy5vYyxudWxsKSk7dm9pZCAwIT09eSYmYi5hZGRPcChyLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIix5XSk7Yi5hZGRPcChyLk9QUy5iZWdpbkFubm90YXRpb24sW2MuaWQsYy5yZWN0LG0sZyxoXSk7YXdhaXQgZS5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTpsLHRhc2s6dCxyZXNvdXJjZXM6ZCxvcGVyYXRvckxpc3Q6YixmYWxsYmFja0ZvbnREaWN0OnRoaXMuX2ZhbGxiYWNrRm9udERpY3R9KTtiLmFkZE9wKHIuT1BTLmVuZEFubm90YXRpb24sW10pO3ZvaWQgMCE9PXkmJmIuYWRkT3Aoci5PUFMuZW5kTWFya2VkQ29udGVudCxbXSk7dGhpcy5yZXNldCgpO3JldHVybntvcExpc3Q6YixzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6aH19YXN5bmMgc2F2ZShlLHQsYSl7cmV0dXJuIG51bGx9Z2V0IGhhc1RleHRDb250ZW50KCl7cmV0dXJuITF9YXN5bmMgZXh0cmFjdFRleHRDb250ZW50KGUsdCxhKXtpZighdGhpcy5hcHBlYXJhbmNlKXJldHVybjtjb25zdCBuPWF3YWl0IHRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIkZvbnQiLCJQcm9wZXJ0aWVzIiwiWE9iamVjdCJdLHRoaXMuYXBwZWFyYW5jZSksaT1bXSxzPVtdO2xldCBvPW51bGw7Y29uc3QgYz17ZGVzaXJlZFNpemU6TWF0aC5JbmZpbml0eSxyZWFkeTohMCxlbnF1ZXVlKGUsdCl7Zm9yKGNvbnN0IHQgb2YgZS5pdGVtcylpZih2b2lkIDAhPT10LnN0cil7b3x8PXQudHJhbnNmb3JtLnNsaWNlKC0yKTtzLnB1c2godC5zdHIpO2lmKHQuaGFzRU9MKXtpLnB1c2gocy5qb2luKCIiKSk7cy5sZW5ndGg9MH19fX07YXdhaXQgZS5nZXRUZXh0Q29udGVudCh7c3RyZWFtOnRoaXMuYXBwZWFyYW5jZSx0YXNrOnQscmVzb3VyY2VzOm4saW5jbHVkZU1hcmtlZENvbnRlbnQ6ITAsc2luazpjLHZpZXdCb3g6YX0pO3RoaXMucmVzZXQoKTtzLmxlbmd0aCYmaS5wdXNoKHMuam9pbigiIikpO2lmKGkubGVuZ3RoPjF8fGlbMF0pe2NvbnN0IGU9dGhpcy5hcHBlYXJhbmNlLmRpY3QsdD1lLmdldEFycmF5KCJCQm94Iil8fFswLDAsMSwxXSxhPWUuZ2V0QXJyYXkoIk1hdHJpeCIpfHxbMSwwLDAsMSwwLDBdLG49dGhpcy5kYXRhLnJlY3Qscz1nZXRUcmFuc2Zvcm1NYXRyaXgobix0LGEpO3NbNF0tPW5bMF07c1s1XS09blsxXTtvPXIuVXRpbC5hcHBseVRyYW5zZm9ybShvLHMpO289ci5VdGlsLmFwcGx5VHJhbnNmb3JtKG8sYSk7dGhpcy5kYXRhLnRleHRQb3NpdGlvbj1vO3RoaXMuZGF0YS50ZXh0Q29udGVudD1pfX1nZXRGaWVsZE9iamVjdCgpe3JldHVybiB0aGlzLmRhdGEua2lkSWRzP3tpZDp0aGlzLmRhdGEuaWQsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHR5cGU6IiIsa2lkSWRzOnRoaXMuZGF0YS5raWRJZHMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHJvdGF0aW9uOnRoaXMucm90YXRpb259Om51bGx9cmVzZXQoKXtmb3IoY29uc3QgZSBvZiB0aGlzLl9zdHJlYW1zKWUucmVzZXQoKX1fY29uc3RydWN0RmllbGROYW1lKGUpe2lmKCFlLmhhcygiVCIpJiYhZS5oYXMoIlBhcmVudCIpKXsoMCxyLndhcm4pKCJVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLiIpO3JldHVybiIifWlmKCFlLmhhcygiUGFyZW50IikpcmV0dXJuKDAsci5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIlQiKSk7Y29uc3QgdD1bXTtlLmhhcygiVCIpJiZ0LnVuc2hpZnQoKDAsci5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIlQiKSkpO2xldCBhPWU7Y29uc3Qgbj1uZXcgcy5SZWZTZXQ7ZS5vYmpJZCYmbi5wdXQoZS5vYmpJZCk7Zm9yKDthLmhhcygiUGFyZW50Iik7KXthPWEuZ2V0KCJQYXJlbnQiKTtpZighKGEgaW5zdGFuY2VvZiBzLkRpY3QpfHxhLm9iaklkJiZuLmhhcyhhLm9iaklkKSlicmVhazthLm9iaklkJiZuLnB1dChhLm9iaklkKTthLmhhcygiVCIpJiZ0LnVuc2hpZnQoKDAsci5zdHJpbmdUb1BERlN0cmluZykoYS5nZXQoIlQiKSkpfXJldHVybiB0LmpvaW4oIi4iKX19dC5Bbm5vdGF0aW9uPUFubm90YXRpb247Y2xhc3MgQW5ub3RhdGlvbkJvcmRlclN0eWxle2NvbnN0cnVjdG9yKCl7dGhpcy53aWR0aD0xO3RoaXMuc3R5bGU9ci5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEO3RoaXMuZGFzaEFycmF5PVszXTt0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXM9MDt0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzPTB9c2V0V2lkdGgoZSx0PVswLDAsMCwwXSl7aWYoZSBpbnN0YW5jZW9mIHMuTmFtZSl0aGlzLndpZHRoPTA7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKGU+MCl7Y29uc3QgYT0odFsyXS10WzBdKS8yLG49KHRbM10tdFsxXSkvMjtpZihhPjAmJm4+MCYmKGU+YXx8ZT5uKSl7KDAsci53YXJuKShgQW5ub3RhdGlvbkJvcmRlclN0eWxlLnNldFdpZHRoIC0gaWdub3Jpbmcgd2lkdGg6ICR7ZX1gKTtlPTF9fXRoaXMud2lkdGg9ZX19c2V0U3R5bGUoZSl7aWYoZSBpbnN0YW5jZW9mIHMuTmFtZSlzd2l0Y2goZS5uYW1lKXtjYXNlIlMiOnRoaXMuc3R5bGU9ci5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEO2JyZWFrO2Nhc2UiRCI6dGhpcy5zdHlsZT1yLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuREFTSEVEO2JyZWFrO2Nhc2UiQiI6dGhpcy5zdHlsZT1yLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuQkVWRUxFRDticmVhaztjYXNlIkkiOnRoaXMuc3R5bGU9ci5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLklOU0VUO2JyZWFrO2Nhc2UiVSI6dGhpcy5zdHlsZT1yLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FfX1zZXREYXNoQXJyYXkoZSx0PSExKXtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wKXtsZXQgYT0hMCxyPSEwO2Zvcihjb25zdCB0IG9mIGUpe2lmKCEoK3Q+PTApKXthPSExO2JyZWFrfXQ+MCYmKHI9ITEpfWlmKGEmJiFyKXt0aGlzLmRhc2hBcnJheT1lO3QmJnRoaXMuc2V0U3R5bGUocy5OYW1lLmdldCgiRCIpKX1lbHNlIHRoaXMud2lkdGg9MH1lbHNlIGUmJih0aGlzLndpZHRoPTApfXNldEhvcml6b250YWxDb3JuZXJSYWRpdXMoZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz1lKX1zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYodGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz1lKX19dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGU9QW5ub3RhdGlvbkJvcmRlclN0eWxlO2NsYXNzIE1hcmt1cEFubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dH09ZTtpZih0LmhhcygiSVJUIikpe2NvbnN0IGU9dC5nZXRSYXcoIklSVCIpO3RoaXMuZGF0YS5pblJlcGx5VG89ZSBpbnN0YW5jZW9mIHMuUmVmP2UudG9TdHJpbmcoKTpudWxsO2NvbnN0IGE9dC5nZXQoIlJUIik7dGhpcy5kYXRhLnJlcGx5VHlwZT1hIGluc3RhbmNlb2Ygcy5OYW1lP2EubmFtZTpyLkFubm90YXRpb25SZXBseVR5cGUuUkVQTFl9bGV0IGE9bnVsbDtpZih0aGlzLmRhdGEucmVwbHlUeXBlPT09ci5Bbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKXtjb25zdCBlPXQuZ2V0KCJJUlQiKTt0aGlzLnNldFRpdGxlKGUuZ2V0KCJUIikpO3RoaXMuZGF0YS50aXRsZU9iaj10aGlzLl90aXRsZTt0aGlzLnNldENvbnRlbnRzKGUuZ2V0KCJDb250ZW50cyIpKTt0aGlzLmRhdGEuY29udGVudHNPYmo9dGhpcy5fY29udGVudHM7aWYoZS5oYXMoIkNyZWF0aW9uRGF0ZSIpKXt0aGlzLnNldENyZWF0aW9uRGF0ZShlLmdldCgiQ3JlYXRpb25EYXRlIikpO3RoaXMuZGF0YS5jcmVhdGlvbkRhdGU9dGhpcy5jcmVhdGlvbkRhdGV9ZWxzZSB0aGlzLmRhdGEuY3JlYXRpb25EYXRlPW51bGw7aWYoZS5oYXMoIk0iKSl7dGhpcy5zZXRNb2RpZmljYXRpb25EYXRlKGUuZ2V0KCJNIikpO3RoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlPXRoaXMubW9kaWZpY2F0aW9uRGF0ZX1lbHNlIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlPW51bGw7YT1lLmdldFJhdygiUG9wdXAiKTtpZihlLmhhcygiQyIpKXt0aGlzLnNldENvbG9yKGUuZ2V0QXJyYXkoIkMiKSk7dGhpcy5kYXRhLmNvbG9yPXRoaXMuY29sb3J9ZWxzZSB0aGlzLmRhdGEuY29sb3I9bnVsbH1lbHNle3RoaXMuZGF0YS50aXRsZU9iaj10aGlzLl90aXRsZTt0aGlzLnNldENyZWF0aW9uRGF0ZSh0LmdldCgiQ3JlYXRpb25EYXRlIikpO3RoaXMuZGF0YS5jcmVhdGlvbkRhdGU9dGhpcy5jcmVhdGlvbkRhdGU7YT10LmdldFJhdygiUG9wdXAiKTt0LmhhcygiQyIpfHwodGhpcy5kYXRhLmNvbG9yPW51bGwpfXRoaXMuZGF0YS5wb3B1cFJlZj1hIGluc3RhbmNlb2Ygcy5SZWY/YS50b1N0cmluZygpOm51bGw7dC5oYXMoIlJDIikmJih0aGlzLmRhdGEucmljaFRleHQ9Yi5YRkFGYWN0b3J5LmdldFJpY2hUZXh0QXNIdG1sKHQuZ2V0KCJSQyIpKSl9c2V0Q3JlYXRpb25EYXRlKGUpe3RoaXMuY3JlYXRpb25EYXRlPSJzdHJpbmciPT10eXBlb2YgZT9lOm51bGx9X3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmUsZXh0cmE6dCxzdHJva2VDb2xvcjphLGZpbGxDb2xvcjpyLGJsZW5kTW9kZTpuLHN0cm9rZUFscGhhOmksZmlsbEFscGhhOmMscG9pbnRzQ2FsbGJhY2s6bH0pe2xldCBoPU51bWJlci5NQVhfVkFMVUUsdT1OdW1iZXIuTUFYX1ZBTFVFLGQ9TnVtYmVyLk1JTl9WQUxVRSxmPU51bWJlci5NSU5fVkFMVUU7Y29uc3QgZz1bInEiXTt0JiZnLnB1c2godCk7YSYmZy5wdXNoKGAke2FbMF19ICR7YVsxXX0gJHthWzJdfSBSR2ApO3ImJmcucHVzaChgJHtyWzBdfSAke3JbMV19ICR7clsyXX0gcmdgKTtsZXQgcD10aGlzLmRhdGEucXVhZFBvaW50cztwfHwocD1bW3t4OnRoaXMucmVjdGFuZ2xlWzBdLHk6dGhpcy5yZWN0YW5nbGVbM119LHt4OnRoaXMucmVjdGFuZ2xlWzJdLHk6dGhpcy5yZWN0YW5nbGVbM119LHt4OnRoaXMucmVjdGFuZ2xlWzBdLHk6dGhpcy5yZWN0YW5nbGVbMV19LHt4OnRoaXMucmVjdGFuZ2xlWzJdLHk6dGhpcy5yZWN0YW5nbGVbMV19XV0pO2Zvcihjb25zdCBlIG9mIHApe2NvbnN0W3QsYSxyLG5dPWwoZyxlKTtoPU1hdGgubWluKGgsdCk7ZD1NYXRoLm1heChkLGEpO3U9TWF0aC5taW4odSxyKTtmPU1hdGgubWF4KGYsbil9Zy5wdXNoKCJRIik7Y29uc3QgbT1uZXcgcy5EaWN0KGUpLGI9bmV3IHMuRGljdChlKTtiLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiRm9ybSIpKTtjb25zdCB5PW5ldyBvLlN0cmluZ1N0cmVhbShnLmpvaW4oIiAiKSk7eS5kaWN0PWI7bS5zZXQoIkZtMCIseSk7Y29uc3Qgdz1uZXcgcy5EaWN0KGUpO24mJncuc2V0KCJCTSIscy5OYW1lLmdldChuKSk7Im51bWJlciI9PXR5cGVvZiBpJiZ3LnNldCgiQ0EiLGkpOyJudW1iZXIiPT10eXBlb2YgYyYmdy5zZXQoImNhIixjKTtjb25zdCBTPW5ldyBzLkRpY3QoZSk7Uy5zZXQoIkdTMCIsdyk7Y29uc3QgeD1uZXcgcy5EaWN0KGUpO3guc2V0KCJFeHRHU3RhdGUiLFMpO3guc2V0KCJYT2JqZWN0IixtKTtjb25zdCBDPW5ldyBzLkRpY3QoZSk7Qy5zZXQoIlJlc291cmNlcyIseCk7Y29uc3Qgaz10aGlzLmRhdGEucmVjdD1baCx1LGQsZl07Qy5zZXQoIkJCb3giLGspO3RoaXMuYXBwZWFyYW5jZT1uZXcgby5TdHJpbmdTdHJlYW0oIi9HUzAgZ3MgL0ZtMCBEbyIpO3RoaXMuYXBwZWFyYW5jZS5kaWN0PUM7dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSx5KX1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QW5ub3RhdGlvbihlLHQsYSxyKXtjb25zdCBuPXQucmVmfHw9ZS5nZXROZXdUZW1wb3JhcnlSZWYoKSxpPWF3YWl0IHRoaXMuY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbSh0LGUscikscz1bXTtsZXQgbztpZihpKXtjb25zdCByPWUuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7bz10aGlzLmNyZWF0ZU5ld0RpY3QodCxlLHthcFJlZjpyfSk7YXdhaXQoMCxtLndyaXRlT2JqZWN0KShyLGkscyxlKTthLnB1c2goe3JlZjpyLGRhdGE6cy5qb2luKCIiKX0pfWVsc2Ugbz10aGlzLmNyZWF0ZU5ld0RpY3QodCxlLHt9KTtOdW1iZXIuaXNJbnRlZ2VyKHQucGFyZW50VHJlZUlkKSYmby5zZXQoIlN0cnVjdFBhcmVudCIsdC5wYXJlbnRUcmVlSWQpO3MubGVuZ3RoPTA7YXdhaXQoMCxtLndyaXRlT2JqZWN0KShuLG8scyxlKTtyZXR1cm57cmVmOm4sZGF0YTpzLmpvaW4oIiIpfX1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKGUsdCxhLHIpe2NvbnN0IG49YXdhaXQgdGhpcy5jcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKGEsdCxyKSxpPXRoaXMuY3JlYXRlTmV3RGljdChhLHQse2FwOm59KSxzPW5ldyB0aGlzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcih7ZGljdDppLHhyZWY6dCxhbm5vdGF0aW9uR2xvYmFsczplLGV2YWx1YXRvck9wdGlvbnM6ci5ldmFsdWF0b3JPcHRpb25zfSk7YS5yZWYmJihzLnJlZj1zLnJlZlRvUmVwbGFjZT1hLnJlZik7cmV0dXJuIHN9fXQuTWFya3VwQW5ub3RhdGlvbj1NYXJrdXBBbm5vdGF0aW9uO2NsYXNzIFdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOmEsYW5ub3RhdGlvbkdsb2JhbHM6aX09ZSxvPXRoaXMuZGF0YTt0aGlzLl9uZWVkQXBwZWFyYW5jZXM9ZS5uZWVkQXBwZWFyYW5jZXM7by5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLldJREdFVDt2b2lkIDA9PT1vLmZpZWxkTmFtZSYmKG8uZmllbGROYW1lPXRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZSh0KSk7dm9pZCAwPT09by5hY3Rpb25zJiYoby5hY3Rpb25zPSgwLG4uY29sbGVjdEFjdGlvbnMpKGEsdCxyLkFubm90YXRpb25BY3Rpb25FdmVudFR5cGUpKTtsZXQgYz0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJWIixnZXRBcnJheTohMH0pO28uZmllbGRWYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUoYyk7Y29uc3QgbD0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJEViIsZ2V0QXJyYXk6ITB9KTtvLmRlZmF1bHRGaWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShsKTtpZih2b2lkIDA9PT1jJiZpLnhmYURhdGFzZXRzKXtjb25zdCBlPXRoaXMuX3RpdGxlLnN0cjtpZihlKXt0aGlzLl9oYXNWYWx1ZUZyb21YRkE9ITA7by5maWVsZFZhbHVlPWM9aS54ZmFEYXRhc2V0cy5nZXRWYWx1ZShlKX19dm9pZCAwPT09YyYmbnVsbCE9PW8uZGVmYXVsdEZpZWxkVmFsdWUmJihvLmZpZWxkVmFsdWU9by5kZWZhdWx0RmllbGRWYWx1ZSk7by5hbHRlcm5hdGl2ZVRleHQ9KDAsci5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIlRVIil8fCIiKTt0aGlzLnNldERlZmF1bHRBcHBlYXJhbmNlKGUpO28uaGFzQXBwZWFyYW5jZXx8PXRoaXMuX25lZWRBcHBlYXJhbmNlcyYmdm9pZCAwIT09by5maWVsZFZhbHVlJiZudWxsIT09by5maWVsZFZhbHVlO2NvbnN0IGg9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0LGtleToiRlQifSk7by5maWVsZFR5cGU9aCBpbnN0YW5jZW9mIHMuTmFtZT9oLm5hbWU6bnVsbDtjb25zdCB1PSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6IkRSIn0pLGQ9aS5hY3JvRm9ybS5nZXQoIkRSIiksZj10aGlzLmFwcGVhcmFuY2U/LmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTt0aGlzLl9maWVsZFJlc291cmNlcz17bG9jYWxSZXNvdXJjZXM6dSxhY3JvRm9ybVJlc291cmNlczpkLGFwcGVhcmFuY2VSZXNvdXJjZXM6ZixtZXJnZWRSZXNvdXJjZXM6cy5EaWN0Lm1lcmdlKHt4cmVmOmEsZGljdEFycmF5Olt1LGYsZF0sbWVyZ2VTdWJEaWN0czohMH0pfTtvLmZpZWxkRmxhZ3M9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0LGtleToiRmYifSk7KCFOdW1iZXIuaXNJbnRlZ2VyKG8uZmllbGRGbGFncyl8fG8uZmllbGRGbGFnczwwKSYmKG8uZmllbGRGbGFncz0wKTtvLnJlYWRPbmx5PXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5SRUFET05MWSk7by5yZXF1aXJlZD10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUkVRVUlSRUQpO28uaGlkZGVuPXRoaXMuX2hhc0ZsYWcoby5hbm5vdGF0aW9uRmxhZ3Msci5Bbm5vdGF0aW9uRmxhZy5ISURERU4pfHx0aGlzLl9oYXNGbGFnKG8uYW5ub3RhdGlvbkZsYWdzLHIuQW5ub3RhdGlvbkZsYWcuTk9WSUVXKX1fZGVjb2RlRm9ybVZhbHVlKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UuZmlsdGVyKChlPT4ic3RyaW5nIj09dHlwZW9mIGUpKS5tYXAoKGU9PigwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUpKSk6ZSBpbnN0YW5jZW9mIHMuTmFtZT8oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlLm5hbWUpOiJzdHJpbmciPT10eXBlb2YgZT8oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlKTpudWxsfWhhc0ZpZWxkRmxhZyhlKXtyZXR1cm4hISh0aGlzLmRhdGEuZmllbGRGbGFncyZlKX1faXNWaWV3YWJsZShlKXtyZXR1cm4hdGhpcy5faGFzRmxhZyhlLHIuQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKX1tdXN0QmVWaWV3ZWQoZSx0KXtyZXR1cm4gdD90aGlzLnZpZXdhYmxlOnN1cGVyLm11c3RCZVZpZXdlZChlLHQpJiYhdGhpcy5faGFzRmxhZyh0aGlzLmZsYWdzLHIuQW5ub3RhdGlvbkZsYWcuTk9WSUVXKX1nZXRSb3RhdGlvbk1hdHJpeChlKXtsZXQgdD1lPy5nZXQodGhpcy5kYXRhLmlkKT8ucm90YXRpb247dm9pZCAwPT09dCYmKHQ9dGhpcy5yb3RhdGlvbik7aWYoMD09PXQpcmV0dXJuIHIuSURFTlRJVFlfTUFUUklYO2NvbnN0IGE9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0saT10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXTtyZXR1cm4oMCxuLmdldFJvdGF0aW9uTWF0cml4KSh0LGEsaSl9Z2V0Qm9yZGVyQW5kQmFja2dyb3VuZEFwcGVhcmFuY2VzKGUpe2xldCB0PWU/LmdldCh0aGlzLmRhdGEuaWQpPy5yb3RhdGlvbjt2b2lkIDA9PT10JiYodD10aGlzLnJvdGF0aW9uKTtpZighdGhpcy5iYWNrZ3JvdW5kQ29sb3ImJiF0aGlzLmJvcmRlckNvbG9yKXJldHVybiIiO2NvbnN0IGE9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0scj10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxuPTA9PT10fHwxODA9PT10P2AwIDAgJHthfSAke3J9IHJlYDpgMCAwICR7cn0gJHthfSByZWA7bGV0IHM9IiI7dGhpcy5iYWNrZ3JvdW5kQ29sb3ImJihzPWAkeygwLGkuZ2V0UGRmQ29sb3IpKHRoaXMuYmFja2dyb3VuZENvbG9yLCEwKX0gJHtufSBmIGApO2lmKHRoaXMuYm9yZGVyQ29sb3Ipe3MrPWAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDF9IHcgJHsoMCxpLmdldFBkZkNvbG9yKSh0aGlzLmJvcmRlckNvbG9yLCExKX0gJHtufSBTIGB9cmV0dXJuIHN9YXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSl7aWYobiYmISh0aGlzIGluc3RhbmNlb2YgU2lnbmF0dXJlV2lkZ2V0QW5ub3RhdGlvbikmJiF0aGlzLmRhdGEubm9IVE1MJiYhdGhpcy5kYXRhLmhhc093bkNhbnZhcylyZXR1cm57b3BMaXN0Om5ldyBwLk9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITAsc2VwYXJhdGVDYW52YXM6ITF9O2lmKCF0aGlzLl9oYXNUZXh0KXJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZSx0LGEsbixpKTtjb25zdCBzPWF3YWl0IHRoaXMuX2dldEFwcGVhcmFuY2UoZSx0LGEsaSk7aWYodGhpcy5hcHBlYXJhbmNlJiZudWxsPT09cylyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSk7Y29uc3QgYz1uZXcgcC5PcGVyYXRvckxpc3Q7aWYoIXRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHxudWxsPT09cylyZXR1cm57b3BMaXN0OmMsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfTtjb25zdCBsPSEhKHRoaXMuZGF0YS5oYXNPd25DYW52YXMmJmEmci5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLGg9WzAsMCx0aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSx0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXV0sdT1nZXRUcmFuc2Zvcm1NYXRyaXgodGhpcy5kYXRhLnJlY3QsaCxbMSwwLDAsMSwwLDBdKTtsZXQgZDt0aGlzLm9jJiYoZD1hd2FpdCBlLnBhcnNlTWFya2VkQ29udGVudFByb3BzKHRoaXMub2MsbnVsbCkpO3ZvaWQgMCE9PWQmJmMuYWRkT3Aoci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsWyJPQyIsZF0pO2MuYWRkT3Aoci5PUFMuYmVnaW5Bbm5vdGF0aW9uLFt0aGlzLmRhdGEuaWQsdGhpcy5kYXRhLnJlY3QsdSx0aGlzLmdldFJvdGF0aW9uTWF0cml4KGkpLGxdKTtjb25zdCBmPW5ldyBvLlN0cmluZ1N0cmVhbShzKTthd2FpdCBlLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmYsdGFzazp0LHJlc291cmNlczp0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMsb3BlcmF0b3JMaXN0OmN9KTtjLmFkZE9wKHIuT1BTLmVuZEFubm90YXRpb24sW10pO3ZvaWQgMCE9PWQmJmMuYWRkT3Aoci5PUFMuZW5kTWFya2VkQ29udGVudCxbXSk7cmV0dXJue29wTGlzdDpjLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczpsfX1fZ2V0TUtEaWN0KGUpe2NvbnN0IHQ9bmV3IHMuRGljdChudWxsKTtlJiZ0LnNldCgiUiIsZSk7dGhpcy5ib3JkZXJDb2xvciYmdC5zZXQoIkJDIixnZXRQZGZDb2xvckFycmF5KHRoaXMuYm9yZGVyQ29sb3IpKTt0aGlzLmJhY2tncm91bmRDb2xvciYmdC5zZXQoIkJHIixnZXRQZGZDb2xvckFycmF5KHRoaXMuYmFja2dyb3VuZENvbG9yKSk7cmV0dXJuIHQuc2l6ZT4wP3Q6bnVsbH1hbWVuZFNhdmVkRGljdChlLHQpe31hc3luYyBzYXZlKGUsdCxhKXtjb25zdCBpPWE/LmdldCh0aGlzLmRhdGEuaWQpO2xldCBjPWk/LnZhbHVlLGw9aT8ucm90YXRpb247aWYoYz09PXRoaXMuZGF0YS5maWVsZFZhbHVlfHx2b2lkIDA9PT1jKXtpZighdGhpcy5faGFzVmFsdWVGcm9tWEZBJiZ2b2lkIDA9PT1sKXJldHVybiBudWxsO2N8fD10aGlzLmRhdGEuZmllbGRWYWx1ZX1pZih2b2lkIDA9PT1sJiYhdGhpcy5faGFzVmFsdWVGcm9tWEZBJiZBcnJheS5pc0FycmF5KGMpJiZBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5maWVsZFZhbHVlKSYmYy5sZW5ndGg9PT10aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGgmJmMuZXZlcnkoKChlLHQpPT5lPT09dGhpcy5kYXRhLmZpZWxkVmFsdWVbdF0pKSlyZXR1cm4gbnVsbDt2b2lkIDA9PT1sJiYobD10aGlzLnJvdGF0aW9uKTtsZXQgaD1udWxsO2lmKCF0aGlzLl9uZWVkQXBwZWFyYW5jZXMpe2g9YXdhaXQgdGhpcy5fZ2V0QXBwZWFyYW5jZShlLHQsci5SZW5kZXJpbmdJbnRlbnRGbGFnLlNBVkUsYSk7aWYobnVsbD09PWgpcmV0dXJuIG51bGx9bGV0IHU9ITE7aWYoaD8ubmVlZEFwcGVhcmFuY2VzKXt1PSEwO2g9bnVsbH1jb25zdHt4cmVmOmR9PWUsZj1kLmZldGNoSWZSZWYodGhpcy5yZWYpO2lmKCEoZiBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuIG51bGw7Y29uc3QgZz1uZXcgcy5EaWN0KGQpO2Zvcihjb25zdCBlIG9mIGYuZ2V0S2V5cygpKSJBUCIhPT1lJiZnLnNldChlLGYuZ2V0UmF3KGUpKTtjb25zdCBwPXtwYXRoOnRoaXMuZGF0YS5maWVsZE5hbWUsdmFsdWU6Y30sZW5jb2Rlcj1lPT4oMCxuLmlzQXNjaWkpKGUpP2U6KDAsbi5zdHJpbmdUb1VURjE2U3RyaW5nKShlLCEwKTtnLnNldCgiViIsQXJyYXkuaXNBcnJheShjKT9jLm1hcChlbmNvZGVyKTplbmNvZGVyKGMpKTt0aGlzLmFtZW5kU2F2ZWREaWN0KGEsZyk7Y29uc3QgYj10aGlzLl9nZXRNS0RpY3QobCk7YiYmZy5zZXQoIk1LIixiKTtjb25zdCB5PVtdLHc9W3tyZWY6dGhpcy5yZWYsZGF0YToiIix4ZmE6cCxuZWVkQXBwZWFyYW5jZXM6dX1dO2lmKG51bGwhPT1oKXtjb25zdCBlPWQuZ2V0TmV3VGVtcG9yYXJ5UmVmKCksdD1uZXcgcy5EaWN0KGQpO2cuc2V0KCJBUCIsdCk7dC5zZXQoIk4iLGUpO2NvbnN0IG49dGhpcy5fZ2V0U2F2ZUZpZWxkUmVzb3VyY2VzKGQpLGk9bmV3IG8uU3RyaW5nU3RyZWFtKGgpLGM9aS5kaWN0PW5ldyBzLkRpY3QoZCk7Yy5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZvcm0iKSk7Yy5zZXQoIlJlc291cmNlcyIsbik7Yy5zZXQoIkJCb3giLFswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dKTtjb25zdCBsPXRoaXMuZ2V0Um90YXRpb25NYXRyaXgoYSk7bCE9PXIuSURFTlRJVFlfTUFUUklYJiZjLnNldCgiTWF0cml4IixsKTthd2FpdCgwLG0ud3JpdGVPYmplY3QpKGUsaSx5LGQpO3cucHVzaCh7cmVmOmUsZGF0YTp5LmpvaW4oIiIpLHhmYTpudWxsLG5lZWRBcHBlYXJhbmNlczohMX0pO3kubGVuZ3RoPTB9Zy5zZXQoIk0iLGBEOiR7KDAsci5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO2F3YWl0KDAsbS53cml0ZU9iamVjdCkodGhpcy5yZWYsZyx5LGQpO3dbMF0uZGF0YT15LmpvaW4oIiIpO3JldHVybiB3fWFzeW5jIF9nZXRBcHBlYXJhbmNlKGUsdCxhLHMpe2lmKHRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCkpcmV0dXJuIG51bGw7Y29uc3Qgbz1zPy5nZXQodGhpcy5kYXRhLmlkKTtsZXQgYyxsO2lmKG8pe2M9by5mb3JtYXR0ZWRWYWx1ZXx8by52YWx1ZTtsPW8ucm90YXRpb259aWYodm9pZCAwPT09bCYmdm9pZCAwPT09YyYmIXRoaXMuX25lZWRBcHBlYXJhbmNlcyYmKCF0aGlzLl9oYXNWYWx1ZUZyb21YRkF8fHRoaXMuYXBwZWFyYW5jZSkpcmV0dXJuIG51bGw7Y29uc3QgaD10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhzKTtpZih2b2lkIDA9PT1jKXtjPXRoaXMuZGF0YS5maWVsZFZhbHVlO2lmKCFjKXJldHVybmAvVHggQk1DIHEgJHtofVEgRU1DYH1BcnJheS5pc0FycmF5KGMpJiYxPT09Yy5sZW5ndGgmJihjPWNbMF0pOygwLHIuYXNzZXJ0KSgic3RyaW5nIj09dHlwZW9mIGMsIkV4cGVjdGVkIGB2YWx1ZWAgdG8gYmUgYSBzdHJpbmcuIik7Yz1jLnRyaW0oKTtpZih0aGlzLmRhdGEuY29tYm8pe2NvbnN0IGU9dGhpcy5kYXRhLm9wdGlvbnMuZmluZCgoKHtleHBvcnRWYWx1ZTplfSk9PmM9PT1lKSk7Yz1lPy5kaXNwbGF5VmFsdWV8fGN9aWYoIiI9PT1jKXJldHVybmAvVHggQk1DIHEgJHtofVEgRU1DYDt2b2lkIDA9PT1sJiYobD10aGlzLnJvdGF0aW9uKTtsZXQgdSxkPS0xO2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpe3U9Yy5zcGxpdCgvXHJcbj98XG4vKS5tYXAoKGU9PmUubm9ybWFsaXplKCJORkMiKSkpO2Q9dS5sZW5ndGh9ZWxzZSB1PVtjLnJlcGxhY2UoL1xyXG4/fFxuLywiIikubm9ybWFsaXplKCJORkMiKV07bGV0IGY9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sZz10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXTs5MCE9PWwmJjI3MCE9PWx8fChbZyxmXT1bZixnXSk7dGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fCh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9Ii9IZWx2ZXRpY2EgMCBUZiAwIGciKSk7bGV0IHAsbSxiLHk9YXdhaXQgV2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Rm9udERhdGEoZSx0LHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEsdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzKTtjb25zdCB3PVtdO2xldCBTPSExO2Zvcihjb25zdCBlIG9mIHUpe2NvbnN0IHQ9eS5lbmNvZGVTdHJpbmcoZSk7dC5sZW5ndGg+MSYmKFM9ITApO3cucHVzaCh0LmpvaW4oIiIpKX1pZihTJiZhJnIuUmVuZGVyaW5nSW50ZW50RmxhZy5TQVZFKXJldHVybntuZWVkQXBwZWFyYW5jZXM6ITB9O2lmKFMmJnRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKXtjb25zdCBhPXRoaXMuZGF0YS5jb21iPyJtb25vc3BhY2UiOiJzYW5zLXNlcmlmIixyPW5ldyBpLkZha2VVbmljb2RlRm9udChlLnhyZWYsYSkscz1yLmNyZWF0ZUZvbnRSZXNvdXJjZXModS5qb2luKCIiKSksbz1zLmdldFJhdygiRm9udCIpO2lmKHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5oYXMoIkZvbnQiKSl7Y29uc3QgZT10aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuZ2V0KCJGb250Iik7Zm9yKGNvbnN0IHQgb2Ygby5nZXRLZXlzKCkpZS5zZXQodCxvLmdldFJhdyh0KSl9ZWxzZSB0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuc2V0KCJGb250IixvKTtjb25zdCBsPXIuZm9udE5hbWUubmFtZTt5PWF3YWl0IFdpZGdldEFubm90YXRpb24uX2dldEZvbnREYXRhKGUsdCx7Zm9udE5hbWU6bCxmb250U2l6ZTowfSxzKTtmb3IobGV0IGU9MCx0PXcubGVuZ3RoO2U8dDtlKyspd1tlXT0oMCxuLnN0cmluZ1RvVVRGMTZTdHJpbmcpKHVbZV0pO2NvbnN0IGg9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEpO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemU9MDt0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnROYW1lPWw7W3AsbSxiXT10aGlzLl9jb21wdXRlRm9udFNpemUoZi0yLGctNCxjLHksZCk7dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT1ofWVsc2V7dGhpcy5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR8fCgwLHIud2FybikoIl9nZXRBcHBlYXJhbmNlOiBPZmZzY3JlZW5DYW52YXMgaXMgbm90IHN1cHBvcnRlZCwgYW5ub3RhdGlvbiBtYXkgbm90IHJlbmRlciBjb3JyZWN0bHkuIik7W3AsbSxiXT10aGlzLl9jb21wdXRlRm9udFNpemUoZi0yLGctNCxjLHksZCl9bGV0IHg9eS5kZXNjZW50O3g9aXNOYU4oeCk/ci5CQVNFTElORV9GQUNUT1IqYjpNYXRoLm1heChyLkJBU0VMSU5FX0ZBQ1RPUipiLE1hdGguYWJzKHgpKm0pO2NvbnN0IEM9TWF0aC5taW4oTWF0aC5mbG9vcigoZi1tKS8yKSwxKSxrPXRoaXMuZGF0YS50ZXh0QWxpZ25tZW50O2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpcmV0dXJuIHRoaXMuX2dldE11bHRpbGluZUFwcGVhcmFuY2UocCx3LHksbSxnLGYsaywyLEMseCxiLHMpO2lmKHRoaXMuZGF0YS5jb21iKXJldHVybiB0aGlzLl9nZXRDb21iQXBwZWFyYW5jZShwLHksd1swXSxtLGcsZiwyLEMseCxiLHMpO2NvbnN0IHY9Qyt4O2lmKDA9PT1rfHxrPjIpcmV0dXJuYC9UeCBCTUMgcSAke2h9QlQgYCtwK2AgMSAwIDAgMSAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKDIpfSAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKHYpfSBUbSAoJHsoMCxuLmVzY2FwZVN0cmluZykod1swXSl9KSBUaiBFVCBRIEVNQ2A7cmV0dXJuYC9UeCBCTUMgcSAke2h9QlQgYCtwK2AgMSAwIDAgMSAwIDAgVG0gJHt0aGlzLl9yZW5kZXJUZXh0KHdbMF0seSxtLGcsayx7c2hpZnQ6MH0sMix2KX0gRVQgUSBFTUNgfXN0YXRpYyBhc3luYyBfZ2V0Rm9udERhdGEoZSx0LGEscil7Y29uc3Qgbj1uZXcgcC5PcGVyYXRvckxpc3QsaT17Zm9udDpudWxsLGNsb25lKCl7cmV0dXJuIHRoaXN9fSx7Zm9udE5hbWU6byxmb250U2l6ZTpjfT1hO2F3YWl0IGUuaGFuZGxlU2V0Rm9udChyLFtvJiZzLk5hbWUuZ2V0KG8pLGNdLG51bGwsbix0LGksbnVsbCk7cmV0dXJuIGkuZm9udH1fZ2V0VGV4dFdpZHRoKGUsdCl7cmV0dXJuIHQuY2hhcnNUb0dseXBocyhlKS5yZWR1Y2UoKChlLHQpPT5lK3Qud2lkdGgpLDApLzFlM31fY29tcHV0ZUZvbnRTaXplKGUsdCxhLG4scyl7bGV0e2ZvbnRTaXplOm99PXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEsYz0ob3x8MTIpKnIuTElORV9GQUNUT1IsbD1NYXRoLnJvdW5kKGUvYyk7aWYoIW8pe2NvbnN0IHJvdW5kV2l0aFR3b0RpZ2l0cz1lPT5NYXRoLmZsb29yKDEwMCplKS8xMDA7aWYoLTE9PT1zKXtjb25zdCBpPXRoaXMuX2dldFRleHRXaWR0aChhLG4pO289cm91bmRXaXRoVHdvRGlnaXRzKE1hdGgubWluKGUvci5MSU5FX0ZBQ1RPUixpPnQ/dC9pOjEvMCkpO2w9MX1lbHNle2NvbnN0IGk9YS5zcGxpdCgvXHJcbj98XG4vKSxoPVtdO2Zvcihjb25zdCBlIG9mIGkpe2NvbnN0IHQ9bi5lbmNvZGVTdHJpbmcoZSkuam9pbigiIiksYT1uLmNoYXJzVG9HbHlwaHModCkscj1uLmdldENoYXJQb3NpdGlvbnModCk7aC5wdXNoKHtsaW5lOnQsZ2x5cGhzOmEscG9zaXRpb25zOnJ9KX1jb25zdCBpc1Rvb0JpZz1hPT57bGV0IHI9MDtmb3IoY29uc3QgaSBvZiBoKXtyKz10aGlzLl9zcGxpdExpbmUobnVsbCxuLGEsdCxpKS5sZW5ndGgqYTtpZihyPmUpcmV0dXJuITB9cmV0dXJuITF9O2w9TWF0aC5tYXgobCxzKTtmb3IoOzspe2M9ZS9sO289cm91bmRXaXRoVHdvRGlnaXRzKGMvci5MSU5FX0ZBQ1RPUik7aWYoIWlzVG9vQmlnKG8pKWJyZWFrO2wrK319Y29uc3R7Zm9udE5hbWU6aCxmb250Q29sb3I6dX09dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YTt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0oMCxpLmNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKSh7Zm9udFNpemU6byxmb250TmFtZTpoLGZvbnRDb2xvcjp1fSl9cmV0dXJuW3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlLG8sZS9sXX1fcmVuZGVyVGV4dChlLHQsYSxyLGkscyxvLGMpe2xldCBsO2lmKDE9PT1pKXtsPShyLXRoaXMuX2dldFRleHRXaWR0aChlLHQpKmEpLzJ9ZWxzZSBpZigyPT09aSl7bD1yLXRoaXMuX2dldFRleHRXaWR0aChlLHQpKmEtb31lbHNlIGw9bztjb25zdCBoPSgwLG4ubnVtYmVyVG9TdHJpbmcpKGwtcy5zaGlmdCk7cy5zaGlmdD1sO3JldHVybmAke2h9ICR7Yz0oMCxuLm51bWJlclRvU3RyaW5nKShjKX0gVGQgKCR7KDAsbi5lc2NhcGVTdHJpbmcpKGUpfSkgVGpgfV9nZXRTYXZlRmllbGRSZXNvdXJjZXMoZSl7Y29uc3R7bG9jYWxSZXNvdXJjZXM6dCxhcHBlYXJhbmNlUmVzb3VyY2VzOmEsYWNyb0Zvcm1SZXNvdXJjZXM6cn09dGhpcy5fZmllbGRSZXNvdXJjZXMsbj10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPy5mb250TmFtZTtpZighbilyZXR1cm4gdHx8cy5EaWN0LmVtcHR5O2Zvcihjb25zdCBlIG9mW3QsYV0paWYoZSBpbnN0YW5jZW9mIHMuRGljdCl7Y29uc3QgdD1lLmdldCgiRm9udCIpO2lmKHQgaW5zdGFuY2VvZiBzLkRpY3QmJnQuaGFzKG4pKXJldHVybiBlfWlmKHIgaW5zdGFuY2VvZiBzLkRpY3Qpe2NvbnN0IGE9ci5nZXQoIkZvbnQiKTtpZihhIGluc3RhbmNlb2Ygcy5EaWN0JiZhLmhhcyhuKSl7Y29uc3Qgcj1uZXcgcy5EaWN0KGUpO3Iuc2V0KG4sYS5nZXRSYXcobikpO2NvbnN0IGk9bmV3IHMuRGljdChlKTtpLnNldCgiRm9udCIscik7cmV0dXJuIHMuRGljdC5tZXJnZSh7eHJlZjplLGRpY3RBcnJheTpbaSx0XSxtZXJnZVN1YkRpY3RzOiEwfSl9fXJldHVybiB0fHxzLkRpY3QuZW1wdHl9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm4gbnVsbH19Y2xhc3MgVGV4dFdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLnJlYWRPbmx5JiYhdGhpcy5kYXRhLm5vSFRNTDt0aGlzLl9oYXNUZXh0PSEwO2NvbnN0IHQ9ZS5kaWN0OyJzdHJpbmciIT10eXBlb2YgdGhpcy5kYXRhLmZpZWxkVmFsdWUmJih0aGlzLmRhdGEuZmllbGRWYWx1ZT0iIik7bGV0IGE9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0LGtleToiUSJ9KTsoIU51bWJlci5pc0ludGVnZXIoYSl8fGE8MHx8YT4yKSYmKGE9bnVsbCk7dGhpcy5kYXRhLnRleHRBbGlnbm1lbnQ9YTtsZXQgaT0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJNYXhMZW4ifSk7KCFOdW1iZXIuaXNJbnRlZ2VyKGkpfHxpPDApJiYoaT0wKTt0aGlzLmRhdGEubWF4TGVuPWk7dGhpcy5kYXRhLm11bHRpTGluZT10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKTt0aGlzLmRhdGEuY29tYj10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQikmJiF0aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKSYmIXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCkmJiF0aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuRklMRVNFTEVDVCkmJjAhPT10aGlzLmRhdGEubWF4TGVuO3RoaXMuZGF0YS5kb05vdFNjcm9sbD10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuRE9OT1RTQ1JPTEwpfWdldCBoYXNUZXh0Q29udGVudCgpe3JldHVybiEhdGhpcy5hcHBlYXJhbmNlJiYhdGhpcy5fbmVlZEFwcGVhcmFuY2VzfV9nZXRDb21iQXBwZWFyYW5jZShlLHQsYSxyLGkscyxvLGMsbCxoLHUpe2NvbnN0IGQ9aS90aGlzLmRhdGEubWF4TGVuLGY9dGhpcy5nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXModSksZz1bXSxwPXQuZ2V0Q2hhclBvc2l0aW9ucyhhKTtmb3IoY29uc3RbZSx0XW9mIHApZy5wdXNoKGAoJHsoMCxuLmVzY2FwZVN0cmluZykoYS5zdWJzdHJpbmcoZSx0KSl9KSBUamApO2NvbnN0IG09Zy5qb2luKGAgJHsoMCxuLm51bWJlclRvU3RyaW5nKShkKX0gMCBUZCBgKTtyZXR1cm5gL1R4IEJNQyBxICR7Zn1CVCBgK2UrYCAxIDAgMCAxICR7KDAsbi5udW1iZXJUb1N0cmluZykobyl9ICR7KDAsbi5udW1iZXJUb1N0cmluZykoYytsKX0gVG0gJHttfSBFVCBRIEVNQ2B9X2dldE11bHRpbGluZUFwcGVhcmFuY2UoZSx0LGEscixpLHMsbyxjLGwsaCx1LGQpe2NvbnN0IGY9W10sZz1pLTIqYyxwPXtzaGlmdDowfTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dFtlXSxzPXRoaXMuX3NwbGl0TGluZShuLGEscixnKTtmb3IobGV0IHQ9MCxuPXMubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49c1t0XSxkPTA9PT1lJiYwPT09dD8tbC0odS1oKTotdTtmLnB1c2godGhpcy5fcmVuZGVyVGV4dChuLGEscixpLG8scCxjLGQpKX19Y29uc3QgbT10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhkKSxiPWYuam9pbigiXG4iKTtyZXR1cm5gL1R4IEJNQyBxICR7bX1CVCBgK2UrYCAxIDAgMCAxIDAgJHsoMCxuLm51bWJlclRvU3RyaW5nKShzKX0gVG0gJHtifSBFVCBRIEVNQ2B9X3NwbGl0TGluZShlLHQsYSxyLG49e30pe2U9bi5saW5lfHxlO2NvbnN0IGk9bi5nbHlwaHN8fHQuY2hhcnNUb0dseXBocyhlKTtpZihpLmxlbmd0aDw9MSlyZXR1cm5bZV07Y29uc3Qgcz1uLnBvc2l0aW9uc3x8dC5nZXRDaGFyUG9zaXRpb25zKGUpLG89YS8xZTMsYz1bXTtsZXQgbD0tMSxoPS0xLHU9LTEsZD0wLGY9MDtmb3IobGV0IHQ9MCxhPWkubGVuZ3RoO3Q8YTt0Kyspe2NvbnN0W2Esbl09c1t0XSxnPWlbdF0scD1nLndpZHRoKm87aWYoIiAiPT09Zy51bmljb2RlKWlmKGYrcD5yKXtjLnB1c2goZS5zdWJzdHJpbmcoZCxhKSk7ZD1hO2Y9cDtsPS0xO3U9LTF9ZWxzZXtmKz1wO2w9YTtoPW47dT10fWVsc2UgaWYoZitwPnIpaWYoLTEhPT1sKXtjLnB1c2goZS5zdWJzdHJpbmcoZCxoKSk7ZD1oO3Q9dSsxO2w9LTE7Zj0wfWVsc2V7Yy5wdXNoKGUuc3Vic3RyaW5nKGQsYSkpO2Q9YTtmPXB9ZWxzZSBmKz1wfWQ8ZS5sZW5ndGgmJmMucHVzaChlLnN1YnN0cmluZyhkLGUubGVuZ3RoKSk7cmV0dXJuIGN9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm57aWQ6dGhpcy5kYXRhLmlkLHZhbHVlOnRoaXMuZGF0YS5maWVsZFZhbHVlLGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWV8fCIiLG11bHRpbGluZTp0aGlzLmRhdGEubXVsdGlMaW5lLHBhc3N3b3JkOnRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCksY2hhckxpbWl0OnRoaXMuZGF0YS5tYXhMZW4sY29tYjp0aGlzLmRhdGEuY29tYixlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6InRleHQifX19Y2xhc3MgQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT1udWxsO3RoaXMudW5jaGVja2VkQXBwZWFyYW5jZT1udWxsO3RoaXMuZGF0YS5jaGVja0JveD0hdGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKTt0aGlzLmRhdGEucmFkaW9CdXR0b249dGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKTt0aGlzLmRhdGEucHVzaEJ1dHRvbj10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUFVTSEJVVFRPTik7dGhpcy5kYXRhLmlzVG9vbHRpcE9ubHk9ITE7aWYodGhpcy5kYXRhLmNoZWNrQm94KXRoaXMuX3Byb2Nlc3NDaGVja0JveChlKTtlbHNlIGlmKHRoaXMuZGF0YS5yYWRpb0J1dHRvbil0aGlzLl9wcm9jZXNzUmFkaW9CdXR0b24oZSk7ZWxzZSBpZih0aGlzLmRhdGEucHVzaEJ1dHRvbil7dGhpcy5kYXRhLmhhc093bkNhbnZhcz0hMDt0aGlzLl9wcm9jZXNzUHVzaEJ1dHRvbihlKX1lbHNlKDAsci53YXJuKSgiSW52YWxpZCBmaWVsZCBmbGFncyBmb3IgYnV0dG9uIHdpZGdldCBhbm5vdGF0aW9uIil9YXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSl7aWYodGhpcy5kYXRhLnB1c2hCdXR0b24pcmV0dXJuIHN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQsYSwhMSxpKTtsZXQgcz1udWxsLG89bnVsbDtpZihpKXtjb25zdCBlPWkuZ2V0KHRoaXMuZGF0YS5pZCk7cz1lP2UudmFsdWU6bnVsbDtvPWU/ZS5yb3RhdGlvbjpudWxsfWlmKG51bGw9PT1zJiZ0aGlzLmFwcGVhcmFuY2UpcmV0dXJuIHN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQsYSxuLGkpO251bGw9PXMmJihzPXRoaXMuZGF0YS5jaGVja0JveD90aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5leHBvcnRWYWx1ZTp0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSk7Y29uc3QgYz1zP3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U6dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlO2lmKGMpe2NvbnN0IHM9dGhpcy5hcHBlYXJhbmNlLGw9Yy5kaWN0LmdldEFycmF5KCJNYXRyaXgiKXx8ci5JREVOVElUWV9NQVRSSVg7byYmYy5kaWN0LnNldCgiTWF0cml4Iix0aGlzLmdldFJvdGF0aW9uTWF0cml4KGkpKTt0aGlzLmFwcGVhcmFuY2U9Yztjb25zdCBoPXN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQsYSxuLGkpO3RoaXMuYXBwZWFyYW5jZT1zO2MuZGljdC5zZXQoIk1hdHJpeCIsbCk7cmV0dXJuIGh9cmV0dXJue29wTGlzdDpuZXcgcC5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfX1hc3luYyBzYXZlKGUsdCxhKXtyZXR1cm4gdGhpcy5kYXRhLmNoZWNrQm94P3RoaXMuX3NhdmVDaGVja2JveChlLHQsYSk6dGhpcy5kYXRhLnJhZGlvQnV0dG9uP3RoaXMuX3NhdmVSYWRpb0J1dHRvbihlLHQsYSk6bnVsbH1hc3luYyBfc2F2ZUNoZWNrYm94KGUsdCxhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBuPWEuZ2V0KHRoaXMuZGF0YS5pZCk7bGV0IGk9bj8ucm90YXRpb24sbz1uPy52YWx1ZTtpZih2b2lkIDA9PT1pKXtpZih2b2lkIDA9PT1vKXJldHVybiBudWxsO2lmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlPT09bylyZXR1cm4gbnVsbH1jb25zdCBjPWUueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKTtpZighKGMgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybiBudWxsO3ZvaWQgMD09PWkmJihpPXRoaXMucm90YXRpb24pO3ZvaWQgMD09PW8mJihvPXRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlKTtjb25zdCBsPXtwYXRoOnRoaXMuZGF0YS5maWVsZE5hbWUsdmFsdWU6bz90aGlzLmRhdGEuZXhwb3J0VmFsdWU6IiJ9LGg9cy5OYW1lLmdldChvP3RoaXMuZGF0YS5leHBvcnRWYWx1ZToiT2ZmIik7Yy5zZXQoIlYiLGgpO2Muc2V0KCJBUyIsaCk7Yy5zZXQoIk0iLGBEOiR7KDAsci5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO2NvbnN0IHU9dGhpcy5fZ2V0TUtEaWN0KGkpO3UmJmMuc2V0KCJNSyIsdSk7Y29uc3QgZD1bXTthd2FpdCgwLG0ud3JpdGVPYmplY3QpKHRoaXMucmVmLGMsZCxlLnhyZWYpO3JldHVyblt7cmVmOnRoaXMucmVmLGRhdGE6ZC5qb2luKCIiKSx4ZmE6bH1dfWFzeW5jIF9zYXZlUmFkaW9CdXR0b24oZSx0LGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IG49YS5nZXQodGhpcy5kYXRhLmlkKTtsZXQgaT1uPy5yb3RhdGlvbixvPW4/LnZhbHVlO2lmKHZvaWQgMD09PWkpe2lmKHZvaWQgMD09PW8pcmV0dXJuIG51bGw7aWYodGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuYnV0dG9uVmFsdWU9PT1vKXJldHVybiBudWxsfWNvbnN0IGM9ZS54cmVmLmZldGNoSWZSZWYodGhpcy5yZWYpO2lmKCEoYyBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuIG51bGw7dm9pZCAwPT09byYmKG89dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuYnV0dG9uVmFsdWUpO3ZvaWQgMD09PWkmJihpPXRoaXMucm90YXRpb24pO2NvbnN0IGw9e3BhdGg6dGhpcy5kYXRhLmZpZWxkTmFtZSx2YWx1ZTpvP3RoaXMuZGF0YS5idXR0b25WYWx1ZToiIn0saD1zLk5hbWUuZ2V0KG8/dGhpcy5kYXRhLmJ1dHRvblZhbHVlOiJPZmYiKSx1PVtdO2xldCBkPW51bGw7aWYobylpZih0aGlzLnBhcmVudCBpbnN0YW5jZW9mIHMuUmVmKXtjb25zdCB0PWUueHJlZi5mZXRjaCh0aGlzLnBhcmVudCk7dC5zZXQoIlYiLGgpO2F3YWl0KDAsbS53cml0ZU9iamVjdCkodGhpcy5wYXJlbnQsdCx1LGUueHJlZik7ZD11LmpvaW4oIiIpO3UubGVuZ3RoPTB9ZWxzZSB0aGlzLnBhcmVudCBpbnN0YW5jZW9mIHMuRGljdCYmdGhpcy5wYXJlbnQuc2V0KCJWIixoKTtjLnNldCgiQVMiLGgpO2Muc2V0KCJNIixgRDokeygwLHIuZ2V0TW9kaWZpY2F0aW9uRGF0ZSkoKX1gKTtjb25zdCBmPXRoaXMuX2dldE1LRGljdChpKTtmJiZjLnNldCgiTUsiLGYpO2F3YWl0KDAsbS53cml0ZU9iamVjdCkodGhpcy5yZWYsYyx1LGUueHJlZik7Y29uc3QgZz1be3JlZjp0aGlzLnJlZixkYXRhOnUuam9pbigiIikseGZhOmx9XTtkJiZnLnB1c2goe3JlZjp0aGlzLnBhcmVudCxkYXRhOmQseGZhOm51bGx9KTtyZXR1cm4gZ31fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKGUsdCl7Y29uc3QgYT10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSxpPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLGM9WzAsMCxhLGldLGw9LjgqTWF0aC5taW4oYSxpKTtsZXQgaCx1O2lmKCJjaGVjayI9PT10KXtoPXt3aWR0aDouNzU1KmwsaGVpZ2h0Oi43MDUqbH07dT0iMyJ9ZWxzZSBpZigiZGlzYyI9PT10KXtoPXt3aWR0aDouNzkxKmwsaGVpZ2h0Oi43MDUqbH07dT0ibCJ9ZWxzZSgwLHIudW5yZWFjaGFibGUpKGBfZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlIC0gdW5zdXBwb3J0ZWQgdHlwZTogJHt0fWApO2NvbnN0IGQ9YHEgQlQgL1BkZkpzWmFEYiAke2x9IFRmIDAgZyAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKChhLWgud2lkdGgpLzIpfSAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKChpLWguaGVpZ2h0KS8yKX0gVGQgKCR7dX0pIFRqIEVUIFFgLGY9bmV3IHMuRGljdChlLnhyZWYpO2Yuc2V0KCJGb3JtVHlwZSIsMSk7Zi5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZvcm0iKSk7Zi5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIlhPYmplY3QiKSk7Zi5zZXQoIkJCb3giLGMpO2Yuc2V0KCJNYXRyaXgiLFsxLDAsMCwxLDAsMF0pO2Yuc2V0KCJMZW5ndGgiLGQubGVuZ3RoKTtjb25zdCBnPW5ldyBzLkRpY3QoZS54cmVmKSxwPW5ldyBzLkRpY3QoZS54cmVmKTtwLnNldCgiUGRmSnNaYURiIix0aGlzLmZhbGxiYWNrRm9udERpY3QpO2cuc2V0KCJGb250IixwKTtmLnNldCgiUmVzb3VyY2VzIixnKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW5ldyBvLlN0cmluZ1N0cmVhbShkKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlLmRpY3Q9Zjt0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSl9X3Byb2Nlc3NDaGVja0JveChlKXtjb25zdCB0PWUuZGljdC5nZXQoIkFQIik7aWYoISh0IGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3QgYT10LmdldCgiTiIpO2lmKCEoYSBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IHI9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUuZGljdC5nZXQoIkFTIikpOyJzdHJpbmciPT10eXBlb2YgciYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPXIpO2NvbnN0IG49bnVsbCE9PXRoaXMuZGF0YS5maWVsZFZhbHVlJiYiT2ZmIiE9PXRoaXMuZGF0YS5maWVsZFZhbHVlP3RoaXMuZGF0YS5maWVsZFZhbHVlOiJZZXMiLGk9YS5nZXRLZXlzKCk7aWYoMD09PWkubGVuZ3RoKWkucHVzaCgiT2ZmIixuKTtlbHNlIGlmKDE9PT1pLmxlbmd0aCkiT2ZmIj09PWlbMF0/aS5wdXNoKG4pOmkudW5zaGlmdCgiT2ZmIik7ZWxzZSBpZihpLmluY2x1ZGVzKG4pKXtpLmxlbmd0aD0wO2kucHVzaCgiT2ZmIixuKX1lbHNle2NvbnN0IGU9aS5maW5kKChlPT4iT2ZmIiE9PWUpKTtpLmxlbmd0aD0wO2kucHVzaCgiT2ZmIixlKX1pLmluY2x1ZGVzKHRoaXMuZGF0YS5maWVsZFZhbHVlKXx8KHRoaXMuZGF0YS5maWVsZFZhbHVlPSJPZmYiKTt0aGlzLmRhdGEuZXhwb3J0VmFsdWU9aVsxXTtjb25zdCBvPWEuZ2V0KHRoaXMuZGF0YS5leHBvcnRWYWx1ZSk7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT1vIGluc3RhbmNlb2YgYy5CYXNlU3RyZWFtP286bnVsbDtjb25zdCBsPWEuZ2V0KCJPZmYiKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9bCBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbT9sOm51bGw7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT90aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSk6dGhpcy5fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKGUsImNoZWNrIik7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlJiZ0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKTt0aGlzLl9mYWxsYmFja0ZvbnREaWN0PXRoaXMuZmFsbGJhY2tGb250RGljdDtudWxsPT09dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlJiYodGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlPSJPZmYiKX1fcHJvY2Vzc1JhZGlvQnV0dG9uKGUpe3RoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuZGF0YS5idXR0b25WYWx1ZT1udWxsO2NvbnN0IHQ9ZS5kaWN0LmdldCgiUGFyZW50Iik7aWYodCBpbnN0YW5jZW9mIHMuRGljdCl7dGhpcy5wYXJlbnQ9ZS5kaWN0LmdldFJhdygiUGFyZW50Iik7Y29uc3QgYT10LmdldCgiViIpO2EgaW5zdGFuY2VvZiBzLk5hbWUmJih0aGlzLmRhdGEuZmllbGRWYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUoYSkpfWNvbnN0IGE9ZS5kaWN0LmdldCgiQVAiKTtpZighKGEgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtjb25zdCByPWEuZ2V0KCJOIik7aWYoIShyIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Zm9yKGNvbnN0IGUgb2Ygci5nZXRLZXlzKCkpaWYoIk9mZiIhPT1lKXt0aGlzLmRhdGEuYnV0dG9uVmFsdWU9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUpO2JyZWFrfWNvbnN0IG49ci5nZXQodGhpcy5kYXRhLmJ1dHRvblZhbHVlKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW4gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0/bjpudWxsO2NvbnN0IGk9ci5nZXQoIk9mZiIpO3RoaXMudW5jaGVja2VkQXBwZWFyYW5jZT1pIGluc3RhbmNlb2YgYy5CYXNlU3RyZWFtP2k6bnVsbDt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlP3RoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKTp0aGlzLl9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UoZSwiZGlzYyIpO3RoaXMudW5jaGVja2VkQXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSk7dGhpcy5fZmFsbGJhY2tGb250RGljdD10aGlzLmZhbGxiYWNrRm9udERpY3Q7bnVsbD09PXRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSYmKHRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZT0iT2ZmIil9X3Byb2Nlc3NQdXNoQnV0dG9uKGUpe2NvbnN0e2RpY3Q6dCxhbm5vdGF0aW9uR2xvYmFsczphfT1lO2lmKHQuaGFzKCJBIil8fHQuaGFzKCJBQSIpfHx0aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KXt0aGlzLmRhdGEuaXNUb29sdGlwT25seT0hdC5oYXMoIkEiKSYmIXQuaGFzKCJBQSIpO2guQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDp0LHJlc3VsdE9iajp0aGlzLmRhdGEsZG9jQmFzZVVybDphLmJhc2VVcmwsZG9jQXR0YWNobWVudHM6YS5hdHRhY2htZW50c30pfWVsc2UoMCxyLndhcm4pKCJQdXNoIGJ1dHRvbnMgd2l0aG91dCBhY3Rpb24gZGljdGlvbmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkIil9Z2V0RmllbGRPYmplY3QoKXtsZXQgZSx0PSJidXR0b24iO2lmKHRoaXMuZGF0YS5jaGVja0JveCl7dD0iY2hlY2tib3giO2U9dGhpcy5kYXRhLmV4cG9ydFZhbHVlfWVsc2UgaWYodGhpcy5kYXRhLnJhZGlvQnV0dG9uKXt0PSJyYWRpb2J1dHRvbiI7ZT10aGlzLmRhdGEuYnV0dG9uVmFsdWV9cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0aGlzLmRhdGEuZmllbGRWYWx1ZXx8Ik9mZiIsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSxleHBvcnRWYWx1ZXM6ZSxlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6dH19Z2V0IGZhbGxiYWNrRm9udERpY3QoKXtjb25zdCBlPW5ldyBzLkRpY3Q7ZS5zZXQoIkJhc2VGb250IixzLk5hbWUuZ2V0KCJaYXBmRGluZ2JhdHMiKSk7ZS5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkZhbGxiYWNrVHlwZSIpKTtlLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpO2Uuc2V0KCJFbmNvZGluZyIscy5OYW1lLmdldCgiWmFwZkRpbmdiYXRzRW5jb2RpbmciKSk7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImZhbGxiYWNrRm9udERpY3QiLGUpfX1jbGFzcyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuaW5kaWNlcz10LmdldEFycmF5KCJJIik7dGhpcy5oYXNJbmRpY2VzPUFycmF5LmlzQXJyYXkodGhpcy5pbmRpY2VzKSYmdGhpcy5pbmRpY2VzLmxlbmd0aD4wO3RoaXMuZGF0YS5vcHRpb25zPVtdO2NvbnN0IGk9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0LGtleToiT3B0In0pO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBlPTAsdD1pLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PWEuZmV0Y2hJZlJlZihpW2VdKSxyPUFycmF5LmlzQXJyYXkodCk7dGhpcy5kYXRhLm9wdGlvbnNbZV09e2V4cG9ydFZhbHVlOnRoaXMuX2RlY29kZUZvcm1WYWx1ZShyP2EuZmV0Y2hJZlJlZih0WzBdKTp0KSxkaXNwbGF5VmFsdWU6dGhpcy5fZGVjb2RlRm9ybVZhbHVlKHI/YS5mZXRjaElmUmVmKHRbMV0pOnQpfX1pZih0aGlzLmhhc0luZGljZXMpe3RoaXMuZGF0YS5maWVsZFZhbHVlPVtdO2NvbnN0IGU9dGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoO2Zvcihjb25zdCB0IG9mIHRoaXMuaW5kaWNlcylOdW1iZXIuaXNJbnRlZ2VyKHQpJiZ0Pj0wJiZ0PGUmJnRoaXMuZGF0YS5maWVsZFZhbHVlLnB1c2godGhpcy5kYXRhLm9wdGlvbnNbdF0uZXhwb3J0VmFsdWUpfWVsc2Uic3RyaW5nIj09dHlwZW9mIHRoaXMuZGF0YS5maWVsZFZhbHVlP3RoaXMuZGF0YS5maWVsZFZhbHVlPVt0aGlzLmRhdGEuZmllbGRWYWx1ZV06dGhpcy5kYXRhLmZpZWxkVmFsdWV8fCh0aGlzLmRhdGEuZmllbGRWYWx1ZT1bXSk7dGhpcy5kYXRhLmNvbWJvPXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5DT01CTyk7dGhpcy5kYXRhLm11bHRpU2VsZWN0PXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSVNFTEVDVCk7dGhpcy5faGFzVGV4dD0hMH1nZXRGaWVsZE9iamVjdCgpe2NvbnN0IGU9dGhpcy5kYXRhLmNvbWJvPyJjb21ib2JveCI6Imxpc3Rib3giLHQ9dGhpcy5kYXRhLmZpZWxkVmFsdWUubGVuZ3RoPjA/dGhpcy5kYXRhLmZpZWxkVmFsdWVbMF06bnVsbDtyZXR1cm57aWQ6dGhpcy5kYXRhLmlkLHZhbHVlOnQsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSxlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LG51bUl0ZW1zOnRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aCxtdWx0aXBsZVNlbGVjdGlvbjp0aGlzLmRhdGEubXVsdGlTZWxlY3QsaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxpdGVtczp0aGlzLmRhdGEub3B0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZTplfX1hbWVuZFNhdmVkRGljdChlLHQpe2lmKCF0aGlzLmhhc0luZGljZXMpcmV0dXJuO2xldCBhPWU/LmdldCh0aGlzLmRhdGEuaWQpPy52YWx1ZTtBcnJheS5pc0FycmF5KGEpfHwoYT1bYV0pO2NvbnN0IHI9W10se29wdGlvbnM6bn09dGhpcy5kYXRhO2ZvcihsZXQgZT0wLHQ9MCxpPW4ubGVuZ3RoO2U8aTtlKyspaWYobltlXS5leHBvcnRWYWx1ZT09PWFbdF0pe3IucHVzaChlKTt0Kz0xfXQuc2V0KCJJIixyKX1hc3luYyBfZ2V0QXBwZWFyYW5jZShlLHQsYSxuKXtpZih0aGlzLmRhdGEuY29tYm8pcmV0dXJuIHN1cGVyLl9nZXRBcHBlYXJhbmNlKGUsdCxhLG4pO2xldCBzLG87Y29uc3QgYz1uPy5nZXQodGhpcy5kYXRhLmlkKTtpZihjKXtvPWMucm90YXRpb247cz1jLnZhbHVlfWlmKHZvaWQgMD09PW8mJnZvaWQgMD09PXMmJiF0aGlzLl9uZWVkQXBwZWFyYW5jZXMpcmV0dXJuIG51bGw7dm9pZCAwPT09cz9zPXRoaXMuZGF0YS5maWVsZFZhbHVlOkFycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7bGV0IGw9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0saD10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXTs5MCE9PW8mJjI3MCE9PW98fChbaCxsXT1bbCxoXSk7Y29uc3QgdT10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGgsZD1bXTtmb3IobGV0IGU9MDtlPHU7ZSsrKXtjb25zdHtleHBvcnRWYWx1ZTp0fT10aGlzLmRhdGEub3B0aW9uc1tlXTtzLmluY2x1ZGVzKHQpJiZkLnB1c2goZSl9dGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fCh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9Ii9IZWx2ZXRpY2EgMCBUZiAwIGciKSk7Y29uc3QgZj1hd2FpdCBXaWRnZXRBbm5vdGF0aW9uLl9nZXRGb250RGF0YShlLHQsdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMpO2xldCBnLHtmb250U2l6ZTpwfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO2lmKHApZz10aGlzLl9kZWZhdWx0QXBwZWFyYW5jZTtlbHNle2NvbnN0IGU9KGwtMSkvdTtsZXQgdCxhPS0xO2Zvcihjb25zdHtkaXNwbGF5VmFsdWU6ZX1vZiB0aGlzLmRhdGEub3B0aW9ucyl7Y29uc3Qgcj10aGlzLl9nZXRUZXh0V2lkdGgoZSxmKTtpZihyPmEpe2E9cjt0PWV9fVtnLHBdPXRoaXMuX2NvbXB1dGVGb250U2l6ZShlLGgtNCx0LGYsLTEpfWNvbnN0IG09cCpyLkxJTkVfRkFDVE9SLGI9KG0tcCkvMix5PU1hdGguZmxvb3IobC9tKTtsZXQgdz0wO2lmKGQubGVuZ3RoPjApe2NvbnN0IGU9TWF0aC5taW4oLi4uZCksdD1NYXRoLm1heCguLi5kKTt3PU1hdGgubWF4KDAsdC15KzEpO3c+ZSYmKHc9ZSl9Y29uc3QgUz1NYXRoLm1pbih3K3krMSx1KSx4PVsiL1R4IEJNQyBxIixgMSAxICR7aH0gJHtsfSByZSBXIG5gXTtpZihkLmxlbmd0aCl7eC5wdXNoKCIwLjYwMDAwNiAwLjc1Njg2NiAwLjg1NDkwNCByZyIpO2Zvcihjb25zdCBlIG9mIGQpdzw9ZSYmZTxTJiZ4LnB1c2goYDEgJHtsLShlLXcrMSkqbX0gJHtofSAke219IHJlIGZgKX14LnB1c2goIkJUIixnLGAxIDAgMCAxIDAgJHtsfSBUbWApO2NvbnN0IEM9e3NoaWZ0OjB9O2ZvcihsZXQgZT13O2U8UztlKyspe2NvbnN0e2Rpc3BsYXlWYWx1ZTp0fT10aGlzLmRhdGEub3B0aW9uc1tlXSxhPWU9PT13P2I6MDt4LnB1c2godGhpcy5fcmVuZGVyVGV4dCh0LGYscCxoLDAsQywyLC1tK2EpKX14LnB1c2goIkVUIFEgRU1DIik7cmV0dXJuIHguam9pbigiXG4iKX19Y2xhc3MgU2lnbmF0dXJlV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmZpZWxkVmFsdWU9bnVsbDt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZX1nZXRGaWVsZE9iamVjdCgpe3JldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6bnVsbCxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsdHlwZToic2lnbmF0dXJlIn19fWNsYXNzIFRleHRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEubm9Sb3RhdGU9ITA7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7Y29uc3R7ZGljdDp0fT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlRFWFQ7aWYodGhpcy5kYXRhLmhhc0FwcGVhcmFuY2UpdGhpcy5kYXRhLm5hbWU9Ik5vSWNvbiI7ZWxzZXt0aGlzLmRhdGEucmVjdFsxXT10aGlzLmRhdGEucmVjdFszXS0yMjt0aGlzLmRhdGEucmVjdFsyXT10aGlzLmRhdGEucmVjdFswXSsyMjt0aGlzLmRhdGEubmFtZT10LmhhcygiTmFtZSIpP3QuZ2V0KCJOYW1lIikubmFtZToiTm90ZSJ9aWYodC5oYXMoIlN0YXRlIikpe3RoaXMuZGF0YS5zdGF0ZT10LmdldCgiU3RhdGUiKXx8bnVsbDt0aGlzLmRhdGEuc3RhdGVNb2RlbD10LmdldCgiU3RhdGVNb2RlbCIpfHxudWxsfWVsc2V7dGhpcy5kYXRhLnN0YXRlPW51bGw7dGhpcy5kYXRhLnN0YXRlTW9kZWw9bnVsbH19fWNsYXNzIExpbmtBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQsYW5ub3RhdGlvbkdsb2JhbHM6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5MSU5LO2NvbnN0IG49Z2V0UXVhZFBvaW50cyh0LHRoaXMucmVjdGFuZ2xlKTtuJiYodGhpcy5kYXRhLnF1YWRQb2ludHM9bik7dGhpcy5kYXRhLmJvcmRlckNvbG9yfHw9dGhpcy5kYXRhLmNvbG9yO2guQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDp0LHJlc3VsdE9iajp0aGlzLmRhdGEsZG9jQmFzZVVybDphLmJhc2VVcmwsZG9jQXR0YWNobWVudHM6YS5hdHRhY2htZW50c30pfX1jbGFzcyBQb3B1cEFubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dH09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5QT1BVUDt0aGlzLmRhdGEucmVjdFswXSE9PXRoaXMuZGF0YS5yZWN0WzJdJiZ0aGlzLmRhdGEucmVjdFsxXSE9PXRoaXMuZGF0YS5yZWN0WzNdfHwodGhpcy5kYXRhLnJlY3Q9bnVsbCk7bGV0IGE9dC5nZXQoIlBhcmVudCIpO2lmKCFhKXsoMCxyLndhcm4pKCJQb3B1cCBhbm5vdGF0aW9uIGhhcyBhIG1pc3Npbmcgb3IgaW52YWxpZCBwYXJlbnQgYW5ub3RhdGlvbi4iKTtyZXR1cm59Y29uc3Qgbj1hLmdldEFycmF5KCJSZWN0Iik7dGhpcy5kYXRhLnBhcmVudFJlY3Q9QXJyYXkuaXNBcnJheShuKSYmND09PW4ubGVuZ3RoP3IuVXRpbC5ub3JtYWxpemVSZWN0KG4pOm51bGw7Y29uc3QgaT1hLmdldCgiUlQiKTsoMCxzLmlzTmFtZSkoaSxyLkFubm90YXRpb25SZXBseVR5cGUuR1JPVVApJiYoYT1hLmdldCgiSVJUIikpO2lmKGEuaGFzKCJNIikpe3RoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShhLmdldCgiTSIpKTt0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT10aGlzLm1vZGlmaWNhdGlvbkRhdGV9ZWxzZSB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT1udWxsO2lmKGEuaGFzKCJDIikpe3RoaXMuc2V0Q29sb3IoYS5nZXRBcnJheSgiQyIpKTt0aGlzLmRhdGEuY29sb3I9dGhpcy5jb2xvcn1lbHNlIHRoaXMuZGF0YS5jb2xvcj1udWxsO2lmKCF0aGlzLnZpZXdhYmxlKXtjb25zdCBlPWEuZ2V0KCJGIik7dGhpcy5faXNWaWV3YWJsZShlKSYmdGhpcy5zZXRGbGFncyhlKX10aGlzLnNldFRpdGxlKGEuZ2V0KCJUIikpO3RoaXMuZGF0YS50aXRsZU9iaj10aGlzLl90aXRsZTt0aGlzLnNldENvbnRlbnRzKGEuZ2V0KCJDb250ZW50cyIpKTt0aGlzLmRhdGEuY29udGVudHNPYmo9dGhpcy5fY29udGVudHM7YS5oYXMoIlJDIikmJih0aGlzLmRhdGEucmljaFRleHQ9Yi5YRkFGYWN0b3J5LmdldFJpY2hUZXh0QXNIdG1sKGEuZ2V0KCJSQyIpKSk7dGhpcy5kYXRhLm9wZW49ISF0LmdldCgiT3BlbiIpfX10LlBvcHVwQW5ub3RhdGlvbj1Qb3B1cEFubm90YXRpb247Y2xhc3MgRnJlZVRleHRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPSEwO2NvbnN0e2V2YWx1YXRvck9wdGlvbnM6dCx4cmVmOmF9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQ7dGhpcy5zZXREZWZhdWx0QXBwZWFyYW5jZShlKTtpZih0aGlzLmFwcGVhcmFuY2Upe2NvbnN0e2ZvbnRDb2xvcjplLGZvbnRTaXplOnJ9PSgwLGkucGFyc2VBcHBlYXJhbmNlU3RyZWFtKSh0aGlzLmFwcGVhcmFuY2UsdCxhKTt0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnRDb2xvcj1lO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemU9cnx8MTB9ZWxzZSBpZih0aGlzLl9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCl7Y29uc3QgdD1lLmRpY3QuZ2V0KCJDQSIpLHI9bmV3IGkuRmFrZVVuaWNvZGVGb250KGEsInNhbnMtc2VyaWYiKTt0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnRTaXplfHw9MTA7Y29uc3R7Zm9udENvbG9yOm4sZm9udFNpemU6c309dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YTt0aGlzLmFwcGVhcmFuY2U9ci5jcmVhdGVBcHBlYXJhbmNlKHRoaXMuX2NvbnRlbnRzLnN0cix0aGlzLnJlY3RhbmdsZSx0aGlzLnJvdGF0aW9uLHMsbix0KTt0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5hcHBlYXJhbmNlLGkuRmFrZVVuaWNvZGVGb250LnRvVW5pY29kZVN0cmVhbSl9ZWxzZSgwLHIud2FybikoIkZyZWVUZXh0QW5ub3RhdGlvbjogT2Zmc2NyZWVuQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQsIGFubm90YXRpb24gbWF5IG5vdCByZW5kZXIgY29ycmVjdGx5LiIpfWdldCBoYXNUZXh0Q29udGVudCgpe3JldHVybiEhdGhpcy5hcHBlYXJhbmNlfXN0YXRpYyBjcmVhdGVOZXdEaWN0KGUsdCx7YXBSZWY6YSxhcDpvfSl7Y29uc3R7Y29sb3I6Yyxmb250U2l6ZTpsLHJlY3Q6aCxyb3RhdGlvbjp1LHVzZXI6ZCx2YWx1ZTpmfT1lLGc9bmV3IHMuRGljdCh0KTtnLnNldCgiVHlwZSIscy5OYW1lLmdldCgiQW5ub3QiKSk7Zy5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZyZWVUZXh0IikpO2cuc2V0KCJDcmVhdGlvbkRhdGUiLGBEOiR7KDAsci5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO2cuc2V0KCJSZWN0IixoKTtjb25zdCBwPWAvSGVsdiAke2x9IFRmICR7KDAsaS5nZXRQZGZDb2xvcikoYywhMCl9YDtnLnNldCgiREEiLHApO2cuc2V0KCJDb250ZW50cyIsKDAsbi5pc0FzY2lpKShmKT9mOigwLG4uc3RyaW5nVG9VVEYxNlN0cmluZykoZiwhMCkpO2cuc2V0KCJGIiw0KTtnLnNldCgiQm9yZGVyIixbMCwwLDBdKTtnLnNldCgiUm90YXRlIix1KTtkJiZnLnNldCgiVCIsKDAsbi5pc0FzY2lpKShkKT9kOigwLG4uc3RyaW5nVG9VVEYxNlN0cmluZykoZCwhMCkpO2lmKGF8fG8pe2NvbnN0IGU9bmV3IHMuRGljdCh0KTtnLnNldCgiQVAiLGUpO2E/ZS5zZXQoIk4iLGEpOmUuc2V0KCJOIixvKX1yZXR1cm4gZ31zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQsYSl7Y29uc3R7YmFzZUZvbnRSZWY6YyxldmFsdWF0b3I6bCx0YXNrOmh9PWEse2NvbG9yOnUsZm9udFNpemU6ZCxyZWN0OmYscm90YXRpb246Zyx2YWx1ZTpwfT1lLG09bmV3IHMuRGljdCh0KSxiPW5ldyBzLkRpY3QodCk7aWYoYyliLnNldCgiSGVsdiIsYyk7ZWxzZXtjb25zdCBlPW5ldyBzLkRpY3QodCk7ZS5zZXQoIkJhc2VGb250IixzLk5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSk7ZS5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkZvbnQiKSk7ZS5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIlR5cGUxIikpO2Uuc2V0KCJFbmNvZGluZyIscy5OYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpO2Iuc2V0KCJIZWx2IixlKX1tLnNldCgiRm9udCIsYik7Y29uc3QgeT1hd2FpdCBXaWRnZXRBbm5vdGF0aW9uLl9nZXRGb250RGF0YShsLGgse2ZvbnROYW1lOiJIZWx2Iixmb250U2l6ZTpkfSxtKSxbdyxTLHgsQ109ZjtsZXQgaz14LXcsdj1DLVM7ZyUxODAhPTAmJihbayx2XT1bdixrXSk7Y29uc3QgRj1wLnNwbGl0KCJcbiIpLE89ZC8xZTM7bGV0IFQ9LTEvMDtjb25zdCBNPVtdO2ZvcihsZXQgZSBvZiBGKXtjb25zdCB0PXkuZW5jb2RlU3RyaW5nKGUpO2lmKHQubGVuZ3RoPjEpcmV0dXJuIG51bGw7ZT10LmpvaW4oIiIpO00ucHVzaChlKTtsZXQgYT0wO2NvbnN0IHI9eS5jaGFyc1RvR2x5cGhzKGUpO2Zvcihjb25zdCBlIG9mIHIpYSs9ZS53aWR0aCpPO1Q9TWF0aC5tYXgoVCxhKX1sZXQgRD0xO1Q+ayYmKEQ9ay9UKTtsZXQgRT0xO2NvbnN0IE49ci5MSU5FX0ZBQ1RPUipkLFI9KHIuTElORV9GQUNUT1Itci5MSU5FX0RFU0NFTlRfRkFDVE9SKSpkLEw9TipGLmxlbmd0aDtMPnYmJihFPXYvTCk7Y29uc3QgJD1kKk1hdGgubWluKEQsRSk7bGV0IF8saixVO3N3aXRjaChnKXtjYXNlIDA6VT1bMSwwLDAsMV07aj1bZlswXSxmWzFdLGssdl07Xz1bZlswXSxmWzNdLVJdO2JyZWFrO2Nhc2UgOTA6VT1bMCwxLC0xLDBdO2o9W2ZbMV0sLWZbMl0sayx2XTtfPVtmWzFdLC1mWzBdLVJdO2JyZWFrO2Nhc2UgMTgwOlU9Wy0xLDAsMCwtMV07aj1bLWZbMl0sLWZbM10sayx2XTtfPVstZlsyXSwtZlsxXS1SXTticmVhaztjYXNlIDI3MDpVPVswLC0xLDEsMF07aj1bLWZbM10sZlswXSxrLHZdO189Wy1mWzNdLGZbMl0tUl19Y29uc3QgWD1bInEiLGAke1Uuam9pbigiICIpfSAwIDAgY21gLGAke2ouam9pbigiICIpfSByZSBXIG5gLCJCVCIsYCR7KDAsaS5nZXRQZGZDb2xvcikodSwhMCl9YCxgMCBUYyAvSGVsdiAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKCQpfSBUZmBdO1gucHVzaChgJHtfLmpvaW4oIiAiKX0gVGQgKCR7KDAsbi5lc2NhcGVTdHJpbmcpKE1bMF0pfSkgVGpgKTtjb25zdCBIPSgwLG4ubnVtYmVyVG9TdHJpbmcpKE4pO2ZvcihsZXQgZT0xLHQ9TS5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1NW2VdO1gucHVzaChgMCAtJHtIfSBUZCAoJHsoMCxuLmVzY2FwZVN0cmluZykodCl9KSBUamApfVgucHVzaCgiRVQiLCJRIik7Y29uc3QgcT1YLmpvaW4oIlxuIiksej1uZXcgcy5EaWN0KHQpO3ouc2V0KCJGb3JtVHlwZSIsMSk7ei5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZvcm0iKSk7ei5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIlhPYmplY3QiKSk7ei5zZXQoIkJCb3giLGYpO3ouc2V0KCJSZXNvdXJjZXMiLG0pO3ouc2V0KCJNYXRyaXgiLFsxLDAsMCwxLC1mWzBdLC1mWzFdXSk7Y29uc3QgVz1uZXcgby5TdHJpbmdTdHJlYW0ocSk7Vy5kaWN0PXo7cmV0dXJuIFd9fWNsYXNzIExpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLkxJTkU7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7Y29uc3Qgbj10LmdldEFycmF5KCJMIik7dGhpcy5kYXRhLmxpbmVDb29yZGluYXRlcz1yLlV0aWwubm9ybWFsaXplUmVjdChuKTt0aGlzLnNldExpbmVFbmRpbmdzKHQuZ2V0QXJyYXkoIkxFIikpO3RoaXMuZGF0YS5saW5lRW5kaW5ncz10aGlzLmxpbmVFbmRpbmdzO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0saT10LmdldCgiQ0EiKSxzPWdldFJnYkNvbG9yKHQuZ2V0QXJyYXkoIklDIiksbnVsbCksbz1zP2dldFBkZkNvbG9yQXJyYXkocyk6bnVsbCxjPW8/aTpudWxsLGw9dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MSxoPTIqbCx1PVt0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzWzBdLWgsdGhpcy5kYXRhLmxpbmVDb29yZGluYXRlc1sxXS1oLHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMl0raCx0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzWzNdK2hdO3IuVXRpbC5pbnRlcnNlY3QodGhpcy5yZWN0YW5nbGUsdSl8fCh0aGlzLnJlY3RhbmdsZT11KTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOmAke2x9IHdgLHN0cm9rZUNvbG9yOmUsZmlsbENvbG9yOm8sc3Ryb2tlQWxwaGE6aSxmaWxsQWxwaGE6Yyxwb2ludHNDYWxsYmFjazooZSx0KT0+e2UucHVzaChgJHtuWzBdfSAke25bMV19IG1gLGAke25bMl19ICR7blszXX0gbGAsIlMiKTtyZXR1cm5bdFswXS54LWwsdFsxXS54K2wsdFszXS55LWwsdFsxXS55K2xdfX0pfX19Y2xhc3MgU3F1YXJlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5TUVVBUkU7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzAsMCwwXSxyPXQuZ2V0KCJDQSIpLG49Z2V0UmdiQ29sb3IodC5nZXRBcnJheSgiSUMiKSxudWxsKSxpPW4/Z2V0UGRmQ29sb3JBcnJheShuKTpudWxsLHM9aT9yOm51bGw7aWYoMD09PXRoaXMuYm9yZGVyU3R5bGUud2lkdGgmJiFpKXJldHVybjt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOmAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh9IHdgLHN0cm9rZUNvbG9yOmUsZmlsbENvbG9yOmksc3Ryb2tlQWxwaGE6cixmaWxsQWxwaGE6cyxwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IGE9dFsyXS54K3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixyPXRbMl0ueSt0aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsbj10WzNdLngtdFsyXS54LXRoaXMuYm9yZGVyU3R5bGUud2lkdGgscz10WzFdLnktdFszXS55LXRoaXMuYm9yZGVyU3R5bGUud2lkdGg7ZS5wdXNoKGAke2F9ICR7cn0gJHtufSAke3N9IHJlYCk7aT9lLnB1c2goIkIiKTplLnB1c2goIlMiKTtyZXR1cm5bdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX19fWNsYXNzIENpcmNsZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOmF9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuQ0lSQ0xFO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0scj10LmdldCgiQ0EiKSxuPWdldFJnYkNvbG9yKHQuZ2V0QXJyYXkoIklDIiksbnVsbCksaT1uP2dldFBkZkNvbG9yQXJyYXkobik6bnVsbCxzPWk/cjpudWxsO2lmKDA9PT10aGlzLmJvcmRlclN0eWxlLndpZHRoJiYhaSlyZXR1cm47Y29uc3Qgbz00LzMqTWF0aC50YW4oTWF0aC5QSS84KTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOmAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh9IHdgLHN0cm9rZUNvbG9yOmUsZmlsbENvbG9yOmksc3Ryb2tlQWxwaGE6cixmaWxsQWxwaGE6cyxwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IGE9dFswXS54K3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixyPXRbMF0ueS10aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsbj10WzNdLngtdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLHM9dFszXS55K3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixjPWErKG4tYSkvMixsPXIrKHMtcikvMixoPShuLWEpLzIqbyx1PShzLXIpLzIqbztlLnB1c2goYCR7Y30gJHtzfSBtYCxgJHtjK2h9ICR7c30gJHtufSAke2wrdX0gJHtufSAke2x9IGNgLGAke259ICR7bC11fSAke2MraH0gJHtyfSAke2N9ICR7cn0gY2AsYCR7Yy1ofSAke3J9ICR7YX0gJHtsLXV9ICR7YX0gJHtsfSBjYCxgJHthfSAke2wrdX0gJHtjLWh9ICR7c30gJHtjfSAke3N9IGNgLCJoIik7aT9lLnB1c2goIkIiKTplLnB1c2goIlMiKTtyZXR1cm5bdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX19fWNsYXNzIFBvbHlsaW5lQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORTt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTt0aGlzLmRhdGEudmVydGljZXM9W107aWYoISh0aGlzIGluc3RhbmNlb2YgUG9seWdvbkFubm90YXRpb24pKXt0aGlzLnNldExpbmVFbmRpbmdzKHQuZ2V0QXJyYXkoIkxFIikpO3RoaXMuZGF0YS5saW5lRW5kaW5ncz10aGlzLmxpbmVFbmRpbmdzfWNvbnN0IG49dC5nZXRBcnJheSgiVmVydGljZXMiKTtpZihBcnJheS5pc0FycmF5KG4pKXtmb3IobGV0IGU9MCx0PW4ubGVuZ3RoO2U8dDtlKz0yKXRoaXMuZGF0YS52ZXJ0aWNlcy5wdXNoKHt4Om5bZV0seTpuW2UrMV19KTtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPXRoaXMuY29sb3I/Z2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKTpbMCwwLDBdLG49dC5nZXQoIkNBIiksaT10aGlzLmJvcmRlclN0eWxlLndpZHRofHwxLHM9MippLG89WzEvMCwxLzAsLTEvMCwtMS8wXTtmb3IoY29uc3QgZSBvZiB0aGlzLmRhdGEudmVydGljZXMpe29bMF09TWF0aC5taW4ob1swXSxlLngtcyk7b1sxXT1NYXRoLm1pbihvWzFdLGUueS1zKTtvWzJdPU1hdGgubWF4KG9bMl0sZS54K3MpO29bM109TWF0aC5tYXgob1szXSxlLnkrcyl9ci5VdGlsLmludGVyc2VjdCh0aGlzLnJlY3RhbmdsZSxvKXx8KHRoaXMucmVjdGFuZ2xlPW8pO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmEsZXh0cmE6YCR7aX0gd2Asc3Ryb2tlQ29sb3I6ZSxzdHJva2VBbHBoYTpuLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Y29uc3QgYT10aGlzLmRhdGEudmVydGljZXM7Zm9yKGxldCB0PTAscj1hLmxlbmd0aDt0PHI7dCsrKWUucHVzaChgJHthW3RdLnh9ICR7YVt0XS55fSAkezA9PT10PyJtIjoibCJ9YCk7ZS5wdXNoKCJTIik7cmV0dXJuW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fX19Y2xhc3MgUG9seWdvbkFubm90YXRpb24gZXh0ZW5kcyBQb2x5bGluZUFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuUE9MWUdPTn19Y2xhc3MgQ2FyZXRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5DQVJFVH19Y2xhc3MgSW5rQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5JTks7dGhpcy5kYXRhLmlua0xpc3RzPVtdO2NvbnN0IG49dC5nZXRBcnJheSgiSW5rTGlzdCIpO2lmKEFycmF5LmlzQXJyYXkobikpe2ZvcihsZXQgZT0wLHQ9bi5sZW5ndGg7ZTx0OysrZSl7dGhpcy5kYXRhLmlua0xpc3RzLnB1c2goW10pO2ZvcihsZXQgdD0wLHI9bltlXS5sZW5ndGg7dDxyO3QrPTIpdGhpcy5kYXRhLmlua0xpc3RzW2VdLnB1c2goe3g6YS5mZXRjaElmUmVmKG5bZV1bdF0pLHk6YS5mZXRjaElmUmVmKG5bZV1bdCsxXSl9KX1pZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPXRoaXMuY29sb3I/Z2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKTpbMCwwLDBdLG49dC5nZXQoIkNBIiksaT10aGlzLmJvcmRlclN0eWxlLndpZHRofHwxLHM9MippLG89WzEvMCwxLzAsLTEvMCwtMS8wXTtmb3IoY29uc3QgZSBvZiB0aGlzLmRhdGEuaW5rTGlzdHMpZm9yKGNvbnN0IHQgb2YgZSl7b1swXT1NYXRoLm1pbihvWzBdLHQueC1zKTtvWzFdPU1hdGgubWluKG9bMV0sdC55LXMpO29bMl09TWF0aC5tYXgob1syXSx0Lngrcyk7b1szXT1NYXRoLm1heChvWzNdLHQueStzKX1yLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLG8pfHwodGhpcy5yZWN0YW5nbGU9byk7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6YSxleHRyYTpgJHtpfSB3YCxzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOm4scG9pbnRzQ2FsbGJhY2s6KGUsdCk9Pntmb3IoY29uc3QgdCBvZiB0aGlzLmRhdGEuaW5rTGlzdHMpe2ZvcihsZXQgYT0wLHI9dC5sZW5ndGg7YTxyO2ErKyllLnB1c2goYCR7dFthXS54fSAke3RbYV0ueX0gJHswPT09YT8ibSI6ImwifWApO2UucHVzaCgiUyIpfXJldHVyblt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX19c3RhdGljIGNyZWF0ZU5ld0RpY3QoZSx0LHthcFJlZjphLGFwOm59KXtjb25zdHtjb2xvcjppLG9wYWNpdHk6byxwYXRoczpjLHJlY3Q6bCxyb3RhdGlvbjpoLHRoaWNrbmVzczp1fT1lLGQ9bmV3IHMuRGljdCh0KTtkLnNldCgiVHlwZSIscy5OYW1lLmdldCgiQW5ub3QiKSk7ZC5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkluayIpKTtkLnNldCgiQ3JlYXRpb25EYXRlIixgRDokeygwLHIuZ2V0TW9kaWZpY2F0aW9uRGF0ZSkoKX1gKTtkLnNldCgiUmVjdCIsbCk7ZC5zZXQoIklua0xpc3QiLGMubWFwKChlPT5lLnBvaW50cykpKTtkLnNldCgiRiIsNCk7ZC5zZXQoIlJvdGF0ZSIsaCk7Y29uc3QgZj1uZXcgcy5EaWN0KHQpO2Quc2V0KCJCUyIsZik7Zi5zZXQoIlciLHUpO2Quc2V0KCJDIixBcnJheS5mcm9tKGksKGU9PmUvMjU1KSkpO2Quc2V0KCJDQSIsbyk7Y29uc3QgZz1uZXcgcy5EaWN0KHQpO2Quc2V0KCJBUCIsZyk7YT9nLnNldCgiTiIsYSk6Zy5zZXQoIk4iLG4pO3JldHVybiBkfXN0YXRpYyBhc3luYyBjcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKGUsdCxhKXtjb25zdHtjb2xvcjpyLHJlY3Q6YyxwYXRoczpsLHRoaWNrbmVzczpoLG9wYWNpdHk6dX09ZSxkPVtgJHtofSB3IDEgSiAxIGpgLGAkeygwLGkuZ2V0UGRmQ29sb3IpKHIsITEpfWBdOzEhPT11JiZkLnB1c2goIi9SMCBncyIpO2NvbnN0IGY9W107Zm9yKGNvbnN0e2JlemllcjplfW9mIGwpe2YubGVuZ3RoPTA7Zi5wdXNoKGAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKGVbMF0pfSAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKGVbMV0pfSBtYCk7Zm9yKGxldCB0PTIsYT1lLmxlbmd0aDt0PGE7dCs9Nil7Y29uc3QgYT1lLnNsaWNlKHQsdCs2KS5tYXAobi5udW1iZXJUb1N0cmluZykuam9pbigiICIpO2YucHVzaChgJHthfSBjYCl9Zi5wdXNoKCJTIik7ZC5wdXNoKGYuam9pbigiXG4iKSl9Y29uc3QgZz1kLmpvaW4oIlxuIikscD1uZXcgcy5EaWN0KHQpO3Auc2V0KCJGb3JtVHlwZSIsMSk7cC5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZvcm0iKSk7cC5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIlhPYmplY3QiKSk7cC5zZXQoIkJCb3giLGMpO3Auc2V0KCJMZW5ndGgiLGcubGVuZ3RoKTtpZigxIT09dSl7Y29uc3QgZT1uZXcgcy5EaWN0KHQpLGE9bmV3IHMuRGljdCh0KSxyPW5ldyBzLkRpY3QodCk7ci5zZXQoIkNBIix1KTtyLnNldCgiVHlwZSIscy5OYW1lLmdldCgiRXh0R1N0YXRlIikpO2Euc2V0KCJSMCIscik7ZS5zZXQoIkV4dEdTdGF0ZSIsYSk7cC5zZXQoIlJlc291cmNlcyIsZSl9Y29uc3QgbT1uZXcgby5TdHJpbmdTdHJlYW0oZyk7bS5kaWN0PXA7cmV0dXJuIG19fWNsYXNzIEhpZ2hsaWdodEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOmF9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuSElHSExJR0hUO2lmKHRoaXMuZGF0YS5xdWFkUG9pbnRzPWdldFF1YWRQb2ludHModCxudWxsKSl7Y29uc3QgZT10aGlzLmFwcGVhcmFuY2U/LmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTtpZighdGhpcy5hcHBlYXJhbmNlfHwhZT8uaGFzKCJFeHRHU3RhdGUiKSl7dGhpcy5hcHBlYXJhbmNlJiYoMCxyLndhcm4pKCJIaWdobGlnaHRBbm5vdGF0aW9uIC0gaWdub3JpbmcgYnVpbHQtaW4gYXBwZWFyYW5jZSBzdHJlYW0uIik7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzEsMSwwXSxuPXQuZ2V0KCJDQSIpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmEsZmlsbENvbG9yOmUsYmxlbmRNb2RlOiJNdWx0aXBseSIsZmlsbEFscGhhOm4scG9pbnRzQ2FsbGJhY2s6KGUsdCk9PntlLnB1c2goYCR7dFswXS54fSAke3RbMF0ueX0gbWAsYCR7dFsxXS54fSAke3RbMV0ueX0gbGAsYCR7dFszXS54fSAke3RbM10ueX0gbGAsYCR7dFsyXS54fSAke3RbMl0ueX0gbGAsImYiKTtyZXR1cm5bdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX19ZWxzZSB0aGlzLmRhdGEucG9wdXBSZWY9bnVsbH19Y2xhc3MgVW5kZXJsaW5lQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5VTkRFUkxJTkU7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyh0LG51bGwpKXtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPXRoaXMuY29sb3I/Z2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKTpbMCwwLDBdLHI9dC5nZXQoIkNBIik7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6YSxleHRyYToiW10gMCBkIDAuNTcxIHciLHN0cm9rZUNvbG9yOmUsc3Ryb2tlQWxwaGE6cixwb2ludHNDYWxsYmFjazooZSx0KT0+e2UucHVzaChgJHt0WzJdLnh9ICR7dFsyXS55KzEuM30gbWAsYCR7dFszXS54fSAke3RbM10ueSsxLjN9IGxgLCJTIik7cmV0dXJuW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgdGhpcy5kYXRhLnBvcHVwUmVmPW51bGx9fWNsYXNzIFNxdWlnZ2x5QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWTtpZih0aGlzLmRhdGEucXVhZFBvaW50cz1nZXRRdWFkUG9pbnRzKHQsbnVsbCkpe2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0scj10LmdldCgiQ0EiKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOnIscG9pbnRzQ2FsbGJhY2s6KGUsdCk9Pntjb25zdCBhPSh0WzBdLnktdFsyXS55KS82O2xldCByPWEsbj10WzJdLng7Y29uc3QgaT10WzJdLnkscz10WzNdLng7ZS5wdXNoKGAke259ICR7aStyfSBtYCk7ZG97bis9MjtyPTA9PT1yP2E6MDtlLnB1c2goYCR7bn0gJHtpK3J9IGxgKX13aGlsZShuPHMpO2UucHVzaCgiUyIpO3JldHVyblt0WzJdLngscyxpLTIqYSxpKzIqYV19fSl9fWVsc2UgdGhpcy5kYXRhLnBvcHVwUmVmPW51bGx9fWNsYXNzIFN0cmlrZU91dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOmF9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuU1RSSUtFT1VUO2lmKHRoaXMuZGF0YS5xdWFkUG9pbnRzPWdldFF1YWRQb2ludHModCxudWxsKSl7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzAsMCwwXSxyPXQuZ2V0KCJDQSIpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmEsZXh0cmE6IltdIDAgZCAxIHciLHN0cm9rZUNvbG9yOmUsc3Ryb2tlQWxwaGE6cixwb2ludHNDYWxsYmFjazooZSx0KT0+e2UucHVzaCgodFswXS54K3RbMl0ueCkvMisiICIrKHRbMF0ueSt0WzJdLnkpLzIrIiBtIiwodFsxXS54K3RbM10ueCkvMisiICIrKHRbMV0ueSt0WzNdLnkpLzIrIiBsIiwiUyIpO3JldHVyblt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX1lbHNlIHRoaXMuZGF0YS5wb3B1cFJlZj1udWxsfX1jbGFzcyBTdGFtcEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlNUQU1QO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlfXN0YXRpYyBhc3luYyBjcmVhdGVJbWFnZShlLHQpe2NvbnN0e3dpZHRoOmEsaGVpZ2h0Om59PWUsaT1uZXcgT2Zmc2NyZWVuQ2FudmFzKGEsbiksYz1pLmdldENvbnRleHQoIjJkIix7YWxwaGE6ITB9KTtjLmRyYXdJbWFnZShlLDAsMCk7Y29uc3QgbD1jLmdldEltYWdlRGF0YSgwLDAsYSxuKS5kYXRhLGg9bmV3IFVpbnQzMkFycmF5KGwuYnVmZmVyKSx1PWguc29tZShyLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuP2U9PmU+Pj4yNCE9MjU1OmU9PjI1NSE9KDI1NSZlKSk7aWYodSl7Yy5maWxsU3R5bGU9IndoaXRlIjtjLmZpbGxSZWN0KDAsMCxhLG4pO2MuZHJhd0ltYWdlKGUsMCwwKX1jb25zdCBkPWkuY29udmVydFRvQmxvYih7dHlwZToiaW1hZ2UvanBlZyIscXVhbGl0eToxfSkudGhlbigoZT0+ZS5hcnJheUJ1ZmZlcigpKSksZj1zLk5hbWUuZ2V0KCJYT2JqZWN0IiksZz1zLk5hbWUuZ2V0KCJJbWFnZSIpLHA9bmV3IHMuRGljdCh0KTtwLnNldCgiVHlwZSIsZik7cC5zZXQoIlN1YnR5cGUiLGcpO3Auc2V0KCJCaXRzUGVyQ29tcG9uZW50Iiw4KTtwLnNldCgiQ29sb3JTcGFjZSIscy5OYW1lLmdldCgiRGV2aWNlUkdCIikpO3Auc2V0KCJGaWx0ZXIiLHMuTmFtZS5nZXQoIkRDVERlY29kZSIpKTtwLnNldCgiQkJveCIsWzAsMCxhLG5dKTtwLnNldCgiV2lkdGgiLGEpO3Auc2V0KCJIZWlnaHQiLG4pO2xldCBtPW51bGw7aWYodSl7Y29uc3QgZT1uZXcgVWludDhBcnJheShoLmxlbmd0aCk7aWYoci5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbilmb3IobGV0IHQ9MCxhPWgubGVuZ3RoO3Q8YTt0KyspZVt0XT1oW3RdPj4+MjQ7ZWxzZSBmb3IobGV0IHQ9MCxhPWgubGVuZ3RoO3Q8YTt0KyspZVt0XT0yNTUmaFt0XTtjb25zdCBpPW5ldyBzLkRpY3QodCk7aS5zZXQoIlR5cGUiLGYpO2kuc2V0KCJTdWJ0eXBlIixnKTtpLnNldCgiQml0c1BlckNvbXBvbmVudCIsOCk7aS5zZXQoIkNvbG9yU3BhY2UiLHMuTmFtZS5nZXQoIkRldmljZUdyYXkiKSk7aS5zZXQoIldpZHRoIixhKTtpLnNldCgiSGVpZ2h0IixuKTttPW5ldyBvLlN0cmVhbShlLDAsMCxpKX1yZXR1cm57aW1hZ2VTdHJlYW06bmV3IG8uU3RyZWFtKGF3YWl0IGQsMCwwLHApLHNtYXNrU3RyZWFtOm0sd2lkdGg6YSxoZWlnaHQ6bn19c3RhdGljIGNyZWF0ZU5ld0RpY3QoZSx0LHthcFJlZjphLGFwOml9KXtjb25zdHtyZWN0Om8scm90YXRpb246Yyx1c2VyOmx9PWUsaD1uZXcgcy5EaWN0KHQpO2guc2V0KCJUeXBlIixzLk5hbWUuZ2V0KCJBbm5vdCIpKTtoLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiU3RhbXAiKSk7aC5zZXQoIkNyZWF0aW9uRGF0ZSIsYEQ6JHsoMCxyLmdldE1vZGlmaWNhdGlvbkRhdGUpKCl9YCk7aC5zZXQoIlJlY3QiLG8pO2guc2V0KCJGIiw0KTtoLnNldCgiQm9yZGVyIixbMCwwLDBdKTtoLnNldCgiUm90YXRlIixjKTtsJiZoLnNldCgiVCIsKDAsbi5pc0FzY2lpKShsKT9sOigwLG4uc3RyaW5nVG9VVEYxNlN0cmluZykobCwhMCkpO2lmKGF8fGkpe2NvbnN0IGU9bmV3IHMuRGljdCh0KTtoLnNldCgiQVAiLGUpO2E/ZS5zZXQoIk4iLGEpOmUuc2V0KCJOIixpKX1yZXR1cm4gaH1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQsYSl7Y29uc3R7cm90YXRpb246cn09ZSx7aW1hZ2VSZWY6aSx3aWR0aDpjLGhlaWdodDpsfT1hLmltYWdlLGg9bmV3IHMuRGljdCh0KSx1PW5ldyBzLkRpY3QodCk7aC5zZXQoIlhPYmplY3QiLHUpO3Uuc2V0KCJJbTAiLGkpO2NvbnN0IGQ9YHEgJHtjfSAwIDAgJHtsfSAwIDAgY20gL0ltMCBEbyBRYCxmPW5ldyBzLkRpY3QodCk7Zi5zZXQoIkZvcm1UeXBlIiwxKTtmLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiRm9ybSIpKTtmLnNldCgiVHlwZSIscy5OYW1lLmdldCgiWE9iamVjdCIpKTtmLnNldCgiQkJveCIsWzAsMCxjLGxdKTtmLnNldCgiUmVzb3VyY2VzIixoKTtpZihyKXtjb25zdCBlPSgwLG4uZ2V0Um90YXRpb25NYXRyaXgpKHIsYyxsKTtmLnNldCgiTWF0cml4IixlKX1jb25zdCBnPW5ldyBvLlN0cmluZ1N0cmVhbShkKTtnLmRpY3Q9ZjtyZXR1cm4gZ319Y2xhc3MgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lLG49bmV3IGQuRmlsZVNwZWModC5nZXQoIkZTIiksYSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuRklMRUFUVEFDSE1FTlQ7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7dGhpcy5kYXRhLmZpbGU9bi5zZXJpYWxpemFibGU7Y29uc3QgaT10LmdldCgiTmFtZSIpO3RoaXMuZGF0YS5uYW1lPWkgaW5zdGFuY2VvZiBzLk5hbWU/KDAsci5zdHJpbmdUb1BERlN0cmluZykoaS5uYW1lKToiUHVzaFBpbiI7Y29uc3Qgbz10LmdldCgiY2EiKTt0aGlzLmRhdGEuZmlsbEFscGhhPSJudW1iZXIiPT10eXBlb2YgbyYmbz49MCYmbzw9MT9vOm51bGx9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkZha2VVbmljb2RlRm9udD12b2lkIDA7dC5jcmVhdGVEZWZhdWx0QXBwZWFyYW5jZT1mdW5jdGlvbiBjcmVhdGVEZWZhdWx0QXBwZWFyYW5jZSh7Zm9udFNpemU6ZSxmb250TmFtZTp0LGZvbnRDb2xvcjphfSl7cmV0dXJuYC8keygwLG4uZXNjYXBlUERGTmFtZSkodCl9ICR7ZX0gVGYgJHtnZXRQZGZDb2xvcihhLCEwKX1gfTt0LmdldFBkZkNvbG9yPWdldFBkZkNvbG9yO3QucGFyc2VBcHBlYXJhbmNlU3RyZWFtPWZ1bmN0aW9uIHBhcnNlQXBwZWFyYW5jZVN0cmVhbShlLHQsYSl7cmV0dXJuIG5ldyBBcHBlYXJhbmNlU3RyZWFtRXZhbHVhdG9yKGUsdCxhKS5wYXJzZSgpfTt0LnBhcnNlRGVmYXVsdEFwcGVhcmFuY2U9ZnVuY3Rpb24gcGFyc2VEZWZhdWx0QXBwZWFyYW5jZShlKXtyZXR1cm4gbmV3IERlZmF1bHRBcHBlYXJhbmNlRXZhbHVhdG9yKGUpLnBhcnNlKCl9O3ZhciByPWEoNCksbj1hKDMpLGk9YSgyKSxzPWEoMTIpLG89YSgxMyksYz1hKDU5KSxsPWEoNTcpLGg9YSg4KTtjbGFzcyBEZWZhdWx0QXBwZWFyYW5jZUV2YWx1YXRvciBleHRlbmRzIG8uRXZhbHVhdG9yUHJlcHJvY2Vzc29ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKG5ldyBoLlN0cmluZ1N0cmVhbShlKSl9cGFyc2UoKXtjb25zdCBlPXtmbjowLGFyZ3M6W119LHQ9e2ZvbnRTaXplOjAsZm9udE5hbWU6IiIsZm9udENvbG9yOm5ldyBVaW50OENsYW1wZWRBcnJheSgzKX07dHJ5e2Zvcig7Oyl7ZS5hcmdzLmxlbmd0aD0wO2lmKCF0aGlzLnJlYWQoZSkpYnJlYWs7aWYoMCE9PXRoaXMuc2F2ZWRTdGF0ZXNEZXB0aCljb250aW51ZTtjb25zdHtmbjphLGFyZ3M6bn09ZTtzd2l0Y2goMHxhKXtjYXNlIGkuT1BTLnNldEZvbnQ6Y29uc3RbZSxhXT1uO2UgaW5zdGFuY2VvZiByLk5hbWUmJih0LmZvbnROYW1lPWUubmFtZSk7Im51bWJlciI9PXR5cGVvZiBhJiZhPjAmJih0LmZvbnRTaXplPWEpO2JyZWFrO2Nhc2UgaS5PUFMuc2V0RmlsbFJHQkNvbG9yOnMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2JJdGVtKG4sMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIGkuT1BTLnNldEZpbGxHcmF5OnMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShuLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBpLk9QUy5zZXRGaWxsQ01ZS0NvbG9yOnMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiSXRlbShuLDAsdC5mb250Q29sb3IsMCl9fX1jYXRjaChlKXsoMCxpLndhcm4pKGBwYXJzZURlZmF1bHRBcHBlYXJhbmNlIC0gaWdub3JpbmcgZXJyb3JzOiAiJHtlfSIuYCl9cmV0dXJuIHR9fWNsYXNzIEFwcGVhcmFuY2VTdHJlYW1FdmFsdWF0b3IgZXh0ZW5kcyBvLkV2YWx1YXRvclByZXByb2Nlc3Nvcntjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoZSk7dGhpcy5zdHJlYW09ZTt0aGlzLmV2YWx1YXRvck9wdGlvbnM9dDt0aGlzLnhyZWY9YTt0aGlzLnJlc291cmNlcz1lLmRpY3Q/LmdldCgiUmVzb3VyY2VzIil9cGFyc2UoKXtjb25zdCBlPXtmbjowLGFyZ3M6W119O2xldCB0PXtzY2FsZUZhY3RvcjoxLGZvbnRTaXplOjAsZm9udE5hbWU6IiIsZm9udENvbG9yOm5ldyBVaW50OENsYW1wZWRBcnJheSgzKSxmaWxsQ29sb3JTcGFjZTpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5fSxhPSExO2NvbnN0IG49W107dHJ5e2Zvcig7Oyl7ZS5hcmdzLmxlbmd0aD0wO2lmKGF8fCF0aGlzLnJlYWQoZSkpYnJlYWs7Y29uc3R7Zm46byxhcmdzOmN9PWU7c3dpdGNoKDB8byl7Y2FzZSBpLk9QUy5zYXZlOm4ucHVzaCh7c2NhbGVGYWN0b3I6dC5zY2FsZUZhY3Rvcixmb250U2l6ZTp0LmZvbnRTaXplLGZvbnROYW1lOnQuZm9udE5hbWUsZm9udENvbG9yOnQuZm9udENvbG9yLnNsaWNlKCksZmlsbENvbG9yU3BhY2U6dC5maWxsQ29sb3JTcGFjZX0pO2JyZWFrO2Nhc2UgaS5PUFMucmVzdG9yZTp0PW4ucG9wKCl8fHQ7YnJlYWs7Y2FzZSBpLk9QUy5zZXRUZXh0TWF0cml4OnQuc2NhbGVGYWN0b3IqPU1hdGguaHlwb3QoY1swXSxjWzFdKTticmVhaztjYXNlIGkuT1BTLnNldEZvbnQ6Y29uc3RbZSxvXT1jO2UgaW5zdGFuY2VvZiByLk5hbWUmJih0LmZvbnROYW1lPWUubmFtZSk7Im51bWJlciI9PXR5cGVvZiBvJiZvPjAmJih0LmZvbnRTaXplPW8qdC5zY2FsZUZhY3Rvcik7YnJlYWs7Y2FzZSBpLk9QUy5zZXRGaWxsQ29sb3JTcGFjZTp0LmZpbGxDb2xvclNwYWNlPXMuQ29sb3JTcGFjZS5wYXJzZSh7Y3M6Y1swXSx4cmVmOnRoaXMueHJlZixyZXNvdXJjZXM6dGhpcy5yZXNvdXJjZXMscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxsb2NhbENvbG9yU3BhY2VDYWNoZTp0aGlzLl9sb2NhbENvbG9yU3BhY2VDYWNoZX0pO2JyZWFrO2Nhc2UgaS5PUFMuc2V0RmlsbENvbG9yOnQuZmlsbENvbG9yU3BhY2UuZ2V0UmdiSXRlbShjLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBpLk9QUy5zZXRGaWxsUkdCQ29sb3I6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oYywwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2UgaS5PUFMuc2V0RmlsbEdyYXk6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2JJdGVtKGMsMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIGkuT1BTLnNldEZpbGxDTVlLQ29sb3I6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKGMsMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIGkuT1BTLnNob3dUZXh0OmNhc2UgaS5PUFMuc2hvd1NwYWNlZFRleHQ6Y2FzZSBpLk9QUy5uZXh0TGluZVNob3dUZXh0OmNhc2UgaS5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6YT0hMH19fWNhdGNoKGUpeygwLGkud2FybikoYHBhcnNlQXBwZWFyYW5jZVN0cmVhbSAtIGlnbm9yaW5nIGVycm9yczogIiR7ZX0iLmApfXRoaXMuc3RyZWFtLnJlc2V0KCk7ZGVsZXRlIHQuc2NhbGVGYWN0b3I7ZGVsZXRlIHQuZmlsbENvbG9yU3BhY2U7cmV0dXJuIHR9Z2V0IF9sb2NhbENvbG9yU3BhY2VDYWNoZSgpe3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJfbG9jYWxDb2xvclNwYWNlQ2FjaGUiLG5ldyBjLkxvY2FsQ29sb3JTcGFjZUNhY2hlKX1nZXQgX3BkZkZ1bmN0aW9uRmFjdG9yeSgpe2NvbnN0IGU9bmV3IGwuUERGRnVuY3Rpb25GYWN0b3J5KHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5ldmFsdWF0b3JPcHRpb25zLmlzRXZhbFN1cHBvcnRlZH0pO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJfcGRmRnVuY3Rpb25GYWN0b3J5IixlKX19ZnVuY3Rpb24gZ2V0UGRmQ29sb3IoZSx0KXtpZihlWzBdPT09ZVsxXSYmZVsxXT09PWVbMl0pe2NvbnN0IGE9ZVswXS8yNTU7cmV0dXJuYCR7KDAsbi5udW1iZXJUb1N0cmluZykoYSl9ICR7dD8iZyI6IkcifWB9cmV0dXJuIEFycmF5LmZyb20oZSwoZT0+KDAsbi5udW1iZXJUb1N0cmluZykoZS8yNTUpKSkuam9pbigiICIpKyIgIisodD8icmciOiJSRyIpfWNsYXNzIEZha2VVbmljb2RlRm9udHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMueHJlZj1lO3RoaXMud2lkdGhzPW51bGw7dGhpcy5maXJzdENoYXI9MS8wO3RoaXMubGFzdENoYXI9LTEvMDt0aGlzLmZvbnRGYW1pbHk9dDtjb25zdCBhPW5ldyBPZmZzY3JlZW5DYW52YXMoMSwxKTt0aGlzLmN0eE1lYXN1cmU9YS5nZXRDb250ZXh0KCIyZCIpO0Zha2VVbmljb2RlRm9udC5fZm9udE5hbWVJZHx8KEZha2VVbmljb2RlRm9udC5fZm9udE5hbWVJZD0xKTt0aGlzLmZvbnROYW1lPXIuTmFtZS5nZXQoYEludmFsaWRQREZqc0ZvbnRfJHt0fV8ke0Zha2VVbmljb2RlRm9udC5fZm9udE5hbWVJZCsrfWApfWdldCB0b1VuaWNvZGVSZWYoKXtpZighRmFrZVVuaWNvZGVGb250Ll90b1VuaWNvZGVSZWYpe2NvbnN0IGU9Ii9DSURJbml0IC9Qcm9jU2V0IGZpbmRyZXNvdXJjZSBiZWdpblxuMTIgZGljdCBiZWdpblxuYmVnaW5jbWFwXG4vQ0lEU3lzdGVtSW5mb1xuPDwgL1JlZ2lzdHJ5IChBZG9iZSlcbi9PcmRlcmluZyAoVUNTKSAvU3VwcGxlbWVudCAwID4+IGRlZlxuL0NNYXBOYW1lIC9BZG9iZS1JZGVudGl0eS1VQ1MgZGVmXG4vQ01hcFR5cGUgMiBkZWZcbjEgYmVnaW5jb2Rlc3BhY2VyYW5nZVxuPDAwMDA+IDxGRkZGPlxuZW5kY29kZXNwYWNlcmFuZ2VcbjEgYmVnaW5iZnJhbmdlXG48MDAwMD4gPEZGRkY+IDwwMDAwPlxuZW5kYmZyYW5nZVxuZW5kY21hcCBDTWFwTmFtZSBjdXJyZW50ZGljdCAvQ01hcCBkZWZpbmVyZXNvdXJjZSBwb3AgZW5kIGVuZCIsdD1GYWtlVW5pY29kZUZvbnQudG9Vbmljb2RlU3RyZWFtPW5ldyBoLlN0cmluZ1N0cmVhbShlKSxhPW5ldyByLkRpY3QodGhpcy54cmVmKTt0LmRpY3Q9YTthLnNldCgiTGVuZ3RoIixlLmxlbmd0aCk7RmFrZVVuaWNvZGVGb250Ll90b1VuaWNvZGVSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYodCl9cmV0dXJuIEZha2VVbmljb2RlRm9udC5fdG9Vbmljb2RlUmVmfWdldCBmb250RGVzY3JpcHRvclJlZigpe2lmKCFGYWtlVW5pY29kZUZvbnQuX2ZvbnREZXNjcmlwdG9yUmVmKXtjb25zdCBlPW5ldyByLkRpY3QodGhpcy54cmVmKTtlLnNldCgiVHlwZSIsci5OYW1lLmdldCgiRm9udERlc2NyaXB0b3IiKSk7ZS5zZXQoIkZvbnROYW1lIix0aGlzLmZvbnROYW1lKTtlLnNldCgiRm9udEZhbWlseSIsIk15cmlhZFBybyBSZWd1bGFyIik7ZS5zZXQoIkZvbnRCQm94IixbMCwwLDAsMF0pO2Uuc2V0KCJGb250U3RyZXRjaCIsci5OYW1lLmdldCgiTm9ybWFsIikpO2Uuc2V0KCJGb250V2VpZ2h0Iiw0MDApO2Uuc2V0KCJJdGFsaWNBbmdsZSIsMCk7RmFrZVVuaWNvZGVGb250Ll9mb250RGVzY3JpcHRvclJlZj10aGlzLnhyZWYuZ2V0TmV3UGVyc2lzdGVudFJlZihlKX1yZXR1cm4gRmFrZVVuaWNvZGVGb250Ll9mb250RGVzY3JpcHRvclJlZn1nZXQgZGVzY2VuZGFudEZvbnRSZWYoKXtjb25zdCBlPW5ldyByLkRpY3QodGhpcy54cmVmKTtlLnNldCgiQmFzZUZvbnQiLHRoaXMuZm9udE5hbWUpO2Uuc2V0KCJUeXBlIixyLk5hbWUuZ2V0KCJGb250IikpO2Uuc2V0KCJTdWJ0eXBlIixyLk5hbWUuZ2V0KCJDSURGb250VHlwZTAiKSk7ZS5zZXQoIkNJRFRvR0lETWFwIixyLk5hbWUuZ2V0KCJJZGVudGl0eSIpKTtlLnNldCgiRmlyc3RDaGFyIix0aGlzLmZpcnN0Q2hhcik7ZS5zZXQoIkxhc3RDaGFyIix0aGlzLmxhc3RDaGFyKTtlLnNldCgiRm9udERlc2NyaXB0b3IiLHRoaXMuZm9udERlc2NyaXB0b3JSZWYpO2Uuc2V0KCJEVyIsMWUzKTtjb25zdCB0PVtdLGE9Wy4uLnRoaXMud2lkdGhzLmVudHJpZXMoKV0uc29ydCgpO2xldCBuPW51bGwsaT1udWxsO2Zvcihjb25zdFtlLHJdb2YgYSlpZihuKWlmKGU9PT1uK2kubGVuZ3RoKWkucHVzaChyKTtlbHNle3QucHVzaChuLGkpO249ZTtpPVtyXX1lbHNle249ZTtpPVtyXX1uJiZ0LnB1c2gobixpKTtlLnNldCgiVyIsdCk7Y29uc3Qgcz1uZXcgci5EaWN0KHRoaXMueHJlZik7cy5zZXQoIk9yZGVyaW5nIiwiSWRlbnRpdHkiKTtzLnNldCgiUmVnaXN0cnkiLCJBZG9iZSIpO3Muc2V0KCJTdXBwbGVtZW50IiwwKTtlLnNldCgiQ0lEU3lzdGVtSW5mbyIscyk7cmV0dXJuIHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfWdldCBiYXNlRm9udFJlZigpe2NvbnN0IGU9bmV3IHIuRGljdCh0aGlzLnhyZWYpO2Uuc2V0KCJCYXNlRm9udCIsdGhpcy5mb250TmFtZSk7ZS5zZXQoIlR5cGUiLHIuTmFtZS5nZXQoIkZvbnQiKSk7ZS5zZXQoIlN1YnR5cGUiLHIuTmFtZS5nZXQoIlR5cGUwIikpO2Uuc2V0KCJFbmNvZGluZyIsci5OYW1lLmdldCgiSWRlbnRpdHktSCIpKTtlLnNldCgiRGVzY2VuZGFudEZvbnRzIixbdGhpcy5kZXNjZW5kYW50Rm9udFJlZl0pO2Uuc2V0KCJUb1VuaWNvZGUiLHRoaXMudG9Vbmljb2RlUmVmKTtyZXR1cm4gdGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYoZSl9Z2V0IHJlc291cmNlcygpe2NvbnN0IGU9bmV3IHIuRGljdCh0aGlzLnhyZWYpLHQ9bmV3IHIuRGljdCh0aGlzLnhyZWYpO3Quc2V0KHRoaXMuZm9udE5hbWUubmFtZSx0aGlzLmJhc2VGb250UmVmKTtlLnNldCgiRm9udCIsdCk7cmV0dXJuIGV9X2NyZWF0ZUNvbnRleHQoKXt0aGlzLndpZHRocz1uZXcgTWFwO3RoaXMuY3R4TWVhc3VyZS5mb250PWAxMDAwcHggJHt0aGlzLmZvbnRGYW1pbHl9YDtyZXR1cm4gdGhpcy5jdHhNZWFzdXJlfWNyZWF0ZUZvbnRSZXNvdXJjZXMoZSl7Y29uc3QgdD10aGlzLl9jcmVhdGVDb250ZXh0KCk7Zm9yKGNvbnN0IGEgb2YgZS5zcGxpdCgvXHJcbj98XG4vKSlmb3IoY29uc3QgZSBvZiBhLnNwbGl0KCIiKSl7Y29uc3QgYT1lLmNoYXJDb2RlQXQoMCk7aWYodGhpcy53aWR0aHMuaGFzKGEpKWNvbnRpbnVlO2NvbnN0IHI9dC5tZWFzdXJlVGV4dChlKSxuPU1hdGguY2VpbChyLndpZHRoKTt0aGlzLndpZHRocy5zZXQoYSxuKTt0aGlzLmZpcnN0Q2hhcj1NYXRoLm1pbihhLHRoaXMuZmlyc3RDaGFyKTt0aGlzLmxhc3RDaGFyPU1hdGgubWF4KGEsdGhpcy5sYXN0Q2hhcil9cmV0dXJuIHRoaXMucmVzb3VyY2VzfWNyZWF0ZUFwcGVhcmFuY2UoZSx0LGEscyxvLGMpe2NvbnN0IGw9dGhpcy5fY3JlYXRlQ29udGV4dCgpLHU9W107bGV0IGQ9LTEvMDtmb3IoY29uc3QgdCBvZiBlLnNwbGl0KC9cclxuP3xcbi8pKXt1LnB1c2godCk7Y29uc3QgZT1sLm1lYXN1cmVUZXh0KHQpLndpZHRoO2Q9TWF0aC5tYXgoZCxlKTtmb3IoY29uc3QgZSBvZiB0LnNwbGl0KCIiKSl7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk7bGV0IGE9dGhpcy53aWR0aHMuZ2V0KHQpO2lmKHZvaWQgMD09PWEpe2NvbnN0IHI9bC5tZWFzdXJlVGV4dChlKTthPU1hdGguY2VpbChyLndpZHRoKTt0aGlzLndpZHRocy5zZXQodCxhKTt0aGlzLmZpcnN0Q2hhcj1NYXRoLm1pbih0LHRoaXMuZmlyc3RDaGFyKTt0aGlzLmxhc3RDaGFyPU1hdGgubWF4KHQsdGhpcy5sYXN0Q2hhcil9fX1kKj1zLzFlMztjb25zdFtmLGcscCxtXT10O2xldCBiPXAtZix5PW0tZzthJTE4MCE9MCYmKFtiLHldPVt5LGJdKTtsZXQgdz0xO2Q+YiYmKHc9Yi9kKTtsZXQgUz0xO2NvbnN0IHg9aS5MSU5FX0ZBQ1RPUipzLEM9aS5MSU5FX0RFU0NFTlRfRkFDVE9SKnMsaz14KnUubGVuZ3RoO2s+eSYmKFM9eS9rKTtjb25zdCB2PXMqTWF0aC5taW4odyxTKSxGPVsicSIsYDAgMCAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKGIpfSAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKHkpfSByZSBXIG5gLCJCVCIsYDEgMCAwIDEgMCAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKHkrQyl9IFRtIDAgVGMgJHtnZXRQZGZDb2xvcihvLCEwKX1gLGAvJHt0aGlzLmZvbnROYW1lLm5hbWV9ICR7KDAsbi5udW1iZXJUb1N0cmluZykodil9IFRmYF0se3Jlc291cmNlczpPfT10aGlzO2lmKDEhPT0oYz0ibnVtYmVyIj09dHlwZW9mIGMmJmM+PTAmJmM8PTE/YzoxKSl7Ri5wdXNoKCIvUjAgZ3MiKTtjb25zdCBlPW5ldyByLkRpY3QodGhpcy54cmVmKSx0PW5ldyByLkRpY3QodGhpcy54cmVmKTt0LnNldCgiY2EiLGMpO3Quc2V0KCJDQSIsYyk7dC5zZXQoIlR5cGUiLHIuTmFtZS5nZXQoIkV4dEdTdGF0ZSIpKTtlLnNldCgiUjAiLHQpO08uc2V0KCJFeHRHU3RhdGUiLGUpfWNvbnN0IFQ9KDAsbi5udW1iZXJUb1N0cmluZykoeCk7Zm9yKGNvbnN0IGUgb2YgdSlGLnB1c2goYDAgLSR7VH0gVGQgPCR7KDAsbi5zdHJpbmdUb1VURjE2SGV4U3RyaW5nKShlKX0+IFRqYCk7Ri5wdXNoKCJFVCIsIlEiKTtjb25zdCBNPUYuam9pbigiXG4iKSxEPW5ldyByLkRpY3QodGhpcy54cmVmKTtELnNldCgiU3VidHlwZSIsci5OYW1lLmdldCgiRm9ybSIpKTtELnNldCgiVHlwZSIsci5OYW1lLmdldCgiWE9iamVjdCIpKTtELnNldCgiQkJveCIsWzAsMCxiLHldKTtELnNldCgiTGVuZ3RoIixNLmxlbmd0aCk7RC5zZXQoIlJlc291cmNlcyIsTyk7aWYoYSl7Y29uc3QgZT0oMCxuLmdldFJvdGF0aW9uTWF0cml4KShhLGIseSk7RC5zZXQoIk1hdHJpeCIsZSl9Y29uc3QgRT1uZXcgaC5TdHJpbmdTdHJlYW0oTSk7RS5kaWN0PUQ7cmV0dXJuIEV9fXQuRmFrZVVuaWNvZGVGb250PUZha2VVbmljb2RlRm9udH0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkNvbG9yU3BhY2U9dm9pZCAwO3ZhciByPWEoMiksbj1hKDQpLGk9YSg1KSxzPWEoMyk7Y2xhc3MgQ29sb3JTcGFjZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuY29uc3RydWN0b3I9PT1Db2xvclNwYWNlJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQ29sb3JTcGFjZS4iKTt0aGlzLm5hbWU9ZTt0aGlzLm51bUNvbXBzPXR9Z2V0UmdiKGUsdCl7Y29uc3QgYT1uZXcgVWludDhDbGFtcGVkQXJyYXkoMyk7dGhpcy5nZXRSZ2JJdGVtKGUsdCxhLDApO3JldHVybiBhfWdldFJnYkl0ZW0oZSx0LGEsbil7KDAsci51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldFJnYkl0ZW0iKX1nZXRSZ2JCdWZmZXIoZSx0LGEsbixpLHMsbyl7KDAsci51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldFJnYkJ1ZmZlciIpfWdldE91dHB1dExlbmd0aChlLHQpeygwLHIudW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRPdXRwdXRMZW5ndGgiKX1pc1Bhc3N0aHJvdWdoKGUpe3JldHVybiExfWlzRGVmYXVsdERlY29kZShlLHQpe3JldHVybiBDb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZShlLHRoaXMubnVtQ29tcHMpfWZpbGxSZ2IoZSx0LGEscixuLGkscyxvLGMpe2NvbnN0IGw9dCphO2xldCBoPW51bGw7Y29uc3QgdT0xPDxzLGQ9YSE9PW58fHQhPT1yO2lmKHRoaXMuaXNQYXNzdGhyb3VnaChzKSloPW87ZWxzZSBpZigxPT09dGhpcy5udW1Db21wcyYmbD51JiYiRGV2aWNlR3JheSIhPT10aGlzLm5hbWUmJiJEZXZpY2VSR0IiIT09dGhpcy5uYW1lKXtjb25zdCB0PXM8PTg/bmV3IFVpbnQ4QXJyYXkodSk6bmV3IFVpbnQxNkFycmF5KHUpO2ZvcihsZXQgZT0wO2U8dTtlKyspdFtlXT1lO2NvbnN0IGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqdSk7dGhpcy5nZXRSZ2JCdWZmZXIodCwwLHUsYSwwLHMsMCk7aWYoZCl7aD1uZXcgVWludDhBcnJheSgzKmwpO2xldCBlPTA7Zm9yKGxldCB0PTA7dDxsOysrdCl7Y29uc3Qgcj0zKm9bdF07aFtlKytdPWFbcl07aFtlKytdPWFbcisxXTtoW2UrK109YVtyKzJdfX1lbHNle2xldCB0PTA7Zm9yKGxldCByPTA7cjxsOysrcil7Y29uc3Qgbj0zKm9bcl07ZVt0KytdPWFbbl07ZVt0KytdPWFbbisxXTtlW3QrK109YVtuKzJdO3QrPWN9fX1lbHNlIGlmKGQpe2g9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqbCk7dGhpcy5nZXRSZ2JCdWZmZXIobywwLGwsaCwwLHMsMCl9ZWxzZSB0aGlzLmdldFJnYkJ1ZmZlcihvLDAscippLGUsMCxzLGMpO2lmKGgpaWYoZCkhZnVuY3Rpb24gcmVzaXplUmdiSW1hZ2UoZSx0LGEscixuLGkscyl7cz0xIT09cz8wOnM7Y29uc3Qgbz1hL24sYz1yL2k7bGV0IGwsaD0wO2NvbnN0IHU9bmV3IFVpbnQxNkFycmF5KG4pLGQ9MyphO2ZvcihsZXQgZT0wO2U8bjtlKyspdVtlXT0zKk1hdGguZmxvb3IoZSpvKTtmb3IobGV0IGE9MDthPGk7YSsrKXtjb25zdCByPU1hdGguZmxvb3IoYSpjKSpkO2ZvcihsZXQgYT0wO2E8bjthKyspe2w9cit1W2FdO3RbaCsrXT1lW2wrK107dFtoKytdPWVbbCsrXTt0W2grK109ZVtsKytdO2grPXN9fX0oaCxlLHQsYSxyLG4sYyk7ZWxzZXtsZXQgdD0wLGE9MDtmb3IobGV0IG49MCxzPXIqaTtuPHM7bisrKXtlW3QrK109aFthKytdO2VbdCsrXT1oW2ErK107ZVt0KytdPWhbYSsrXTt0Kz1jfX19Z2V0IHVzZXNaZXJvVG9PbmVSYW5nZSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJ1c2VzWmVyb1RvT25lUmFuZ2UiLCEwKX1zdGF0aWMgX2NhY2hlKGUsdCxhLHIpe2lmKCFhKXRocm93IG5ldyBFcnJvcignQ29sb3JTcGFjZS5fY2FjaGUgLSBleHBlY3RlZCAibG9jYWxDb2xvclNwYWNlQ2FjaGUiIGFyZ3VtZW50LicpO2lmKCFyKXRocm93IG5ldyBFcnJvcignQ29sb3JTcGFjZS5fY2FjaGUgLSBleHBlY3RlZCAicGFyc2VkQ29sb3JTcGFjZSIgYXJndW1lbnQuJyk7bGV0IGkscztpZihlIGluc3RhbmNlb2Ygbi5SZWYpe3M9ZTtlPXQuZmV0Y2goZSl9ZSBpbnN0YW5jZW9mIG4uTmFtZSYmKGk9ZS5uYW1lKTsoaXx8cykmJmEuc2V0KGkscyxyKX1zdGF0aWMgZ2V0Q2FjaGVkKGUsdCxhKXtpZighYSl0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuZ2V0Q2FjaGVkIC0gZXhwZWN0ZWQgImxvY2FsQ29sb3JTcGFjZUNhY2hlIiBhcmd1bWVudC4nKTtpZihlIGluc3RhbmNlb2Ygbi5SZWYpe2NvbnN0IHI9YS5nZXRCeVJlZihlKTtpZihyKXJldHVybiByO3RyeXtlPXQuZmV0Y2goZSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZX19aWYoZSBpbnN0YW5jZW9mIG4uTmFtZSl7Y29uc3QgdD1hLmdldEJ5TmFtZShlLm5hbWUpO2lmKHQpcmV0dXJuIHR9cmV0dXJuIG51bGx9c3RhdGljIGFzeW5jIHBhcnNlQXN5bmMoe2NzOmUseHJlZjp0LHJlc291cmNlczphPW51bGwscGRmRnVuY3Rpb25GYWN0b3J5OnIsbG9jYWxDb2xvclNwYWNlQ2FjaGU6bn0pe2NvbnN0IGk9dGhpcy5fcGFyc2UoZSx0LGEscik7dGhpcy5fY2FjaGUoZSx0LG4saSk7cmV0dXJuIGl9c3RhdGljIHBhcnNlKHtjczplLHhyZWY6dCxyZXNvdXJjZXM6YT1udWxsLHBkZkZ1bmN0aW9uRmFjdG9yeTpyLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm59KXtjb25zdCBpPXRoaXMuZ2V0Q2FjaGVkKGUsdCxuKTtpZihpKXJldHVybiBpO2NvbnN0IHM9dGhpcy5fcGFyc2UoZSx0LGEscik7dGhpcy5fY2FjaGUoZSx0LG4scyk7cmV0dXJuIHN9c3RhdGljIF9wYXJzZShlLHQsYT1udWxsLGkpe2lmKChlPXQuZmV0Y2hJZlJlZihlKSlpbnN0YW5jZW9mIG4uTmFtZSlzd2l0Y2goZS5uYW1lKXtjYXNlIkciOmNhc2UiRGV2aWNlR3JheSI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5O2Nhc2UiUkdCIjpjYXNlIkRldmljZVJHQiI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7Y2FzZSJDTVlLIjpjYXNlIkRldmljZUNNWUsiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMuY215aztjYXNlIlBhdHRlcm4iOnJldHVybiBuZXcgUGF0dGVybkNTKG51bGwpO2RlZmF1bHQ6aWYoYSBpbnN0YW5jZW9mIG4uRGljdCl7Y29uc3Qgcj1hLmdldCgiQ29sb3JTcGFjZSIpO2lmKHIgaW5zdGFuY2VvZiBuLkRpY3Qpe2NvbnN0IHM9ci5nZXQoZS5uYW1lKTtpZihzKXtpZihzIGluc3RhbmNlb2Ygbi5OYW1lKXJldHVybiB0aGlzLl9wYXJzZShzLHQsYSxpKTtlPXM7YnJlYWt9fX10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgVW5yZWNvZ25pemVkIENvbG9yU3BhY2U6ICR7ZS5uYW1lfWApfWlmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IG49dC5mZXRjaElmUmVmKGVbMF0pLm5hbWU7bGV0IHMsbyxjLGwsaCx1O3N3aXRjaChuKXtjYXNlIkciOmNhc2UiRGV2aWNlR3JheSI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5O2Nhc2UiUkdCIjpjYXNlIkRldmljZVJHQiI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7Y2FzZSJDTVlLIjpjYXNlIkRldmljZUNNWUsiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMuY215aztjYXNlIkNhbEdyYXkiOnM9dC5mZXRjaElmUmVmKGVbMV0pO2w9cy5nZXRBcnJheSgiV2hpdGVQb2ludCIpO2g9cy5nZXRBcnJheSgiQmxhY2tQb2ludCIpO3U9cy5nZXQoIkdhbW1hIik7cmV0dXJuIG5ldyBDYWxHcmF5Q1MobCxoLHUpO2Nhc2UiQ2FsUkdCIjpzPXQuZmV0Y2hJZlJlZihlWzFdKTtsPXMuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKTtoPXMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKTt1PXMuZ2V0QXJyYXkoIkdhbW1hIik7Y29uc3QgZD1zLmdldEFycmF5KCJNYXRyaXgiKTtyZXR1cm4gbmV3IENhbFJHQkNTKGwsaCx1LGQpO2Nhc2UiSUNDQmFzZWQiOmNvbnN0IGY9dC5mZXRjaElmUmVmKGVbMV0pLmRpY3Q7bz1mLmdldCgiTiIpO2NvbnN0IGc9Zi5nZXQoIkFsdGVybmF0ZSIpO2lmKGcpe2NvbnN0IGU9dGhpcy5fcGFyc2UoZyx0LGEsaSk7aWYoZS5udW1Db21wcz09PW8pcmV0dXJuIGU7KDAsci53YXJuKSgiSUNDQmFzZWQgY29sb3Igc3BhY2U6IElnbm9yaW5nIGluY29ycmVjdCAvQWx0ZXJuYXRlIGVudHJ5LiIpfWlmKDE9PT1vKXJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtpZigzPT09bylyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtpZig0PT09bylyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7YnJlYWs7Y2FzZSJQYXR0ZXJuIjpjPWVbMV18fG51bGw7YyYmKGM9dGhpcy5fcGFyc2UoYyx0LGEsaSkpO3JldHVybiBuZXcgUGF0dGVybkNTKGMpO2Nhc2UiSSI6Y2FzZSJJbmRleGVkIjpjPXRoaXMuX3BhcnNlKGVbMV0sdCxhLGkpO2NvbnN0IHA9dC5mZXRjaElmUmVmKGVbMl0pKzEsbT10LmZldGNoSWZSZWYoZVszXSk7cmV0dXJuIG5ldyBJbmRleGVkQ1MoYyxwLG0pO2Nhc2UiU2VwYXJhdGlvbiI6Y2FzZSJEZXZpY2VOIjpjb25zdCBiPXQuZmV0Y2hJZlJlZihlWzFdKTtvPUFycmF5LmlzQXJyYXkoYik/Yi5sZW5ndGg6MTtjPXRoaXMuX3BhcnNlKGVbMl0sdCxhLGkpO2NvbnN0IHk9aS5jcmVhdGUoZVszXSk7cmV0dXJuIG5ldyBBbHRlcm5hdGVDUyhvLGMseSk7Y2FzZSJMYWIiOnM9dC5mZXRjaElmUmVmKGVbMV0pO2w9cy5nZXRBcnJheSgiV2hpdGVQb2ludCIpO2g9cy5nZXRBcnJheSgiQmxhY2tQb2ludCIpO2NvbnN0IHc9cy5nZXRBcnJheSgiUmFuZ2UiKTtyZXR1cm4gbmV3IExhYkNTKGwsaCx3KTtkZWZhdWx0OnRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmltcGxlbWVudGVkIENvbG9yU3BhY2Ugb2JqZWN0OiAke259YCl9fXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbnJlY29nbml6ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICR7ZX1gKX1zdGF0aWMgaXNEZWZhdWx0RGVjb2RlKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuITA7aWYoMip0IT09ZS5sZW5ndGgpeygwLHIud2FybikoIlRoZSBkZWNvZGUgbWFwIGlzIG5vdCB0aGUgY29ycmVjdCBsZW5ndGgiKTtyZXR1cm4hMH1mb3IobGV0IHQ9MCxhPWUubGVuZ3RoO3Q8YTt0Kz0yKWlmKDAhPT1lW3RdfHwxIT09ZVt0KzFdKXJldHVybiExO3JldHVybiEwfXN0YXRpYyBnZXQgc2luZ2xldG9ucygpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJzaW5nbGV0b25zIix7Z2V0IGdyYXkoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZ3JheSIsbmV3IERldmljZUdyYXlDUyl9LGdldCByZ2IoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywicmdiIixuZXcgRGV2aWNlUmdiQ1MpfSxnZXQgY215aygpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJjbXlrIixuZXcgRGV2aWNlQ215a0NTKX19KX19dC5Db2xvclNwYWNlPUNvbG9yU3BhY2U7Y2xhc3MgQWx0ZXJuYXRlQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigiQWx0ZXJuYXRlIixlKTt0aGlzLmJhc2U9dDt0aGlzLnRpbnRGbj1hO3RoaXMudG1wQnVmPW5ldyBGbG9hdDMyQXJyYXkodC5udW1Db21wcyl9Z2V0UmdiSXRlbShlLHQsYSxyKXtjb25zdCBuPXRoaXMudG1wQnVmO3RoaXMudGludEZuKGUsdCxuLDApO3RoaXMuYmFzZS5nZXRSZ2JJdGVtKG4sMCxhLHIpfWdldFJnYkJ1ZmZlcihlLHQsYSxyLG4saSxzKXtjb25zdCBvPXRoaXMudGludEZuLGM9dGhpcy5iYXNlLGw9MS8oKDE8PGkpLTEpLGg9Yy5udW1Db21wcyx1PWMudXNlc1plcm9Ub09uZVJhbmdlLGQ9KGMuaXNQYXNzdGhyb3VnaCg4KXx8IXUpJiYwPT09cztsZXQgZj1kP246MDtjb25zdCBnPWQ/cjpuZXcgVWludDhDbGFtcGVkQXJyYXkoaCphKSxwPXRoaXMubnVtQ29tcHMsbT1uZXcgRmxvYXQzMkFycmF5KHApLGI9bmV3IEZsb2F0MzJBcnJheShoKTtsZXQgeSx3O2Zvcih5PTA7eTxhO3krKyl7Zm9yKHc9MDt3PHA7dysrKW1bd109ZVt0KytdKmw7byhtLDAsYiwwKTtpZih1KWZvcih3PTA7dzxoO3crKylnW2YrK109MjU1KmJbd107ZWxzZXtjLmdldFJnYkl0ZW0oYiwwLGcsZik7Zis9aH19ZHx8Yy5nZXRSZ2JCdWZmZXIoZywwLGEscixuLDgscyl9Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoZSp0aGlzLmJhc2UubnVtQ29tcHMvdGhpcy5udW1Db21wcyx0KX19Y2xhc3MgUGF0dGVybkNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3RvcihlKXtzdXBlcigiUGF0dGVybiIsbnVsbCk7dGhpcy5iYXNlPWV9aXNEZWZhdWx0RGVjb2RlKGUsdCl7KDAsci51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBQYXR0ZXJuQ1MuaXNEZWZhdWx0RGVjb2RlIil9fWNsYXNzIEluZGV4ZWRDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKCJJbmRleGVkIiwxKTt0aGlzLmJhc2U9ZTt0aGlzLmhpZ2hWYWw9dDtjb25zdCBuPWUubnVtQ29tcHMqdDt0aGlzLmxvb2t1cD1uZXcgVWludDhBcnJheShuKTtpZihhIGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtKXtjb25zdCBlPWEuZ2V0Qnl0ZXMobik7dGhpcy5sb29rdXAuc2V0KGUpfWVsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBhKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbmRleGVkQ1MgLSB1bnJlY29nbml6ZWQgbG9va3VwIHRhYmxlOiAke2F9YCk7Zm9yKGxldCBlPTA7ZTxuOysrZSl0aGlzLmxvb2t1cFtlXT0yNTUmYS5jaGFyQ29kZUF0KGUpfX1nZXRSZ2JJdGVtKGUsdCxhLHIpe2NvbnN0IG49dGhpcy5iYXNlLm51bUNvbXBzLGk9ZVt0XSpuO3RoaXMuYmFzZS5nZXRSZ2JCdWZmZXIodGhpcy5sb29rdXAsaSwxLGEsciw4LDApfWdldFJnYkJ1ZmZlcihlLHQsYSxyLG4saSxzKXtjb25zdCBvPXRoaXMuYmFzZSxjPW8ubnVtQ29tcHMsbD1vLmdldE91dHB1dExlbmd0aChjLHMpLGg9dGhpcy5sb29rdXA7Zm9yKGxldCBpPTA7aTxhOysraSl7Y29uc3QgYT1lW3QrK10qYztvLmdldFJnYkJ1ZmZlcihoLGEsMSxyLG4sOCxzKTtuKz1sfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gdGhpcy5iYXNlLmdldE91dHB1dExlbmd0aChlKnRoaXMuYmFzZS5udW1Db21wcyx0KX1pc0RlZmF1bHREZWNvZGUoZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMDtpZigyIT09ZS5sZW5ndGgpeygwLHIud2FybikoIkRlY29kZSBtYXAgbGVuZ3RoIGlzIG5vdCBjb3JyZWN0Iik7cmV0dXJuITB9aWYoIU51bWJlci5pc0ludGVnZXIodCl8fHQ8MSl7KDAsci53YXJuKSgiQml0cyBwZXIgY29tcG9uZW50IGlzIG5vdCBjb3JyZWN0Iik7cmV0dXJuITB9cmV0dXJuIDA9PT1lWzBdJiZlWzFdPT09KDE8PHQpLTF9fWNsYXNzIERldmljZUdyYXlDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoKXtzdXBlcigiRGV2aWNlR3JheSIsMSl9Z2V0UmdiSXRlbShlLHQsYSxyKXtjb25zdCBuPTI1NSplW3RdO2Fbcl09YVtyKzFdPWFbcisyXT1ufWdldFJnYkJ1ZmZlcihlLHQsYSxyLG4saSxzKXtjb25zdCBvPTI1NS8oKDE8PGkpLTEpO2xldCBjPXQsbD1uO2ZvcihsZXQgdD0wO3Q8YTsrK3Qpe2NvbnN0IHQ9byplW2MrK107cltsKytdPXQ7cltsKytdPXQ7cltsKytdPXQ7bCs9c319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCl9fWNsYXNzIERldmljZVJnYkNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJEZXZpY2VSR0IiLDMpfWdldFJnYkl0ZW0oZSx0LGEscil7YVtyXT0yNTUqZVt0XTthW3IrMV09MjU1KmVbdCsxXTthW3IrMl09MjU1KmVbdCsyXX1nZXRSZ2JCdWZmZXIoZSx0LGEscixuLGkscyl7aWYoOD09PWkmJjA9PT1zKXtyLnNldChlLnN1YmFycmF5KHQsdCszKmEpLG4pO3JldHVybn1jb25zdCBvPTI1NS8oKDE8PGkpLTEpO2xldCBjPXQsbD1uO2ZvcihsZXQgdD0wO3Q8YTsrK3Qpe3JbbCsrXT1vKmVbYysrXTtyW2wrK109byplW2MrK107cltsKytdPW8qZVtjKytdO2wrPXN9fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiBlKigzK3QpLzN8MH1pc1Bhc3N0aHJvdWdoKGUpe3JldHVybiA4PT09ZX19Y2xhc3MgRGV2aWNlQ215a0NTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJEZXZpY2VDTVlLIiw0KX0jcihlLHQsYSxyLG4pe2NvbnN0IGk9ZVt0XSphLHM9ZVt0KzFdKmEsbz1lW3QrMl0qYSxjPWVbdCszXSphO3Jbbl09MjU1K2kqKC00LjM4NzMzMjM4NDYwOTk4OCppKzU0LjQ4NjE1MTk0MTg5MTc2KnMrMTguODIyOTA1MDIxNjUzMDIqbysyMTIuMjU2NjI0NTE2Mzk1ODUqYy0yODUuMjMzMTAyNjEzNzAwNCkrcyooMS43MTQ5NzYzNDc3MzYyMTM0KnMtNS42MDk2NzM2OTA0MDQ3MzE1Km8rLTE3Ljg3Mzg3MDg2MTQxNTQ0NCpjLTUuNDk3MDA2NDI3MTk2MzY2KStvKigtMi41MjE3MzQwMTMxNjgzMDMzKm8tMjEuMjQ4OTIzMzM3MzUzMDczKmMrMTcuNTExOTI3MDg0MTgxMykrYyooLTIxLjg2MTIyMTQ3NDYzNjA1KmMtMTg5LjQ4MTgwODM1OTIyNzQ3KTtyW24rMV09MjU1K2kqKDguODQxMDQxNDIyMDM2MTQ5KmkrNjAuMTE4MDI3MDQ1NTk3MzY2KnMrNi44NzE0MjU1OTIwNDkwMDcqbyszMS4xNTkxMDAxMzAwNTU5MjIqYy03OS4yOTcwODQ0ODE2NTQ4KStzKigtMTUuMzEwMzYxMzA2OTY3ODE3KnMrMTcuNTc1MjUxMjYxMTA5NDgyKm8rMTMxLjM1MjUwOTEyNDkzOTc2KmMtMTkwLjk0NTMzMDI1ODg5NTEpK28qKDQuNDQ0MzM5MTAyODUyNzM5Km8rOS44NjMyODYxNDkzNDA1KmMtMjQuODY3NDE1ODI1NTU4NzgpK2MqKC0yMC43MzczMjU0NzExODEwMzQqYy0xODcuODA0NTM3MDk3MTk1NzgpO3JbbisyXT0yNTUraSooLjg4NDI1MjI0MzAwMDMyOTYqaSs4LjA3ODY3NzUwMzExMjkyOCpzKzMwLjg5OTc4MzA5NzAzNzI5Km8tLjIzODgzMjM4Njg5MTc4OTM0KmMtMTQuMTgzNTc2Nzk5NjczMjg2KStzKigxMC40OTU5MzI3MzQzMjA3MipzKzYzLjAyMzc4NDk0NzU0MDUyKm8rNTAuNjA2OTU3NjU2MzYwNzM0KmMtMTEyLjIzODg0MjUzNzE5MjQ4KStvKiguMDMyOTYwNDExMTQ4NzMyMTcqbysxMTUuNjAzODQ0NDk2NDY2NDEqYy0xOTMuNTgyMDkzNTY4NjE1MDUpK2MqKC0yMi4zMzgxNjgwNzMwOTg4NipjLTE4MC4xMjYxMzk3NDcwODM2Nyl9Z2V0UmdiSXRlbShlLHQsYSxyKXt0aGlzLiNyKGUsdCwxLGEscil9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89MS8oKDE8PGkpLTEpO2ZvcihsZXQgaT0wO2k8YTtpKyspe3RoaXMuI3IoZSx0LG8scixuKTt0Kz00O24rPTMrc319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUvNCooMyt0KXwwfX1jbGFzcyBDYWxHcmF5Q1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigiQ2FsR3JheSIsMSk7aWYoIWUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxHcmF5Iik7W3RoaXMuWFcsdGhpcy5ZVyx0aGlzLlpXXT1lO1t0aGlzLlhCLHRoaXMuWUIsdGhpcy5aQl09dHx8WzAsMCwwXTt0aGlzLkc9YXx8MTtpZih0aGlzLlhXPDB8fHRoaXMuWlc8MHx8MSE9PXRoaXMuWVcpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAke3RoaXMubmFtZX0sIG5vIGZhbGxiYWNrIGF2YWlsYWJsZWApO2lmKHRoaXMuWEI8MHx8dGhpcy5ZQjwwfHx0aGlzLlpCPDApeygwLHIuaW5mbykoYEludmFsaWQgQmxhY2tQb2ludCBmb3IgJHt0aGlzLm5hbWV9LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5gKTt0aGlzLlhCPXRoaXMuWUI9dGhpcy5aQj0wfTA9PT10aGlzLlhCJiYwPT09dGhpcy5ZQiYmMD09PXRoaXMuWkJ8fCgwLHIud2FybikoYCR7dGhpcy5uYW1lfSwgQmxhY2tQb2ludDogWEI6ICR7dGhpcy5YQn0sIFlCOiAke3RoaXMuWUJ9LCBaQjogJHt0aGlzLlpCfSwgb25seSBkZWZhdWx0IHZhbHVlcyBhcmUgc3VwcG9ydGVkLmApO2lmKHRoaXMuRzwxKXsoMCxyLmluZm8pKGBJbnZhbGlkIEdhbW1hOiAke3RoaXMuR30gZm9yICR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7dGhpcy5HPTF9fSNyKGUsdCxhLHIsbil7Y29uc3QgaT0oZVt0XSpuKSoqdGhpcy5HLHM9dGhpcy5ZVyppLG89TWF0aC5tYXgoMjk1LjgqcyoqLjMzMzMzMzMzMzMzMzMzMzMtNDAuOCwwKTthW3JdPW87YVtyKzFdPW87YVtyKzJdPW99Z2V0UmdiSXRlbShlLHQsYSxyKXt0aGlzLiNyKGUsdCxhLHIsMSl9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89MS8oKDE8PGkpLTEpO2ZvcihsZXQgaT0wO2k8YTsrK2kpe3RoaXMuI3IoZSx0LHIsbixvKTt0Kz0xO24rPTMrc319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCl9fWNsYXNzIENhbFJHQkNTIGV4dGVuZHMgQ29sb3JTcGFjZXtzdGF0aWMjbj1uZXcgRmxvYXQzMkFycmF5KFsuODk1MSwuMjY2NCwtLjE2MTQsLS43NTAyLDEuNzEzNSwuMDM2NywuMDM4OSwtLjA2ODUsMS4wMjk2XSk7c3RhdGljI2k9bmV3IEZsb2F0MzJBcnJheShbLjk4Njk5MjksLS4xNDcwNTQzLC4xNTk5NjI3LC40MzIzMDUzLC41MTgzNjAzLC4wNDkyOTEyLC0uMDA4NTI4NywuMDQwMDQyOCwuOTY4NDg2N10pO3N0YXRpYyNzPW5ldyBGbG9hdDMyQXJyYXkoWzMuMjQwNDU0MiwtMS41MzcxMzg1LC0uNDk4NTMxNCwtLjk2OTI2NiwxLjg3NjAxMDgsLjA0MTU1NiwuMDU1NjQzNCwtLjIwNDAyNTksMS4wNTcyMjUyXSk7c3RhdGljI289bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKTtzdGF0aWMjYz1uZXcgRmxvYXQzMkFycmF5KDMpO3N0YXRpYyNsPW5ldyBGbG9hdDMyQXJyYXkoMyk7c3RhdGljI2g9bmV3IEZsb2F0MzJBcnJheSgzKTtzdGF0aWMjdT0oMjQvMTE2KSoqMy84O2NvbnN0cnVjdG9yKGUsdCxhLG4pe3N1cGVyKCJDYWxSR0IiLDMpO2lmKCFlKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsUkdCIik7Y29uc3RbaSxzLG9dPXRoaXMud2hpdGVQb2ludD1lLFtjLGwsaF09dGhpcy5ibGFja1BvaW50PXR8fG5ldyBGbG9hdDMyQXJyYXkoMyk7W3RoaXMuR1IsdGhpcy5HRyx0aGlzLkdCXT1hfHxuZXcgRmxvYXQzMkFycmF5KFsxLDEsMV0pO1t0aGlzLk1YQSx0aGlzLk1ZQSx0aGlzLk1aQSx0aGlzLk1YQix0aGlzLk1ZQix0aGlzLk1aQix0aGlzLk1YQyx0aGlzLk1ZQyx0aGlzLk1aQ109bnx8bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwxLDAsMCwwLDFdKTtpZihpPDB8fG88MHx8MSE9PXMpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAke3RoaXMubmFtZX0sIG5vIGZhbGxiYWNrIGF2YWlsYWJsZWApO2lmKGM8MHx8bDwwfHxoPDApeygwLHIuaW5mbykoYEludmFsaWQgQmxhY2tQb2ludCBmb3IgJHt0aGlzLm5hbWV9IFske2N9LCAke2x9LCAke2h9XSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7dGhpcy5ibGFja1BvaW50PW5ldyBGbG9hdDMyQXJyYXkoMyl9aWYodGhpcy5HUjwwfHx0aGlzLkdHPDB8fHRoaXMuR0I8MCl7KDAsci5pbmZvKShgSW52YWxpZCBHYW1tYSBbJHt0aGlzLkdSfSwgJHt0aGlzLkdHfSwgJHt0aGlzLkdCfV0gZm9yICR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7dGhpcy5HUj10aGlzLkdHPXRoaXMuR0I9MX19I2QoZSx0LGEpe2FbMF09ZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl07YVsxXT1lWzNdKnRbMF0rZVs0XSp0WzFdK2VbNV0qdFsyXTthWzJdPWVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdfSNmKGUsdCxhKXthWzBdPTEqdFswXS9lWzBdO2FbMV09MSp0WzFdL2VbMV07YVsyXT0xKnRbMl0vZVsyXX0jZyhlLHQsYSl7YVswXT0uOTUwNDcqdFswXS9lWzBdO2FbMV09MSp0WzFdL2VbMV07YVsyXT0xLjA4ODgzKnRbMl0vZVsyXX0jcChlKXtyZXR1cm4gZTw9LjAwMzEzMDg/dGhpcy4jbSgwLDEsMTIuOTIqZSk6ZT49Ljk5NTU0NTI1PzE6dGhpcy4jbSgwLDEsMS4wNTUqZSoqKDEvMi40KS0uMDU1KX0jbShlLHQsYSl7cmV0dXJuIE1hdGgubWF4KGUsTWF0aC5taW4odCxhKSl9I2IoZSl7cmV0dXJuIGU8MD8tdGhpcy4jYigtZSk6ZT44PygoZSsxNikvMTE2KSoqMzplKkNhbFJHQkNTLiN1fSN5KGUsdCxhKXtpZigwPT09ZVswXSYmMD09PWVbMV0mJjA9PT1lWzJdKXthWzBdPXRbMF07YVsxXT10WzFdO2FbMl09dFsyXTtyZXR1cm59Y29uc3Qgcj10aGlzLiNiKDApLG49KDEtcikvKDEtdGhpcy4jYihlWzBdKSksaT0xLW4scz0oMS1yKS8oMS10aGlzLiNiKGVbMV0pKSxvPTEtcyxjPSgxLXIpLygxLXRoaXMuI2IoZVsyXSkpLGw9MS1jO2FbMF09dFswXSpuK2k7YVsxXT10WzFdKnMrbzthWzJdPXRbMl0qYytsfSN3KGUsdCxhKXtpZigxPT09ZVswXSYmMT09PWVbMl0pe2FbMF09dFswXTthWzFdPXRbMV07YVsyXT10WzJdO3JldHVybn1jb25zdCByPWE7dGhpcy4jZChDYWxSR0JDUy4jbix0LHIpO2NvbnN0IG49Q2FsUkdCQ1MuI2M7dGhpcy4jZihlLHIsbik7dGhpcy4jZChDYWxSR0JDUy4jaSxuLGEpfSNTKGUsdCxhKXtjb25zdCByPWE7dGhpcy4jZChDYWxSR0JDUy4jbix0LHIpO2NvbnN0IG49Q2FsUkdCQ1MuI2M7dGhpcy4jZyhlLHIsbik7dGhpcy4jZChDYWxSR0JDUy4jaSxuLGEpfSNyKGUsdCxhLHIsbil7Y29uc3QgaT10aGlzLiNtKDAsMSxlW3RdKm4pLHM9dGhpcy4jbSgwLDEsZVt0KzFdKm4pLG89dGhpcy4jbSgwLDEsZVt0KzJdKm4pLGM9MT09PWk/MTppKip0aGlzLkdSLGw9MT09PXM/MTpzKip0aGlzLkdHLGg9MT09PW8/MTpvKip0aGlzLkdCLHU9dGhpcy5NWEEqYyt0aGlzLk1YQipsK3RoaXMuTVhDKmgsZD10aGlzLk1ZQSpjK3RoaXMuTVlCKmwrdGhpcy5NWUMqaCxmPXRoaXMuTVpBKmMrdGhpcy5NWkIqbCt0aGlzLk1aQypoLGc9Q2FsUkdCQ1MuI2w7Z1swXT11O2dbMV09ZDtnWzJdPWY7Y29uc3QgcD1DYWxSR0JDUy4jaDt0aGlzLiN3KHRoaXMud2hpdGVQb2ludCxnLHApO2NvbnN0IG09Q2FsUkdCQ1MuI2w7dGhpcy4jeSh0aGlzLmJsYWNrUG9pbnQscCxtKTtjb25zdCBiPUNhbFJHQkNTLiNoO3RoaXMuI1MoQ2FsUkdCQ1MuI28sbSxiKTtjb25zdCB5PUNhbFJHQkNTLiNsO3RoaXMuI2QoQ2FsUkdCQ1MuI3MsYix5KTthW3JdPTI1NSp0aGlzLiNwKHlbMF0pO2FbcisxXT0yNTUqdGhpcy4jcCh5WzFdKTthW3IrMl09MjU1KnRoaXMuI3AoeVsyXSl9Z2V0UmdiSXRlbShlLHQsYSxyKXt0aGlzLiNyKGUsdCxhLHIsMSl9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89MS8oKDE8PGkpLTEpO2ZvcihsZXQgaT0wO2k8YTsrK2kpe3RoaXMuI3IoZSx0LHIsbixvKTt0Kz0zO24rPTMrc319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX1jbGFzcyBMYWJDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKCJMYWIiLDMpO2lmKCFlKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgTGFiIik7W3RoaXMuWFcsdGhpcy5ZVyx0aGlzLlpXXT1lO1t0aGlzLmFtaW4sdGhpcy5hbWF4LHRoaXMuYm1pbix0aGlzLmJtYXhdPWF8fFstMTAwLDEwMCwtMTAwLDEwMF07W3RoaXMuWEIsdGhpcy5ZQix0aGlzLlpCXT10fHxbMCwwLDBdO2lmKHRoaXMuWFc8MHx8dGhpcy5aVzwwfHwxIT09dGhpcy5ZVyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZSIpO2lmKHRoaXMuWEI8MHx8dGhpcy5ZQjwwfHx0aGlzLlpCPDApeygwLHIuaW5mbykoIkludmFsaWQgQmxhY2tQb2ludCwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQiKTt0aGlzLlhCPXRoaXMuWUI9dGhpcy5aQj0wfWlmKHRoaXMuYW1pbj50aGlzLmFtYXh8fHRoaXMuYm1pbj50aGlzLmJtYXgpeygwLHIuaW5mbykoIkludmFsaWQgUmFuZ2UsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0cyIpO3RoaXMuYW1pbj0tMTAwO3RoaXMuYW1heD0xMDA7dGhpcy5ibWluPS0xMDA7dGhpcy5ibWF4PTEwMH19I3goZSl7cmV0dXJuIGU+PTYvMjk/ZSoqMzoxMDgvODQxKihlLTQvMjkpfSNBKGUsdCxhLHIpe3JldHVybiBhK2UqKHItYSkvdH0jcihlLHQsYSxyLG4pe2xldCBpPWVbdF0scz1lW3QrMV0sbz1lW3QrMl07aWYoITEhPT1hKXtpPXRoaXMuI0EoaSxhLDAsMTAwKTtzPXRoaXMuI0EocyxhLHRoaXMuYW1pbix0aGlzLmFtYXgpO289dGhpcy4jQShvLGEsdGhpcy5ibWluLHRoaXMuYm1heCl9cz50aGlzLmFtYXg/cz10aGlzLmFtYXg6czx0aGlzLmFtaW4mJihzPXRoaXMuYW1pbik7bz50aGlzLmJtYXg/bz10aGlzLmJtYXg6bzx0aGlzLmJtaW4mJihvPXRoaXMuYm1pbik7Y29uc3QgYz0oaSsxNikvMTE2LGw9YytzLzUwMCxoPWMtby8yMDAsdT10aGlzLlhXKnRoaXMuI3gobCksZD10aGlzLllXKnRoaXMuI3goYyksZj10aGlzLlpXKnRoaXMuI3goaCk7bGV0IGcscCxtO2lmKHRoaXMuWlc8MSl7Zz0zLjEzMzkqdSstMS42MTcqZCstLjQ5MDYqZjtwPS0uOTc4NSp1KzEuOTE2KmQrLjAzMzMqZjttPS4wNzIqdSstLjIyOSpkKzEuNDA1NypmfWVsc2V7Zz0zLjI0MDYqdSstMS41MzcyKmQrLS40OTg2KmY7cD0tLjk2ODkqdSsxLjg3NTgqZCsuMDQxNSpmO209LjA1NTcqdSstLjIwNCpkKzEuMDU3KmZ9cltuXT0yNTUqTWF0aC5zcXJ0KGcpO3JbbisxXT0yNTUqTWF0aC5zcXJ0KHApO3JbbisyXT0yNTUqTWF0aC5zcXJ0KG0pfWdldFJnYkl0ZW0oZSx0LGEscil7dGhpcy4jcihlLHQsITEsYSxyKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixuLGkscyl7Y29uc3Qgbz0oMTw8aSktMTtmb3IobGV0IGk9MDtpPGE7aSsrKXt0aGlzLiNyKGUsdCxvLHIsbik7dCs9MztuKz0zK3N9fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiBlKigzK3QpLzN8MH1pc0RlZmF1bHREZWNvZGUoZSx0KXtyZXR1cm4hMH1nZXQgdXNlc1plcm9Ub09uZVJhbmdlKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInVzZXNaZXJvVG9PbmVSYW5nZSIsITEpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5QYXJ0aWFsRXZhbHVhdG9yPXQuRXZhbHVhdG9yUHJlcHJvY2Vzc29yPXZvaWQgMDt2YXIgcj1hKDIpLG49YSgxNCksaT1hKDQpLHM9YSgzNCksbz1hKDM3KSxjPWEoNDEpLGw9YSg1MCksaD1hKDUxKSx1PWEoNDIpLGQ9YSg1NyksZj1hKDE2KSxnPWEoNTkpLHA9YSg4KSxtPWEoNSksYj1hKDYwKSx5PWEoMTIpLHc9YSgxOCksUz1hKDM4KSx4PWEoNjEpLEM9YSgzOSksaz1hKDQ1KSx2PWEoNDApLEY9YSg2MiksTz1hKDYzKSxUPWEoNjQpLE09YSg2NSk7Y29uc3QgRD1PYmplY3QuZnJlZXplKHttYXhJbWFnZVNpemU6LTEsZGlzYWJsZUZvbnRGYWNlOiExLGlnbm9yZUVycm9yczohMSxpc0V2YWxTdXBwb3J0ZWQ6ITAsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6ITEsY2FudmFzTWF4QXJlYUluQnl0ZXM6LTEsZm9udEV4dHJhUHJvcGVydGllczohMSx1c2VTeXN0ZW1Gb250czohMCxjTWFwVXJsOm51bGwsc3RhbmRhcmRGb250RGF0YVVybDpudWxsfSksRT0xLE49MixSPVByb21pc2UucmVzb2x2ZSgpO2Z1bmN0aW9uIG5vcm1hbGl6ZUJsZW5kTW9kZShlLHQ9ITEpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9bm9ybWFsaXplQmxlbmRNb2RlKHQsITApO2lmKGUpcmV0dXJuIGV9KDAsci53YXJuKShgVW5zdXBwb3J0ZWQgYmxlbmQgbW9kZSBBcnJheTogJHtlfWApO3JldHVybiJzb3VyY2Utb3ZlciJ9aWYoIShlIGluc3RhbmNlb2YgaS5OYW1lKSlyZXR1cm4gdD9udWxsOiJzb3VyY2Utb3ZlciI7c3dpdGNoKGUubmFtZSl7Y2FzZSJOb3JtYWwiOmNhc2UiQ29tcGF0aWJsZSI6cmV0dXJuInNvdXJjZS1vdmVyIjtjYXNlIk11bHRpcGx5IjpyZXR1cm4ibXVsdGlwbHkiO2Nhc2UiU2NyZWVuIjpyZXR1cm4ic2NyZWVuIjtjYXNlIk92ZXJsYXkiOnJldHVybiJvdmVybGF5IjtjYXNlIkRhcmtlbiI6cmV0dXJuImRhcmtlbiI7Y2FzZSJMaWdodGVuIjpyZXR1cm4ibGlnaHRlbiI7Y2FzZSJDb2xvckRvZGdlIjpyZXR1cm4iY29sb3ItZG9kZ2UiO2Nhc2UiQ29sb3JCdXJuIjpyZXR1cm4iY29sb3ItYnVybiI7Y2FzZSJIYXJkTGlnaHQiOnJldHVybiJoYXJkLWxpZ2h0IjtjYXNlIlNvZnRMaWdodCI6cmV0dXJuInNvZnQtbGlnaHQiO2Nhc2UiRGlmZmVyZW5jZSI6cmV0dXJuImRpZmZlcmVuY2UiO2Nhc2UiRXhjbHVzaW9uIjpyZXR1cm4iZXhjbHVzaW9uIjtjYXNlIkh1ZSI6cmV0dXJuImh1ZSI7Y2FzZSJTYXR1cmF0aW9uIjpyZXR1cm4ic2F0dXJhdGlvbiI7Y2FzZSJDb2xvciI6cmV0dXJuImNvbG9yIjtjYXNlIkx1bWlub3NpdHkiOnJldHVybiJsdW1pbm9zaXR5In1pZih0KXJldHVybiBudWxsOygwLHIud2FybikoYFVuc3VwcG9ydGVkIGJsZW5kIG1vZGU6ICR7ZS5uYW1lfWApO3JldHVybiJzb3VyY2Utb3ZlciJ9ZnVuY3Rpb24gaW5jcmVtZW50Q2FjaGVkSW1hZ2VNYXNrQ291bnQoZSl7ZS5mbj09PXIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCYmZS5hcmdzWzBdPy5jb3VudD4wJiZlLmFyZ3NbMF0uY291bnQrK31jbGFzcyBUaW1lU2xvdE1hbmFnZXJ7c3RhdGljIFRJTUVfU0xPVF9EVVJBVElPTl9NUz0yMDtzdGF0aWMgQ0hFQ0tfVElNRV9FVkVSWT0xMDA7Y29uc3RydWN0b3IoKXt0aGlzLnJlc2V0KCl9Y2hlY2soKXtpZigrK3RoaXMuY2hlY2tlZDxUaW1lU2xvdE1hbmFnZXIuQ0hFQ0tfVElNRV9FVkVSWSlyZXR1cm4hMTt0aGlzLmNoZWNrZWQ9MDtyZXR1cm4gdGhpcy5lbmRUaW1lPD1EYXRlLm5vdygpfXJlc2V0KCl7dGhpcy5lbmRUaW1lPURhdGUubm93KCkrVGltZVNsb3RNYW5hZ2VyLlRJTUVfU0xPVF9EVVJBVElPTl9NUzt0aGlzLmNoZWNrZWQ9MH19Y2xhc3MgUGFydGlhbEV2YWx1YXRvcntjb25zdHJ1Y3Rvcih7eHJlZjplLGhhbmRsZXI6dCxwYWdlSW5kZXg6YSxpZEZhY3Rvcnk6cixmb250Q2FjaGU6bixidWlsdEluQ01hcENhY2hlOmksc3RhbmRhcmRGb250RGF0YUNhY2hlOnMsZ2xvYmFsSW1hZ2VDYWNoZTpvLHN5c3RlbUZvbnRDYWNoZTpjLG9wdGlvbnM6bD1udWxsfSl7dGhpcy54cmVmPWU7dGhpcy5oYW5kbGVyPXQ7dGhpcy5wYWdlSW5kZXg9YTt0aGlzLmlkRmFjdG9yeT1yO3RoaXMuZm9udENhY2hlPW47dGhpcy5idWlsdEluQ01hcENhY2hlPWk7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9czt0aGlzLmdsb2JhbEltYWdlQ2FjaGU9bzt0aGlzLnN5c3RlbUZvbnRDYWNoZT1jO3RoaXMub3B0aW9ucz1sfHxEO3RoaXMucGFyc2luZ1R5cGUzRm9udD0hMTt0aGlzLl9yZWdpb25hbEltYWdlQ2FjaGU9bmV3IGcuUmVnaW9uYWxJbWFnZUNhY2hlO3RoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZD10aGlzLmZldGNoQnVpbHRJbkNNYXAuYmluZCh0aGlzKTtGLkltYWdlUmVzaXplci5zZXRNYXhBcmVhKHRoaXMub3B0aW9ucy5jYW52YXNNYXhBcmVhSW5CeXRlcyl9Z2V0IF9wZGZGdW5jdGlvbkZhY3RvcnkoKXtjb25zdCBlPW5ldyBkLlBERkZ1bmN0aW9uRmFjdG9yeSh7eHJlZjp0aGlzLnhyZWYsaXNFdmFsU3VwcG9ydGVkOnRoaXMub3B0aW9ucy5pc0V2YWxTdXBwb3J0ZWR9KTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiX3BkZkZ1bmN0aW9uRmFjdG9yeSIsZSl9Y2xvbmUoZT1udWxsKXtjb25zdCB0PU9iamVjdC5jcmVhdGUodGhpcyk7dC5vcHRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnMsZSk7cmV0dXJuIHR9aGFzQmxlbmRNb2RlcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuITE7aWYoZS5vYmpJZCYmdC5oYXMoZS5vYmpJZCkpcmV0dXJuITE7Y29uc3QgYT1uZXcgaS5SZWZTZXQodCk7ZS5vYmpJZCYmYS5wdXQoZS5vYmpJZCk7Y29uc3Qgbj1bZV0scz10aGlzLnhyZWY7Zm9yKDtuLmxlbmd0aDspe2NvbnN0IGU9bi5zaGlmdCgpLHQ9ZS5nZXQoIkV4dEdTdGF0ZSIpO2lmKHQgaW5zdGFuY2VvZiBpLkRpY3QpZm9yKGxldCBlIG9mIHQuZ2V0UmF3VmFsdWVzKCkpe2lmKGUgaW5zdGFuY2VvZiBpLlJlZil7aWYoYS5oYXMoZSkpY29udGludWU7dHJ5e2U9cy5mZXRjaChlKX1jYXRjaCh0KXthLnB1dChlKTsoMCxyLmluZm8pKGBoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJHt0fSIuYCk7Y29udGludWV9fWlmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpY29udGludWU7ZS5vYmpJZCYmYS5wdXQoZS5vYmpJZCk7Y29uc3QgdD1lLmdldCgiQk0iKTtpZih0IGluc3RhbmNlb2YgaS5OYW1lKXtpZigiTm9ybWFsIiE9PXQubmFtZSlyZXR1cm4hMH1lbHNlIGlmKHZvaWQgMCE9PXQmJkFycmF5LmlzQXJyYXkodCkpZm9yKGNvbnN0IGUgb2YgdClpZihlIGluc3RhbmNlb2YgaS5OYW1lJiYiTm9ybWFsIiE9PWUubmFtZSlyZXR1cm4hMH1jb25zdCBvPWUuZ2V0KCJYT2JqZWN0Iik7aWYobyBpbnN0YW5jZW9mIGkuRGljdClmb3IobGV0IGUgb2Ygby5nZXRSYXdWYWx1ZXMoKSl7aWYoZSBpbnN0YW5jZW9mIGkuUmVmKXtpZihhLmhhcyhlKSljb250aW51ZTt0cnl7ZT1zLmZldGNoKGUpfWNhdGNoKHQpe2EucHV0KGUpOygwLHIuaW5mbykoYGhhc0JsZW5kTW9kZXMgLSBpZ25vcmluZyBYT2JqZWN0OiAiJHt0fSIuYCk7Y29udGludWV9fWlmKCEoZSBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSkpY29udGludWU7ZS5kaWN0Lm9iaklkJiZhLnB1dChlLmRpY3Qub2JqSWQpO2NvbnN0IHQ9ZS5kaWN0LmdldCgiUmVzb3VyY2VzIik7aWYodCBpbnN0YW5jZW9mIGkuRGljdCYmKCF0Lm9iaklkfHwhYS5oYXModC5vYmpJZCkpKXtuLnB1c2godCk7dC5vYmpJZCYmYS5wdXQodC5vYmpJZCl9fX1mb3IoY29uc3QgZSBvZiBhKXQucHV0KGUpO3JldHVybiExfWFzeW5jIGZldGNoQnVpbHRJbkNNYXAoZSl7Y29uc3QgdD10aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7bGV0IGE7aWYobnVsbCE9PXRoaXMub3B0aW9ucy5jTWFwVXJsKXtjb25zdCB0PWAke3RoaXMub3B0aW9ucy5jTWFwVXJsfSR7ZX0uYmNtYXBgLG49YXdhaXQgZmV0Y2godCk7aWYoIW4ub2spdGhyb3cgbmV3IEVycm9yKGBmZXRjaEJ1aWx0SW5DTWFwOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJHt0fSIgd2l0aCAiJHtuLnN0YXR1c1RleHR9Ii5gKTthPXtjTWFwRGF0YTpuZXcgVWludDhBcnJheShhd2FpdCBuLmFycmF5QnVmZmVyKCkpLGNvbXByZXNzaW9uVHlwZTpyLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZfX1lbHNlIGE9YXdhaXQgdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hCdWlsdEluQ01hcCIse25hbWU6ZX0pO2EuY29tcHJlc3Npb25UeXBlIT09ci5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUmJnRoaXMuYnVpbHRJbkNNYXBDYWNoZS5zZXQoZSxhKTtyZXR1cm4gYX1hc3luYyBmZXRjaFN0YW5kYXJkRm9udERhdGEoZSl7Y29uc3QgdD10aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5nZXQoZSk7aWYodClyZXR1cm4gbmV3IHAuU3RyZWFtKHQpO2lmKHRoaXMub3B0aW9ucy51c2VTeXN0ZW1Gb250cyYmIlN5bWJvbCIhPT1lJiYiWmFwZkRpbmdiYXRzIiE9PWUpcmV0dXJuIG51bGw7Y29uc3QgYT0oMCxjLmdldEZvbnROYW1lVG9GaWxlTWFwKSgpW2VdO2xldCBuO2lmKG51bGwhPT10aGlzLm9wdGlvbnMuc3RhbmRhcmRGb250RGF0YVVybCl7Y29uc3QgZT1gJHt0aGlzLm9wdGlvbnMuc3RhbmRhcmRGb250RGF0YVVybH0ke2F9YCx0PWF3YWl0IGZldGNoKGUpO3Qub2s/bj1hd2FpdCB0LmFycmF5QnVmZmVyKCk6KDAsci53YXJuKShgZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJHtlfSIgd2l0aCAiJHt0LnN0YXR1c1RleHR9Ii5gKX1lbHNlIHRyeXtuPWF3YWl0IHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkZldGNoU3RhbmRhcmRGb250RGF0YSIse2ZpbGVuYW1lOmF9KX1jYXRjaChlKXsoMCxyLndhcm4pKGBmZXRjaFN0YW5kYXJkRm9udERhdGE6IGZhaWxlZCB0byBmZXRjaCBmaWxlICIke2F9IiB3aXRoICIke2V9Ii5gKX1pZighbilyZXR1cm4gbnVsbDt0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5zZXQoZSxuKTtyZXR1cm4gbmV3IHAuU3RyZWFtKG4pfWFzeW5jIGJ1aWxkRm9ybVhPYmplY3QoZSx0LGEsbixzLG8sYyl7Y29uc3QgbD10LmRpY3QsaD1sLmdldEFycmF5KCJNYXRyaXgiKTtsZXQgdSxkLGY9bC5nZXRBcnJheSgiQkJveCIpO2Y9QXJyYXkuaXNBcnJheShmKSYmND09PWYubGVuZ3RoP3IuVXRpbC5ub3JtYWxpemVSZWN0KGYpOm51bGw7bC5oYXMoIk9DIikmJih1PWF3YWl0IHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMobC5nZXQoIk9DIiksZSkpO3ZvaWQgMCE9PXUmJm4uYWRkT3Aoci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsWyJPQyIsdV0pO2NvbnN0IGc9bC5nZXQoIkdyb3VwIik7aWYoZyl7ZD17bWF0cml4OmgsYmJveDpmLHNtYXNrOmEsaXNvbGF0ZWQ6ITEsa25vY2tvdXQ6ITF9O2NvbnN0IHQ9Zy5nZXQoIlMiKTtsZXQgcz1udWxsO2lmKCgwLGkuaXNOYW1lKSh0LCJUcmFuc3BhcmVuY3kiKSl7ZC5pc29sYXRlZD1nLmdldCgiSSIpfHwhMTtkLmtub2Nrb3V0PWcuZ2V0KCJLIil8fCExO2lmKGcuaGFzKCJDUyIpKXtjb25zdCB0PWcuZ2V0UmF3KCJDUyIpLGE9eS5Db2xvclNwYWNlLmdldENhY2hlZCh0LHRoaXMueHJlZixjKTtzPWF8fGF3YWl0IHRoaXMucGFyc2VDb2xvclNwYWNlKHtjczp0LHJlc291cmNlczplLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmN9KX19aWYoYT8uYmFja2Ryb3Ape3N8fD15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7YS5iYWNrZHJvcD1zLmdldFJnYihhLmJhY2tkcm9wLDApfW4uYWRkT3Aoci5PUFMuYmVnaW5Hcm91cCxbZF0pfWNvbnN0IHA9Zz9baCxudWxsXTpbaCxmXTtuLmFkZE9wKHIuT1BTLnBhaW50Rm9ybVhPYmplY3RCZWdpbixwKTtyZXR1cm4gdGhpcy5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTp0LHRhc2s6cyxyZXNvdXJjZXM6bC5nZXQoIlJlc291cmNlcyIpfHxlLG9wZXJhdG9yTGlzdDpuLGluaXRpYWxTdGF0ZTpvfSkudGhlbigoZnVuY3Rpb24oKXtuLmFkZE9wKHIuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQsW10pO2cmJm4uYWRkT3Aoci5PUFMuZW5kR3JvdXAsW2RdKTt2b2lkIDAhPT11JiZuLmFkZE9wKHIuT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pfSkpfV9zZW5kSW1nRGF0YShlLHQsYT0hMSl7Y29uc3Qgcj10P1t0LmJpdG1hcHx8dC5kYXRhLmJ1ZmZlcl06bnVsbDtyZXR1cm4gdGhpcy5wYXJzaW5nVHlwZTNGb250fHxhP3RoaXMuaGFuZGxlci5zZW5kKCJjb21tb25vYmoiLFtlLCJJbWFnZSIsdF0scik6dGhpcy5oYW5kbGVyLnNlbmQoIm9iaiIsW2UsdGhpcy5wYWdlSW5kZXgsIkltYWdlIix0XSxyKX1hc3luYyBidWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6ZSxpbWFnZTp0LGlzSW5saW5lOmE9ITEsb3BlcmF0b3JMaXN0Om4sY2FjaGVLZXk6aSxsb2NhbEltYWdlQ2FjaGU6cyxsb2NhbENvbG9yU3BhY2VDYWNoZTpvfSl7Y29uc3QgYz10LmRpY3QsbD1jLm9iaklkLGg9Yy5nZXQoIlciLCJXaWR0aCIpLHU9Yy5nZXQoIkgiLCJIZWlnaHQiKTtpZighaHx8Im51bWJlciIhPXR5cGVvZiBofHwhdXx8Im51bWJlciIhPXR5cGVvZiB1KXsoMCxyLndhcm4pKCJJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy4iKTtyZXR1cm59Y29uc3QgZD10aGlzLm9wdGlvbnMubWF4SW1hZ2VTaXplO2lmKC0xIT09ZCYmaCp1PmQpe2NvbnN0IGU9IkltYWdlIGV4Y2VlZGVkIG1heGltdW0gYWxsb3dlZCBzaXplIGFuZCB3YXMgcmVtb3ZlZC4iO2lmKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpeygwLHIud2FybikoZSk7cmV0dXJufXRocm93IG5ldyBFcnJvcihlKX1sZXQgZjtjLmhhcygiT0MiKSYmKGY9YXdhaXQgdGhpcy5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhjLmdldCgiT0MiKSxlKSk7bGV0IGcscDtpZihjLmdldCgiSU0iLCJJbWFnZU1hc2siKXx8ITEpe2NvbnN0IGU9Yy5nZXQoIkkiLCJJbnRlcnBvbGF0ZSIpLGE9aCs3Pj4zLG89dC5nZXRCeXRlcyhhKnUpLGQ9Yy5nZXRBcnJheSgiRCIsIkRlY29kZSIpO2lmKHRoaXMucGFyc2luZ1R5cGUzRm9udCl7Zz1NLlBERkltYWdlLmNyZWF0ZVJhd01hc2soe2ltZ0FycmF5Om8sd2lkdGg6aCxoZWlnaHQ6dSxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTp0IGluc3RhbmNlb2Ygdy5EZWNvZGVTdHJlYW0saW52ZXJzZURlY29kZTpkPy5bMF0+MCxpbnRlcnBvbGF0ZTplfSk7Zy5jYWNoZWQ9ISFpO3A9W2ddO24uYWRkSW1hZ2VPcHMoci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LHAsZik7aWYoaSl7Y29uc3QgZT17Zm46ci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGFyZ3M6cCxvcHRpb25hbENvbnRlbnQ6Zn07cy5zZXQoaSxsLGUpO2wmJnRoaXMuX3JlZ2lvbmFsSW1hZ2VDYWNoZS5zZXQobnVsbCxsLGUpfXJldHVybn1nPWF3YWl0IE0uUERGSW1hZ2UuY3JlYXRlTWFzayh7aW1nQXJyYXk6byx3aWR0aDpoLGhlaWdodDp1LGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOnQgaW5zdGFuY2VvZiB3LkRlY29kZVN0cmVhbSxpbnZlcnNlRGVjb2RlOmQ/LlswXT4wLGludGVycG9sYXRlOmUsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6dGhpcy5vcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfSk7aWYoZy5pc1NpbmdsZU9wYXF1ZVBpeGVsKXtuLmFkZEltYWdlT3BzKHIuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzayxbXSxmKTtpZihpKXtjb25zdCBlPXtmbjpyLk9QUy5wYWludFNvbGlkQ29sb3JJbWFnZU1hc2ssYXJnczpbXSxvcHRpb25hbENvbnRlbnQ6Zn07cy5zZXQoaSxsLGUpO2wmJnRoaXMuX3JlZ2lvbmFsSW1hZ2VDYWNoZS5zZXQobnVsbCxsLGUpfXJldHVybn1jb25zdCBtPWBtYXNrXyR7dGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKX1gO24uYWRkRGVwZW5kZW5jeShtKTt0aGlzLl9zZW5kSW1nRGF0YShtLGcpO3A9W3tkYXRhOm0sd2lkdGg6Zy53aWR0aCxoZWlnaHQ6Zy5oZWlnaHQsaW50ZXJwb2xhdGU6Zy5pbnRlcnBvbGF0ZSxjb3VudDoxfV07bi5hZGRJbWFnZU9wcyhyLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QscCxmKTtpZihpKXtjb25zdCBlPXtmbjpyLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QsYXJnczpwLG9wdGlvbmFsQ29udGVudDpmfTtzLnNldChpLGwsZSk7bCYmdGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlLnNldChudWxsLGwsZSl9cmV0dXJufWlmKGEmJiFjLmhhcygiU01hc2siKSYmIWMuaGFzKCJNYXNrIikmJmgrdTwyMDApe2NvbnN0IGk9bmV3IE0uUERGSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczplLGltYWdlOnQsaXNJbmxpbmU6YSxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOm99KTtnPWF3YWl0IGkuY3JlYXRlSW1hZ2VEYXRhKCEwLCExKTtuLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPXRoaXMub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDtuLmFkZEltYWdlT3BzKHIuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0LFtnXSxmKTtyZXR1cm59bGV0IG09YGltZ18ke3RoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCl9YCxiPSExO2lmKHRoaXMucGFyc2luZ1R5cGUzRm9udCltPWAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9X3R5cGUzXyR7bX1gO2Vsc2UgaWYobCl7Yj10aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2hvdWxkQ2FjaGUobCx0aGlzLnBhZ2VJbmRleCk7YiYmKG09YCR7dGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKX1fJHttfWApfW4uYWRkRGVwZW5kZW5jeShtKTtwPVttLGgsdV07TS5QREZJbWFnZS5idWlsZEltYWdlKHt4cmVmOnRoaXMueHJlZixyZXM6ZSxpbWFnZTp0LGlzSW5saW5lOmEscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxsb2NhbENvbG9yU3BhY2VDYWNoZTpvfSkudGhlbigoYXN5bmMgZT0+e2c9YXdhaXQgZS5jcmVhdGVJbWFnZURhdGEoITEsdGhpcy5vcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKTtpZihpJiZsJiZiKXtjb25zdCBlPWcuYml0bWFwP2cud2lkdGgqZy5oZWlnaHQqNDpnLmRhdGEubGVuZ3RoO3RoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5hZGRCeXRlU2l6ZShsLGUpfXJldHVybiB0aGlzLl9zZW5kSW1nRGF0YShtLGcsYil9KSkuY2F0Y2goKGU9PnsoMCxyLndhcm4pKGBVbmFibGUgdG8gZGVjb2RlIGltYWdlICIke219IjogIiR7ZX0iLmApO3JldHVybiB0aGlzLl9zZW5kSW1nRGF0YShtLG51bGwsYil9KSk7bi5hZGRJbWFnZU9wcyhyLk9QUy5wYWludEltYWdlWE9iamVjdCxwLGYpO2lmKGkpe2NvbnN0IGU9e2ZuOnIuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LGFyZ3M6cCxvcHRpb25hbENvbnRlbnQ6Zn07cy5zZXQoaSxsLGUpO2lmKGwpe3RoaXMuX3JlZ2lvbmFsSW1hZ2VDYWNoZS5zZXQobnVsbCxsLGUpO2lmKGIpeygwLHIuYXNzZXJ0KSghYSwiQ2Fubm90IGNhY2hlIGFuIGlubGluZSBpbWFnZSBnbG9iYWxseS4iKTt0aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YShsLHtvYmpJZDptLGZuOnIuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LGFyZ3M6cCxvcHRpb25hbENvbnRlbnQ6ZixieXRlU2l6ZTowfSl9fX19aGFuZGxlU01hc2soZSx0LGEscixuLGkpe2NvbnN0IHM9ZS5nZXQoIkciKSxvPXtzdWJ0eXBlOmUuZ2V0KCJTIikubmFtZSxiYWNrZHJvcDplLmdldCgiQkMiKX0sYz1lLmdldCgiVFIiKTtpZigoMCxkLmlzUERGRnVuY3Rpb24pKGMpKXtjb25zdCBlPXRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGUoYyksdD1uZXcgVWludDhBcnJheSgyNTYpLGE9bmV3IEZsb2F0MzJBcnJheSgxKTtmb3IobGV0IHI9MDtyPDI1NjtyKyspe2FbMF09ci8yNTU7ZShhLDAsYSwwKTt0W3JdPTI1NSphWzBdfDB9by50cmFuc2Zlck1hcD10fXJldHVybiB0aGlzLmJ1aWxkRm9ybVhPYmplY3QodCxzLG8sYSxyLG4uc3RhdGUuY2xvbmUoKSxpKX1oYW5kbGVUcmFuc2ZlckZ1bmN0aW9uKGUpe2xldCB0O2lmKEFycmF5LmlzQXJyYXkoZSkpdD1lO2Vsc2V7aWYoISgwLGQuaXNQREZGdW5jdGlvbikoZSkpcmV0dXJuIG51bGw7dD1bZV19Y29uc3QgYT1bXTtsZXQgcj0wLG49MDtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PXRoaXMueHJlZi5mZXRjaElmUmVmKGUpO3IrKztpZigoMCxpLmlzTmFtZSkodCwiSWRlbnRpdHkiKSl7YS5wdXNoKG51bGwpO2NvbnRpbnVlfWlmKCEoMCxkLmlzUERGRnVuY3Rpb24pKHQpKXJldHVybiBudWxsO2NvbnN0IHM9dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZSh0KSxvPW5ldyBVaW50OEFycmF5KDI1NiksYz1uZXcgRmxvYXQzMkFycmF5KDEpO2ZvcihsZXQgZT0wO2U8MjU2O2UrKyl7Y1swXT1lLzI1NTtzKGMsMCxjLDApO29bZV09MjU1KmNbMF18MH1hLnB1c2gobyk7bisrfXJldHVybiAxIT09ciYmNCE9PXJ8fDA9PT1uP251bGw6YX1oYW5kbGVUaWxpbmdUeXBlKGUsdCxhLG4scyxvLGMsaCl7Y29uc3QgdT1uZXcgVC5PcGVyYXRvckxpc3QsZD1pLkRpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTpbcy5nZXQoIlJlc291cmNlcyIpLGFdfSk7cmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06bix0YXNrOmMscmVzb3VyY2VzOmQsb3BlcmF0b3JMaXN0OnV9KS50aGVuKChmdW5jdGlvbigpe2NvbnN0IGE9dS5nZXRJUigpLHI9KDAsbC5nZXRUaWxpbmdQYXR0ZXJuSVIpKGEscyx0KTtvLmFkZERlcGVuZGVuY2llcyh1LmRlcGVuZGVuY2llcyk7by5hZGRPcChlLHIpO3Mub2JqSWQmJmguc2V0KG51bGwscy5vYmpJZCx7b3BlcmF0b3JMaXN0SVI6YSxkaWN0OnN9KX0pKS5jYXRjaCgoZT0+e2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGhhbmRsZVRpbGluZ1R5cGUgLSBpZ25vcmluZyBwYXR0ZXJuOiAiJHtlfSIuYCl9fSkpfWhhbmRsZVNldEZvbnQoZSx0LGEscixuLG8sYz1udWxsLGw9bnVsbCl7Y29uc3QgaD10Py5bMF1pbnN0YW5jZW9mIGkuTmFtZT90WzBdLm5hbWU6bnVsbDtyZXR1cm4gdGhpcy5sb2FkRm9udChoLGEsZSxjLGwpLnRoZW4oKHQ9PnQuZm9udC5pc1R5cGUzRm9udD90LmxvYWRUeXBlM0RhdGEodGhpcyxlLG4pLnRoZW4oKGZ1bmN0aW9uKCl7ci5hZGREZXBlbmRlbmNpZXModC50eXBlM0RlcGVuZGVuY2llcyk7cmV0dXJuIHR9KSkuY2F0Y2goKGU9Pm5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBzLkVycm9yRm9udChgVHlwZTMgZm9udCBsb2FkIGVycm9yOiAke2V9YCksZGljdDp0LmZvbnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KSkpOnQpKS50aGVuKChlPT57by5mb250PWUuZm9udDtlLnNlbmQodGhpcy5oYW5kbGVyKTtyZXR1cm4gZS5sb2FkZWROYW1lfSkpfWhhbmRsZVRleHQoZSx0KXtjb25zdCBhPXQuZm9udCxuPWEuY2hhcnNUb0dseXBocyhlKTtpZihhLmRhdGEpeyghISh0LnRleHRSZW5kZXJpbmdNb2RlJnIuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBRyl8fCJQYXR0ZXJuIj09PXQuZmlsbENvbG9yU3BhY2UubmFtZXx8YS5kaXNhYmxlRm9udEZhY2V8fHRoaXMub3B0aW9ucy5kaXNhYmxlRm9udEZhY2UpJiZQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKGEsbix0aGlzLmhhbmRsZXIsdGhpcy5vcHRpb25zKX1yZXR1cm4gbn1lbnN1cmVTdGF0ZUZvbnQoZSl7aWYoZS5mb250KXJldHVybjtjb25zdCB0PW5ldyByLkZvcm1hdEVycm9yKCJNaXNzaW5nIHNldEZvbnQgKFRmKSBvcGVyYXRvciBiZWZvcmUgdGV4dCByZW5kZXJpbmcgb3BlcmF0b3IuIik7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgdDsoMCxyLndhcm4pKGBlbnN1cmVTdGF0ZUZvbnQ6ICIke3R9Ii5gKX1hc3luYyBzZXRHU3RhdGUoe3Jlc291cmNlczplLGdTdGF0ZTp0LG9wZXJhdG9yTGlzdDphLGNhY2hlS2V5Om4sdGFzazpzLHN0YXRlTWFuYWdlcjpvLGxvY2FsR1N0YXRlQ2FjaGU6Yyxsb2NhbENvbG9yU3BhY2VDYWNoZTpsfSl7Y29uc3QgaD10Lm9iaklkO2xldCB1PSEwO2NvbnN0IGQ9W107bGV0IGY9UHJvbWlzZS5yZXNvbHZlKCk7Zm9yKGNvbnN0IG4gb2YgdC5nZXRLZXlzKCkpe2NvbnN0IGM9dC5nZXQobik7c3dpdGNoKG4pe2Nhc2UiVHlwZSI6YnJlYWs7Y2FzZSJMVyI6Y2FzZSJMQyI6Y2FzZSJMSiI6Y2FzZSJNTCI6Y2FzZSJEIjpjYXNlIlJJIjpjYXNlIkZMIjpjYXNlIkNBIjpjYXNlImNhIjpkLnB1c2goW24sY10pO2JyZWFrO2Nhc2UiRm9udCI6dT0hMTtmPWYudGhlbigoKCk9PnRoaXMuaGFuZGxlU2V0Rm9udChlLG51bGwsY1swXSxhLHMsby5zdGF0ZSkudGhlbigoZnVuY3Rpb24oZSl7YS5hZGREZXBlbmRlbmN5KGUpO2QucHVzaChbbixbZSxjWzFdXV0pfSkpKSk7YnJlYWs7Y2FzZSJCTSI6ZC5wdXNoKFtuLG5vcm1hbGl6ZUJsZW5kTW9kZShjKV0pO2JyZWFrO2Nhc2UiU01hc2siOmlmKCgwLGkuaXNOYW1lKShjLCJOb25lIikpe2QucHVzaChbbiwhMV0pO2JyZWFrfWlmKGMgaW5zdGFuY2VvZiBpLkRpY3Qpe3U9ITE7Zj1mLnRoZW4oKCgpPT50aGlzLmhhbmRsZVNNYXNrKGMsZSxhLHMsbyxsKSkpO2QucHVzaChbbiwhMF0pfWVsc2UoMCxyLndhcm4pKCJVbnN1cHBvcnRlZCBTTWFzayB0eXBlIik7YnJlYWs7Y2FzZSJUUiI6Y29uc3QgdD10aGlzLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24oYyk7ZC5wdXNoKFtuLHRdKTticmVhaztjYXNlIk9QIjpjYXNlIm9wIjpjYXNlIk9QTSI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIlNNIjpjYXNlIlNBIjpjYXNlIkFJUyI6Y2FzZSJUSyI6KDAsci5pbmZvKSgiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK24pO2JyZWFrO2RlZmF1bHQ6KDAsci5pbmZvKSgiVW5rbm93biBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIrbil9fXJldHVybiBmLnRoZW4oKGZ1bmN0aW9uKCl7ZC5sZW5ndGg+MCYmYS5hZGRPcChyLk9QUy5zZXRHU3RhdGUsW2RdKTt1JiZjLnNldChuLGgsZCl9KSl9bG9hZEZvbnQoZSx0LGEsbj1udWxsLG89bnVsbCl7Y29uc3QgZXJyb3JGb250PWFzeW5jKCk9Pm5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBzLkVycm9yRm9udChgRm9udCAiJHtlfSIgaXMgbm90IGF2YWlsYWJsZS5gKSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KTtsZXQgYztpZih0KXQgaW5zdGFuY2VvZiBpLlJlZiYmKGM9dCk7ZWxzZXtjb25zdCB0PWEuZ2V0KCJGb250Iik7dCYmKGM9dC5nZXRSYXcoZSkpfWlmKGMpe2lmKHRoaXMucGFyc2luZ1R5cGUzRm9udCYmdGhpcy50eXBlM0ZvbnRSZWZzLmhhcyhjKSlyZXR1cm4gZXJyb3JGb250KCk7aWYodGhpcy5mb250Q2FjaGUuaGFzKGMpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoYyk7dD10aGlzLnhyZWYuZmV0Y2hJZlJlZihjKX1pZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyYmIXRoaXMucGFyc2luZ1R5cGUzRm9udCl7KDAsci53YXJuKShgRm9udCAiJHtlfSIgaXMgbm90IGF2YWlsYWJsZS5gKTtyZXR1cm4gZXJyb3JGb250KCl9KDAsci53YXJuKShgRm9udCAiJHtlfSIgaXMgbm90IGF2YWlsYWJsZSAtLSBhdHRlbXB0aW5nIHRvIGZhbGxiYWNrIHRvIGEgZGVmYXVsdCBmb250LmApO3Q9bnx8UGFydGlhbEV2YWx1YXRvci5mYWxsYmFja0ZvbnREaWN0fWlmKHQuY2FjaGVLZXkmJnRoaXMuZm9udENhY2hlLmhhcyh0LmNhY2hlS2V5KSlyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KHQuY2FjaGVLZXkpO2NvbnN0IGw9bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHk7bGV0IGg7dHJ5e2g9dGhpcy5wcmVFdmFsdWF0ZUZvbnQodCk7aC5jc3NGb250SW5mbz1vfWNhdGNoKGUpeygwLHIud2FybikoYGxvYWRGb250IC0gcHJlRXZhbHVhdGVGb250IGZhaWxlZDogIiR7ZX0iLmApO3JldHVybiBlcnJvckZvbnQoKX1jb25zdHtkZXNjcmlwdG9yOnUsaGFzaDpkfT1oLGY9YyBpbnN0YW5jZW9mIGkuUmVmO2xldCBnO2lmKGQmJnUgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IGU9dS5mb250QWxpYXNlc3x8PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZVtkXSl7Y29uc3QgdD1lW2RdLmFsaWFzUmVmO2lmKGYmJnQmJnRoaXMuZm9udENhY2hlLmhhcyh0KSl7dGhpcy5mb250Q2FjaGUucHV0QWxpYXMoYyx0KTtyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGMpfX1lbHNlIGVbZF09e2ZvbnRJRDp0aGlzLmlkRmFjdG9yeS5jcmVhdGVGb250SWQoKX07ZiYmKGVbZF0uYWxpYXNSZWY9Yyk7Zz1lW2RdLmZvbnRJRH1lbHNlIGc9dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCk7KDAsci5hc3NlcnQpKGc/LnN0YXJ0c1dpdGgoImYiKSwnVGhlICJmb250SUQiIG11c3QgYmUgKGNvcnJlY3RseSkgZGVmaW5lZC4nKTtpZihmKXRoaXMuZm9udENhY2hlLnB1dChjLGwucHJvbWlzZSk7ZWxzZXt0LmNhY2hlS2V5PWBjYWNoZUtleV8ke2d9YDt0aGlzLmZvbnRDYWNoZS5wdXQodC5jYWNoZUtleSxsLnByb21pc2UpfXQubG9hZGVkTmFtZT1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV8ke2d9YDt0aGlzLnRyYW5zbGF0ZUZvbnQoaCkudGhlbigoZT0+e2wucmVzb2x2ZShuZXcgVHJhbnNsYXRlZEZvbnQoe2xvYWRlZE5hbWU6dC5sb2FkZWROYW1lLGZvbnQ6ZSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KSl9KSkuY2F0Y2goKGU9PnsoMCxyLndhcm4pKGBsb2FkRm9udCAtIHRyYW5zbGF0ZUZvbnQgZmFpbGVkOiAiJHtlfSIuYCk7bC5yZXNvbHZlKG5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZTp0LmxvYWRlZE5hbWUsZm9udDpuZXcgcy5FcnJvckZvbnQoZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTplKSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KSl9KSk7cmV0dXJuIGwucHJvbWlzZX1idWlsZFBhdGgoZSx0LGEsbj0hMSl7Y29uc3QgaT1lLmxlbmd0aC0xO2F8fChhPVtdKTtpZihpPDB8fGUuZm5BcnJheVtpXSE9PXIuT1BTLmNvbnN0cnVjdFBhdGgpe2lmKG4peygwLHIud2FybikoYEVuY291bnRlcmVkIHBhdGggb3BlcmF0b3IgIiR7dH0iIGluc2lkZSBvZiBhIHRleHQgb2JqZWN0LmApO2UuYWRkT3Aoci5PUFMuc2F2ZSxudWxsKX1sZXQgaTtzd2l0Y2godCl7Y2FzZSByLk9QUy5yZWN0YW5nbGU6Y29uc3QgZT1hWzBdK2FbMl0sdD1hWzFdK2FbM107aT1bTWF0aC5taW4oYVswXSxlKSxNYXRoLm1heChhWzBdLGUpLE1hdGgubWluKGFbMV0sdCksTWF0aC5tYXgoYVsxXSx0KV07YnJlYWs7Y2FzZSByLk9QUy5tb3ZlVG86Y2FzZSByLk9QUy5saW5lVG86aT1bYVswXSxhWzBdLGFbMV0sYVsxXV07YnJlYWs7ZGVmYXVsdDppPVsxLzAsLTEvMCwxLzAsLTEvMF19ZS5hZGRPcChyLk9QUy5jb25zdHJ1Y3RQYXRoLFtbdF0sYSxpXSk7biYmZS5hZGRPcChyLk9QUy5yZXN0b3JlLG51bGwpfWVsc2V7Y29uc3Qgbj1lLmFyZ3NBcnJheVtpXTtuWzBdLnB1c2godCk7blsxXS5wdXNoKC4uLmEpO2NvbnN0IHM9blsyXTtzd2l0Y2godCl7Y2FzZSByLk9QUy5yZWN0YW5nbGU6Y29uc3QgZT1hWzBdK2FbMl0sdD1hWzFdK2FbM107c1swXT1NYXRoLm1pbihzWzBdLGFbMF0sZSk7c1sxXT1NYXRoLm1heChzWzFdLGFbMF0sZSk7c1syXT1NYXRoLm1pbihzWzJdLGFbMV0sdCk7c1szXT1NYXRoLm1heChzWzNdLGFbMV0sdCk7YnJlYWs7Y2FzZSByLk9QUy5tb3ZlVG86Y2FzZSByLk9QUy5saW5lVG86c1swXT1NYXRoLm1pbihzWzBdLGFbMF0pO3NbMV09TWF0aC5tYXgoc1sxXSxhWzBdKTtzWzJdPU1hdGgubWluKHNbMl0sYVsxXSk7c1szXT1NYXRoLm1heChzWzNdLGFbMV0pfX19cGFyc2VDb2xvclNwYWNlKHtjczplLHJlc291cmNlczp0LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmF9KXtyZXR1cm4geS5Db2xvclNwYWNlLnBhcnNlQXN5bmMoe2NzOmUseHJlZjp0aGlzLnhyZWYscmVzb3VyY2VzOnQscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxsb2NhbENvbG9yU3BhY2VDYWNoZTphfSkuY2F0Y2goKGU9PntpZihlIGluc3RhbmNlb2Ygci5BYm9ydEV4Y2VwdGlvbilyZXR1cm4gbnVsbDtpZih0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXsoMCxyLndhcm4pKGBwYXJzZUNvbG9yU3BhY2UgLSBpZ25vcmluZyBDb2xvclNwYWNlOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9dGhyb3cgZX0pKX1wYXJzZVNoYWRpbmcoe3NoYWRpbmc6ZSxyZXNvdXJjZXM6dCxsb2NhbENvbG9yU3BhY2VDYWNoZTphLGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZTpyfSl7bGV0IG49ci5nZXQoZSk7aWYoIW4pe2NvbnN0IGk9bC5QYXR0ZXJuLnBhcnNlU2hhZGluZyhlLHRoaXMueHJlZix0LHRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxhKS5nZXRJUigpO249YHBhdHRlcm5fJHt0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWA7dGhpcy5wYXJzaW5nVHlwZTNGb250JiYobj1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV90eXBlM18ke259YCk7ci5zZXQoZSxuKTt0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ/dGhpcy5oYW5kbGVyLnNlbmQoImNvbW1vbm9iaiIsW24sIlBhdHRlcm4iLGldKTp0aGlzLmhhbmRsZXIuc2VuZCgib2JqIixbbix0aGlzLnBhZ2VJbmRleCwiUGF0dGVybiIsaV0pfXJldHVybiBufWhhbmRsZUNvbG9yTihlLHQsYSxuLHMsbyxjLGgsdSxkKXtjb25zdCBmPWEucG9wKCk7aWYoZiBpbnN0YW5jZW9mIGkuTmFtZSl7Y29uc3QgZz1zLmdldFJhdyhmLm5hbWUpLHA9ZyBpbnN0YW5jZW9mIGkuUmVmJiZ1LmdldEJ5UmVmKGcpO2lmKHApdHJ5e2NvbnN0IHI9bi5iYXNlP24uYmFzZS5nZXRSZ2IoYSwwKTpudWxsLGk9KDAsbC5nZXRUaWxpbmdQYXR0ZXJuSVIpKHAub3BlcmF0b3JMaXN0SVIscC5kaWN0LHIpO2UuYWRkT3AodCxpKTtyZXR1cm59Y2F0Y2h7fWNvbnN0IGI9dGhpcy54cmVmLmZldGNoSWZSZWYoZyk7aWYoYil7Y29uc3QgaT1iIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtP2IuZGljdDpiLHM9aS5nZXQoIlBhdHRlcm5UeXBlIik7aWYocz09PUUpe2NvbnN0IHI9bi5iYXNlP24uYmFzZS5nZXRSZ2IoYSwwKTpudWxsO3JldHVybiB0aGlzLmhhbmRsZVRpbGluZ1R5cGUodCxyLG8sYixpLGUsYyx1KX1pZihzPT09Til7Y29uc3QgYT1pLmdldCgiU2hhZGluZyIpLHI9aS5nZXRBcnJheSgiTWF0cml4Iiksbj10aGlzLnBhcnNlU2hhZGluZyh7c2hhZGluZzphLHJlc291cmNlczpvLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmgsbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlOmR9KTtlLmFkZE9wKHQsWyJTaGFkaW5nIixuLHJdKTtyZXR1cm59dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVua25vd24gUGF0dGVyblR5cGU6ICR7c31gKX19dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVua25vd24gUGF0dGVybk5hbWU6ICR7Zn1gKX1fcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihlLHQsYSl7aWYoKyt0PjEwKXsoMCxyLndhcm4pKCJWaXNpYmlsaXR5IGV4cHJlc3Npb24gaXMgdG9vIGRlZXBseSBuZXN0ZWQiKTtyZXR1cm59Y29uc3Qgbj1lLmxlbmd0aCxzPXRoaXMueHJlZi5mZXRjaElmUmVmKGVbMF0pO2lmKCEobjwyKSYmcyBpbnN0YW5jZW9mIGkuTmFtZSl7c3dpdGNoKHMubmFtZSl7Y2FzZSJBbmQiOmNhc2UiT3IiOmNhc2UiTm90IjphLnB1c2gocy5uYW1lKTticmVhaztkZWZhdWx0OigwLHIud2FybikoYEludmFsaWQgb3BlcmF0b3IgJHtzLm5hbWV9IGluIHZpc2liaWxpdHkgZXhwcmVzc2lvbmApO3JldHVybn1mb3IobGV0IHI9MTtyPG47cisrKXtjb25zdCBuPWVbcl0scz10aGlzLnhyZWYuZmV0Y2hJZlJlZihuKTtpZihBcnJheS5pc0FycmF5KHMpKXtjb25zdCBlPVtdO2EucHVzaChlKTt0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKHMsdCxlKX1lbHNlIG4gaW5zdGFuY2VvZiBpLlJlZiYmYS5wdXNoKG4udG9TdHJpbmcoKSl9fWVsc2UoMCxyLndhcm4pKCJJbnZhbGlkIHZpc2liaWxpdHkgZXhwcmVzc2lvbiIpfWFzeW5jIHBhcnNlTWFya2VkQ29udGVudFByb3BzKGUsdCl7bGV0IGE7aWYoZSBpbnN0YW5jZW9mIGkuTmFtZSl7YT10LmdldCgiUHJvcGVydGllcyIpLmdldChlLm5hbWUpfWVsc2V7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiT3B0aW9uYWwgY29udGVudCBwcm9wZXJ0aWVzIG1hbGZvcm1lZC4iKTthPWV9Y29uc3Qgbj1hLmdldCgiVHlwZSIpPy5uYW1lO2lmKCJPQ0ciPT09bilyZXR1cm57dHlwZTpuLGlkOmEub2JqSWR9O2lmKCJPQ01EIj09PW4pe2NvbnN0IGU9YS5nZXQoIlZFIik7aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3QgdD1bXTt0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKGUsMCx0KTtpZih0Lmxlbmd0aD4wKXJldHVybnt0eXBlOiJPQ01EIixleHByZXNzaW9uOnR9fWNvbnN0IHQ9YS5nZXQoIk9DR3MiKTtpZihBcnJheS5pc0FycmF5KHQpfHx0IGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBlPVtdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKGNvbnN0IGEgb2YgdCllLnB1c2goYS50b1N0cmluZygpKTtlbHNlIGUucHVzaCh0Lm9iaklkKTtyZXR1cm57dHlwZTpuLGlkczplLHBvbGljeTphLmdldCgiUCIpaW5zdGFuY2VvZiBpLk5hbWU/YS5nZXQoIlAiKS5uYW1lOm51bGwsZXhwcmVzc2lvbjpudWxsfX1pZih0IGluc3RhbmNlb2YgaS5SZWYpcmV0dXJue3R5cGU6bixpZDp0LnRvU3RyaW5nKCl9fXJldHVybiBudWxsfWdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmUsdGFzazp0LHJlc291cmNlczphLG9wZXJhdG9yTGlzdDpuLGluaXRpYWxTdGF0ZTpzPW51bGwsZmFsbGJhY2tGb250RGljdDpvPW51bGx9KXthfHw9aS5EaWN0LmVtcHR5O3N8fD1uZXcgRXZhbFN0YXRlO2lmKCFuKXRocm93IG5ldyBFcnJvcignZ2V0T3BlcmF0b3JMaXN0OiBtaXNzaW5nICJvcGVyYXRvckxpc3QiIHBhcmFtZXRlcicpO2NvbnN0IGM9dGhpcyxsPXRoaXMueHJlZjtsZXQgaD0hMTtjb25zdCB1PW5ldyBnLkxvY2FsSW1hZ2VDYWNoZSxkPW5ldyBnLkxvY2FsQ29sb3JTcGFjZUNhY2hlLGY9bmV3IGcuTG9jYWxHU3RhdGVDYWNoZSxwPW5ldyBnLkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlLGI9bmV3IE1hcCx3PWEuZ2V0KCJYT2JqZWN0Iil8fGkuRGljdC5lbXB0eSxTPWEuZ2V0KCJQYXR0ZXJuIil8fGkuRGljdC5lbXB0eSx4PW5ldyBTdGF0ZU1hbmFnZXIocyksQz1uZXcgRXZhbHVhdG9yUHJlcHJvY2Vzc29yKGUsbCx4KSxrPW5ldyBUaW1lU2xvdE1hbmFnZXI7ZnVuY3Rpb24gY2xvc2VQZW5kaW5nUmVzdG9yZU9QUyhlKXtmb3IobGV0IGU9MCx0PUMuc2F2ZWRTdGF0ZXNEZXB0aDtlPHQ7ZSsrKW4uYWRkT3Aoci5PUFMucmVzdG9yZSxbXSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbiBwcm9taXNlQm9keShlLHMpe2NvbnN0IG5leHQ9ZnVuY3Rpb24odCl7UHJvbWlzZS5hbGwoW3Qsbi5yZWFkeV0pLnRoZW4oKGZ1bmN0aW9uKCl7dHJ5e3Byb21pc2VCb2R5KGUscyl9Y2F0Y2goZSl7cyhlKX19KSxzKX07dC5lbnN1cmVOb3RUZXJtaW5hdGVkKCk7ay5yZXNldCgpO2NvbnN0IGc9e307bGV0IHYsRixPLFQsTSxEO2Zvcig7ISh2PWsuY2hlY2soKSk7KXtnLmFyZ3M9bnVsbDtpZighQy5yZWFkKGcpKWJyZWFrO2xldCBlPWcuYXJncyxzPWcuZm47c3dpdGNoKDB8cyl7Y2FzZSByLk9QUy5wYWludFhPYmplY3Q6RD1lWzBdaW5zdGFuY2VvZiBpLk5hbWU7TT1lWzBdLm5hbWU7aWYoRCl7Y29uc3QgdD11LmdldEJ5TmFtZShNKTtpZih0KXtuLmFkZEltYWdlT3BzKHQuZm4sdC5hcmdzLHQub3B0aW9uYWxDb250ZW50KTtpbmNyZW1lbnRDYWNoZWRJbWFnZU1hc2tDb3VudCh0KTtlPW51bGw7Y29udGludWV9fW5leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscyl7aWYoIUQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO2xldCBvPXcuZ2V0UmF3KE0pO2lmKG8gaW5zdGFuY2VvZiBpLlJlZil7Y29uc3QgdD11LmdldEJ5UmVmKG8pfHxjLl9yZWdpb25hbEltYWdlQ2FjaGUuZ2V0QnlSZWYobyk7aWYodCl7bi5hZGRJbWFnZU9wcyh0LmZuLHQuYXJncyx0Lm9wdGlvbmFsQ29udGVudCk7aW5jcmVtZW50Q2FjaGVkSW1hZ2VNYXNrQ291bnQodCk7ZSgpO3JldHVybn1jb25zdCBhPWMuZ2xvYmFsSW1hZ2VDYWNoZS5nZXREYXRhKG8sYy5wYWdlSW5kZXgpO2lmKGEpe24uYWRkRGVwZW5kZW5jeShhLm9iaklkKTtuLmFkZEltYWdlT3BzKGEuZm4sYS5hcmdzLGEub3B0aW9uYWxDb250ZW50KTtlKCk7cmV0dXJufW89bC5mZXRjaChvKX1pZighKG8gaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbSIpO2NvbnN0IGg9by5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCEoaCBpbnN0YW5jZW9mIGkuTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUiKTtpZigiRm9ybSIhPT1oLm5hbWUpaWYoIkltYWdlIiE9PWgubmFtZSl7aWYoIlBTIiE9PWgubmFtZSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgVW5oYW5kbGVkIFhPYmplY3Qgc3VidHlwZSAke2gubmFtZX1gKTsoMCxyLmluZm8pKCJJZ25vcmVkIFhPYmplY3Qgc3VidHlwZSBQUyIpO2UoKX1lbHNlIGMuYnVpbGRQYWludEltYWdlWE9iamVjdCh7cmVzb3VyY2VzOmEsaW1hZ2U6byxvcGVyYXRvckxpc3Q6bixjYWNoZUtleTpNLGxvY2FsSW1hZ2VDYWNoZTp1LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmR9KS50aGVuKGUscyk7ZWxzZXt4LnNhdmUoKTtjLmJ1aWxkRm9ybVhPYmplY3QoYSxvLG51bGwsbix0LHguc3RhdGUuY2xvbmUoKSxkKS50aGVuKChmdW5jdGlvbigpe3gucmVzdG9yZSgpO2UoKX0pLHMpfX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2Ygci5BYm9ydEV4Y2VwdGlvbikpe2lmKCFjLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7KDAsci53YXJuKShgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgWE9iamVjdDogIiR7ZX0iLmApfX0pKSk7cmV0dXJuO2Nhc2Ugci5PUFMuc2V0Rm9udDp2YXIgRT1lWzFdO25leHQoYy5oYW5kbGVTZXRGb250KGEsZSxudWxsLG4sdCx4LnN0YXRlLG8pLnRoZW4oKGZ1bmN0aW9uKGUpe24uYWRkRGVwZW5kZW5jeShlKTtuLmFkZE9wKHIuT1BTLnNldEZvbnQsW2UsRV0pfSkpKTtyZXR1cm47Y2FzZSByLk9QUy5iZWdpblRleHQ6aD0hMDticmVhaztjYXNlIHIuT1BTLmVuZFRleHQ6aD0hMTticmVhaztjYXNlIHIuT1BTLmVuZElubGluZUltYWdlOnZhciBOPWVbMF0uY2FjaGVLZXk7aWYoTil7Y29uc3QgdD11LmdldEJ5TmFtZShOKTtpZih0KXtuLmFkZEltYWdlT3BzKHQuZm4sdC5hcmdzLHQub3B0aW9uYWxDb250ZW50KTtpbmNyZW1lbnRDYWNoZWRJbWFnZU1hc2tDb3VudCh0KTtlPW51bGw7Y29udGludWV9fW5leHQoYy5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6YSxpbWFnZTplWzBdLGlzSW5saW5lOiEwLG9wZXJhdG9yTGlzdDpuLGNhY2hlS2V5Ok4sbG9jYWxJbWFnZUNhY2hlOnUsbG9jYWxDb2xvclNwYWNlQ2FjaGU6ZH0pKTtyZXR1cm47Y2FzZSByLk9QUy5zaG93VGV4dDppZigheC5zdGF0ZS5mb250KXtjLmVuc3VyZVN0YXRlRm9udCh4LnN0YXRlKTtjb250aW51ZX1lWzBdPWMuaGFuZGxlVGV4dChlWzBdLHguc3RhdGUpO2JyZWFrO2Nhc2Ugci5PUFMuc2hvd1NwYWNlZFRleHQ6aWYoIXguc3RhdGUuZm9udCl7Yy5lbnN1cmVTdGF0ZUZvbnQoeC5zdGF0ZSk7Y29udGludWV9dmFyIEw9W10sJD14LnN0YXRlO2Zvcihjb25zdCB0IG9mIGVbMF0pInN0cmluZyI9PXR5cGVvZiB0P0wucHVzaCguLi5jLmhhbmRsZVRleHQodCwkKSk6Im51bWJlciI9PXR5cGVvZiB0JiZMLnB1c2godCk7ZVswXT1MO3M9ci5PUFMuc2hvd1RleHQ7YnJlYWs7Y2FzZSByLk9QUy5uZXh0TGluZVNob3dUZXh0OmlmKCF4LnN0YXRlLmZvbnQpe2MuZW5zdXJlU3RhdGVGb250KHguc3RhdGUpO2NvbnRpbnVlfW4uYWRkT3Aoci5PUFMubmV4dExpbmUpO2VbMF09Yy5oYW5kbGVUZXh0KGVbMF0seC5zdGF0ZSk7cz1yLk9QUy5zaG93VGV4dDticmVhaztjYXNlIHIuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OmlmKCF4LnN0YXRlLmZvbnQpe2MuZW5zdXJlU3RhdGVGb250KHguc3RhdGUpO2NvbnRpbnVlfW4uYWRkT3Aoci5PUFMubmV4dExpbmUpO24uYWRkT3Aoci5PUFMuc2V0V29yZFNwYWNpbmcsW2Uuc2hpZnQoKV0pO24uYWRkT3Aoci5PUFMuc2V0Q2hhclNwYWNpbmcsW2Uuc2hpZnQoKV0pO2VbMF09Yy5oYW5kbGVUZXh0KGVbMF0seC5zdGF0ZSk7cz1yLk9QUy5zaG93VGV4dDticmVhaztjYXNlIHIuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlOnguc3RhdGUudGV4dFJlbmRlcmluZ01vZGU9ZVswXTticmVhaztjYXNlIHIuT1BTLnNldEZpbGxDb2xvclNwYWNlOntjb25zdCB0PXkuQ29sb3JTcGFjZS5nZXRDYWNoZWQoZVswXSxsLGQpO2lmKHQpe3guc3RhdGUuZmlsbENvbG9yU3BhY2U9dDtjb250aW51ZX1uZXh0KGMucGFyc2VDb2xvclNwYWNlKHtjczplWzBdLHJlc291cmNlczphLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmR9KS50aGVuKChmdW5jdGlvbihlKXtlJiYoeC5zdGF0ZS5maWxsQ29sb3JTcGFjZT1lKX0pKSk7cmV0dXJufWNhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZTp7Y29uc3QgdD15LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKGVbMF0sbCxkKTtpZih0KXt4LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9dDtjb250aW51ZX1uZXh0KGMucGFyc2VDb2xvclNwYWNlKHtjczplWzBdLHJlc291cmNlczphLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmR9KS50aGVuKChmdW5jdGlvbihlKXtlJiYoeC5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPWUpfSkpKTtyZXR1cm59Y2FzZSByLk9QUy5zZXRGaWxsQ29sb3I6VD14LnN0YXRlLmZpbGxDb2xvclNwYWNlO2U9VC5nZXRSZ2IoZSwwKTtzPXIuT1BTLnNldEZpbGxSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldFN0cm9rZUNvbG9yOlQ9eC5zdGF0ZS5zdHJva2VDb2xvclNwYWNlO2U9VC5nZXRSZ2IoZSwwKTtzPXIuT1BTLnNldFN0cm9rZVJHQkNvbG9yO2JyZWFrO2Nhc2Ugci5PUFMuc2V0RmlsbEdyYXk6eC5zdGF0ZS5maWxsQ29sb3JTcGFjZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5O2U9eS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2IoZSwwKTtzPXIuT1BTLnNldEZpbGxSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldFN0cm9rZUdyYXk6eC5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7ZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihlLDApO3M9ci5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSByLk9QUy5zZXRGaWxsQ01ZS0NvbG9yOnguc3RhdGUuZmlsbENvbG9yU3BhY2U9eS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215aztlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGUsMCk7cz1yLk9QUy5zZXRGaWxsUkdCQ29sb3I7YnJlYWs7Y2FzZSByLk9QUy5zZXRTdHJva2VDTVlLQ29sb3I6eC5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWs7ZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYihlLDApO3M9ci5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSByLk9QUy5zZXRGaWxsUkdCQ29sb3I6eC5zdGF0ZS5maWxsQ29sb3JTcGFjZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7ZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGUsMCk7YnJlYWs7Y2FzZSByLk9QUy5zZXRTdHJva2VSR0JDb2xvcjp4LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9eS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiO2U9eS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihlLDApO2JyZWFrO2Nhc2Ugci5PUFMuc2V0RmlsbENvbG9yTjpUPXguc3RhdGUuZmlsbENvbG9yU3BhY2U7aWYoIlBhdHRlcm4iPT09VC5uYW1lKXtuZXh0KGMuaGFuZGxlQ29sb3JOKG4sci5PUFMuc2V0RmlsbENvbG9yTixlLFQsUyxhLHQsZCxwLGIpKTtyZXR1cm59ZT1ULmdldFJnYihlLDApO3M9ci5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3JOOlQ9eC5zdGF0ZS5zdHJva2VDb2xvclNwYWNlO2lmKCJQYXR0ZXJuIj09PVQubmFtZSl7bmV4dChjLmhhbmRsZUNvbG9yTihuLHIuT1BTLnNldFN0cm9rZUNvbG9yTixlLFQsUyxhLHQsZCxwLGIpKTtyZXR1cm59ZT1ULmdldFJnYihlLDApO3M9ci5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSByLk9QUy5zaGFkaW5nRmlsbDp2YXIgXz1hLmdldCgiU2hhZGluZyIpO2lmKCFfKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJObyBzaGFkaW5nIHJlc291cmNlIGZvdW5kIik7dmFyIGo9Xy5nZXQoZVswXS5uYW1lKTtpZighail0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiTm8gc2hhZGluZyBvYmplY3QgZm91bmQiKTtlPVtjLnBhcnNlU2hhZGluZyh7c2hhZGluZzpqLHJlc291cmNlczphLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmQsbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlOmJ9KV07cz1yLk9QUy5zaGFkaW5nRmlsbDticmVhaztjYXNlIHIuT1BTLnNldEdTdGF0ZTpEPWVbMF1pbnN0YW5jZW9mIGkuTmFtZTtNPWVbMF0ubmFtZTtpZihEKXtjb25zdCB0PWYuZ2V0QnlOYW1lKE0pO2lmKHQpe3QubGVuZ3RoPjAmJm4uYWRkT3Aoci5PUFMuc2V0R1N0YXRlLFt0XSk7ZT1udWxsO2NvbnRpbnVlfX1uZXh0KG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHMpe2lmKCFEKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJHU3RhdGUgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO2NvbnN0IG89YS5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEobyBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO2NvbnN0IGw9by5nZXQoTSk7aWYoIShsIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiR1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7Yy5zZXRHU3RhdGUoe3Jlc291cmNlczphLGdTdGF0ZTpsLG9wZXJhdG9yTGlzdDpuLGNhY2hlS2V5Ok0sdGFzazp0LHN0YXRlTWFuYWdlcjp4LGxvY2FsR1N0YXRlQ2FjaGU6Zixsb2NhbENvbG9yU3BhY2VDYWNoZTpkfSkudGhlbihlLHMpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKSl7aWYoIWMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxyLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBFeHRHU3RhdGU6ICIke2V9Ii5gKX19KSkpO3JldHVybjtjYXNlIHIuT1BTLm1vdmVUbzpjYXNlIHIuT1BTLmxpbmVUbzpjYXNlIHIuT1BTLmN1cnZlVG86Y2FzZSByLk9QUy5jdXJ2ZVRvMjpjYXNlIHIuT1BTLmN1cnZlVG8zOmNhc2Ugci5PUFMuY2xvc2VQYXRoOmNhc2Ugci5PUFMucmVjdGFuZ2xlOmMuYnVpbGRQYXRoKG4scyxlLGgpO2NvbnRpbnVlO2Nhc2Ugci5PUFMubWFya1BvaW50OmNhc2Ugci5PUFMubWFya1BvaW50UHJvcHM6Y2FzZSByLk9QUy5iZWdpbkNvbXBhdDpjYXNlIHIuT1BTLmVuZENvbXBhdDpjb250aW51ZTtjYXNlIHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzOmlmKCEoZVswXWluc3RhbmNlb2YgaS5OYW1lKSl7KDAsci53YXJuKShgRXhwZWN0ZWQgbmFtZSBmb3IgYmVnaW5NYXJrZWRDb250ZW50UHJvcHMgYXJnMD0ke2VbMF19YCk7Y29udGludWV9aWYoIk9DIj09PWVbMF0ubmFtZSl7bmV4dChjLnBhcnNlTWFya2VkQ29udGVudFByb3BzKGVbMV0sYSkudGhlbigoZT0+e24uYWRkT3Aoci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsWyJPQyIsZV0pfSkpLmNhdGNoKChlPT57aWYoIShlIGluc3RhbmNlb2Ygci5BYm9ydEV4Y2VwdGlvbikpe2lmKCFjLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7KDAsci53YXJuKShgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6ICIke2V9Ii5gKX19KSkpO3JldHVybn1lPVtlWzBdLm5hbWUsZVsxXWluc3RhbmNlb2YgaS5EaWN0P2VbMV0uZ2V0KCJNQ0lEIik6bnVsbF07YnJlYWs7Y2FzZSByLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQ6Y2FzZSByLk9QUy5lbmRNYXJrZWRDb250ZW50OmRlZmF1bHQ6aWYobnVsbCE9PWUpe2ZvcihGPTAsTz1lLmxlbmd0aDtGPE8mJiEoZVtGXWluc3RhbmNlb2YgaS5EaWN0KTtGKyspO2lmKEY8Tyl7KDAsci53YXJuKSgiZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3Jpbmcgb3BlcmF0b3I6ICIrcyk7Y29udGludWV9fX1uLmFkZE9wKHMsZSl9aWYodiluZXh0KFIpO2Vsc2V7Y2xvc2VQZW5kaW5nUmVzdG9yZU9QUygpO2UoKX19KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxyLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nICIke3QubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCl9fSkpfWdldFRleHRDb250ZW50KHtzdHJlYW06ZSx0YXNrOnQscmVzb3VyY2VzOmEsc3RhdGVNYW5hZ2VyOm49bnVsbCxpbmNsdWRlTWFya2VkQ29udGVudDpzPSExLHNpbms6byxzZWVuU3R5bGVzOmM9bmV3IFNldCx2aWV3Qm94OmwsbWFya2VkQ29udGVudERhdGE6aD1udWxsLGRpc2FibGVOb3JtYWxpemF0aW9uOnU9ITF9KXthfHw9aS5EaWN0LmVtcHR5O258fD1uZXcgU3RhdGVNYW5hZ2VyKG5ldyBUZXh0U3RhdGUpO3MmJihofHw9e2xldmVsOjB9KTtjb25zdCBkPXtpdGVtczpbXSxzdHlsZXM6T2JqZWN0LmNyZWF0ZShudWxsKX0sZj17aW5pdGlhbGl6ZWQ6ITEsc3RyOltdLHRvdGFsV2lkdGg6MCx0b3RhbEhlaWdodDowLHdpZHRoOjAsaGVpZ2h0OjAsdmVydGljYWw6ITEscHJldlRyYW5zZm9ybTpudWxsLHRleHRBZHZhbmNlU2NhbGU6MCxzcGFjZUluRmxvd01pbjowLHNwYWNlSW5GbG93TWF4OjAsdHJhY2tpbmdTcGFjZU1pbjoxLzAsbmVnYXRpdmVTcGFjZU1heDotMS8wLG5vdEFTcGFjZTotMS8wLHRyYW5zZm9ybTpudWxsLGZvbnROYW1lOm51bGwsaGFzRU9MOiExfSxwPVsiICIsIiAiXTtsZXQgeT0wO2Z1bmN0aW9uIHNhdmVMYXN0Q2hhcihlKXtjb25zdCB0PSh5KzEpJTIsYT0iICIhPT1wW3ldJiYiICI9PT1wW3RdO3BbeV09ZTt5PXQ7cmV0dXJuIGF9ZnVuY3Rpb24gc2hvdWxkQWRkV2hpdGVwc2FjZSgpe3JldHVybiIgIiE9PXBbeV0mJiIgIj09PXBbKHkrMSklMl19ZnVuY3Rpb24gcmVzZXRMYXN0Q2hhcnMoKXtwWzBdPXBbMV09IiAiO3k9MH1jb25zdCB3PXRoaXMsUz10aGlzLnhyZWYseD1bXTtsZXQgQz1udWxsO2NvbnN0IGs9bmV3IGcuTG9jYWxJbWFnZUNhY2hlLHY9bmV3IGcuTG9jYWxHU3RhdGVDYWNoZSxGPW5ldyBFdmFsdWF0b3JQcmVwcm9jZXNzb3IoZSxTLG4pO2xldCBPO2Z1bmN0aW9uIHB1c2hXaGl0ZXNwYWNlKHt3aWR0aDplPTAsaGVpZ2h0OnQ9MCx0cmFuc2Zvcm06YT1mLnByZXZUcmFuc2Zvcm0sZm9udE5hbWU6cj1mLmZvbnROYW1lfSl7ZC5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDplLGhlaWdodDp0LHRyYW5zZm9ybTphLGZvbnROYW1lOnIsaGFzRU9MOiExfSl9ZnVuY3Rpb24gZ2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKXtjb25zdCBlPU8uZm9udCx0PVtPLmZvbnRTaXplKk8udGV4dEhTY2FsZSwwLDAsTy5mb250U2l6ZSwwLE8udGV4dFJpc2VdO2lmKGUuaXNUeXBlM0ZvbnQmJihPLmZvbnRTaXplPD0xfHxlLmlzQ2hhckJCb3gpJiYhKDAsci5pc0FycmF5RXF1YWwpKE8uZm9udE1hdHJpeCxyLkZPTlRfSURFTlRJVFlfTUFUUklYKSl7Y29uc3QgYT1lLmJib3hbM10tZS5iYm94WzFdO2E+MCYmKHRbM10qPWEqTy5mb250TWF0cml4WzNdKX1yZXR1cm4gci5VdGlsLnRyYW5zZm9ybShPLmN0bSxyLlV0aWwudHJhbnNmb3JtKE8udGV4dE1hdHJpeCx0KSl9ZnVuY3Rpb24gZW5zdXJlVGV4dENvbnRlbnRJdGVtKCl7aWYoZi5pbml0aWFsaXplZClyZXR1cm4gZjtjb25zdHtmb250OmUsbG9hZGVkTmFtZTp0fT1PO2lmKCFjLmhhcyh0KSl7Yy5hZGQodCk7ZC5zdHlsZXNbdF09e2ZvbnRGYW1pbHk6ZS5mYWxsYmFja05hbWUsYXNjZW50OmUuYXNjZW50LGRlc2NlbnQ6ZS5kZXNjZW50LHZlcnRpY2FsOmUudmVydGljYWx9fWYuZm9udE5hbWU9dDtjb25zdCBhPWYudHJhbnNmb3JtPWdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCk7aWYoZS52ZXJ0aWNhbCl7Zi53aWR0aD1mLnRvdGFsV2lkdGg9TWF0aC5oeXBvdChhWzBdLGFbMV0pO2YuaGVpZ2h0PWYudG90YWxIZWlnaHQ9MDtmLnZlcnRpY2FsPSEwfWVsc2V7Zi53aWR0aD1mLnRvdGFsV2lkdGg9MDtmLmhlaWdodD1mLnRvdGFsSGVpZ2h0PU1hdGguaHlwb3QoYVsyXSxhWzNdKTtmLnZlcnRpY2FsPSExfWNvbnN0IHI9TWF0aC5oeXBvdChPLnRleHRMaW5lTWF0cml4WzBdLE8udGV4dExpbmVNYXRyaXhbMV0pLG49TWF0aC5oeXBvdChPLmN0bVswXSxPLmN0bVsxXSk7Zi50ZXh0QWR2YW5jZVNjYWxlPW4qcjtjb25zdHtmb250U2l6ZTppfT1PO2YudHJhY2tpbmdTcGFjZU1pbj0uMTAyKmk7Zi5ub3RBU3BhY2U9LjAzKmk7Zi5uZWdhdGl2ZVNwYWNlTWF4PS0uMippO2Yuc3BhY2VJbkZsb3dNaW49LjEwMippO2Yuc3BhY2VJbkZsb3dNYXg9LjYqaTtmLmhhc0VPTD0hMTtmLmluaXRpYWxpemVkPSEwO3JldHVybiBmfWZ1bmN0aW9uIHVwZGF0ZUFkdmFuY2VTY2FsZSgpe2lmKCFmLmluaXRpYWxpemVkKXJldHVybjtjb25zdCBlPU1hdGguaHlwb3QoTy50ZXh0TGluZU1hdHJpeFswXSxPLnRleHRMaW5lTWF0cml4WzFdKSx0PU1hdGguaHlwb3QoTy5jdG1bMF0sTy5jdG1bMV0pKmU7aWYodCE9PWYudGV4dEFkdmFuY2VTY2FsZSl7aWYoZi52ZXJ0aWNhbCl7Zi50b3RhbEhlaWdodCs9Zi5oZWlnaHQqZi50ZXh0QWR2YW5jZVNjYWxlO2YuaGVpZ2h0PTB9ZWxzZXtmLnRvdGFsV2lkdGgrPWYud2lkdGgqZi50ZXh0QWR2YW5jZVNjYWxlO2Yud2lkdGg9MH1mLnRleHRBZHZhbmNlU2NhbGU9dH19ZnVuY3Rpb24gaGFuZGxlU2V0Rm9udChlLG4pe3JldHVybiB3LmxvYWRGb250KGUsbixhKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5mb250LmlzVHlwZTNGb250P2UubG9hZFR5cGUzRGF0YSh3LGEsdCkuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KSk6ZX0pKS50aGVuKChmdW5jdGlvbihlKXtPLmxvYWRlZE5hbWU9ZS5sb2FkZWROYW1lO08uZm9udD1lLmZvbnQ7Ty5mb250TWF0cml4PWUuZm9udC5mb250TWF0cml4fHxyLkZPTlRfSURFTlRJVFlfTUFUUklYfSkpfWZ1bmN0aW9uIGFwcGx5SW52ZXJzZVJvdGF0aW9uKGUsdCxhKXtjb25zdCByPU1hdGguaHlwb3QoYVswXSxhWzFdKTtyZXR1cm5bKGFbMF0qZSthWzFdKnQpL3IsKGFbMl0qZSthWzNdKnQpL3JdfWZ1bmN0aW9uIGNvbXBhcmVXaXRoTGFzdFBvc2l0aW9uKGUpe2NvbnN0IHQ9Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKTtsZXQgYT10WzRdLHI9dFs1XTtpZihPLmZvbnQ/LnZlcnRpY2FsKXtpZihhPGxbMF18fGE+bFsyXXx8citlPGxbMV18fHI+bFszXSlyZXR1cm4hMX1lbHNlIGlmKGErZTxsWzBdfHxhPmxbMl18fHI8bFsxXXx8cj5sWzNdKXJldHVybiExO2lmKCFPLmZvbnR8fCFmLnByZXZUcmFuc2Zvcm0pcmV0dXJuITA7bGV0IG49Zi5wcmV2VHJhbnNmb3JtWzRdLGk9Zi5wcmV2VHJhbnNmb3JtWzVdO2lmKG49PT1hJiZpPT09cilyZXR1cm4hMDtsZXQgcz0tMTt0WzBdJiYwPT09dFsxXSYmMD09PXRbMl0/cz10WzBdPjA/MDoxODA6dFsxXSYmMD09PXRbMF0mJjA9PT10WzNdJiYocz10WzFdPjA/OTA6MjcwKTtzd2l0Y2gocyl7Y2FzZSAwOmJyZWFrO2Nhc2UgOTA6W2Escl09W3IsYV07W24saV09W2ksbl07YnJlYWs7Y2FzZSAxODA6W2EscixuLGldPVstYSwtciwtbiwtaV07YnJlYWs7Y2FzZSAyNzA6W2Escl09Wy1yLC1hXTtbbixpXT1bLWksLW5dO2JyZWFrO2RlZmF1bHQ6W2Escl09YXBwbHlJbnZlcnNlUm90YXRpb24oYSxyLHQpO1tuLGldPWFwcGx5SW52ZXJzZVJvdGF0aW9uKG4saSxmLnByZXZUcmFuc2Zvcm0pfWlmKE8uZm9udC52ZXJ0aWNhbCl7Y29uc3QgZT0oaS1yKS9mLnRleHRBZHZhbmNlU2NhbGUsdD1hLW4scz1NYXRoLnNpZ24oZi5oZWlnaHQpO2lmKGU8cypmLm5lZ2F0aXZlU3BhY2VNYXgpe2lmKE1hdGguYWJzKHQpPi41KmYud2lkdGgpe2FwcGVuZEVPTCgpO3JldHVybiEwfXJlc2V0TGFzdENoYXJzKCk7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXR1cm4hMH1pZihNYXRoLmFicyh0KT5mLndpZHRoKXthcHBlbmRFT0woKTtyZXR1cm4hMH1lPD1zKmYubm90QVNwYWNlJiZyZXNldExhc3RDaGFycygpO2lmKGU8PXMqZi50cmFja2luZ1NwYWNlTWluKWlmKHNob3VsZEFkZFdoaXRlcHNhY2UoKSl7cmVzZXRMYXN0Q2hhcnMoKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO3B1c2hXaGl0ZXNwYWNlKHtoZWlnaHQ6TWF0aC5hYnMoZSl9KX1lbHNlIGYuaGVpZ2h0Kz1lO2Vsc2UgaWYoIWFkZEZha2VTcGFjZXMoZSxmLnByZXZUcmFuc2Zvcm0scykpaWYoMD09PWYuc3RyLmxlbmd0aCl7cmVzZXRMYXN0Q2hhcnMoKTtwdXNoV2hpdGVzcGFjZSh7aGVpZ2h0Ok1hdGguYWJzKGUpfSl9ZWxzZSBmLmhlaWdodCs9ZTtNYXRoLmFicyh0KT4uMjUqZi53aWR0aCYmZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXR1cm4hMH1jb25zdCBvPShhLW4pL2YudGV4dEFkdmFuY2VTY2FsZSxjPXItaSxoPU1hdGguc2lnbihmLndpZHRoKTtpZihvPGgqZi5uZWdhdGl2ZVNwYWNlTWF4KXtpZihNYXRoLmFicyhjKT4uNSpmLmhlaWdodCl7YXBwZW5kRU9MKCk7cmV0dXJuITB9cmVzZXRMYXN0Q2hhcnMoKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO3JldHVybiEwfWlmKE1hdGguYWJzKGMpPmYuaGVpZ2h0KXthcHBlbmRFT0woKTtyZXR1cm4hMH1vPD1oKmYubm90QVNwYWNlJiZyZXNldExhc3RDaGFycygpO2lmKG88PWgqZi50cmFja2luZ1NwYWNlTWluKWlmKHNob3VsZEFkZFdoaXRlcHNhY2UoKSl7cmVzZXRMYXN0Q2hhcnMoKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO3B1c2hXaGl0ZXNwYWNlKHt3aWR0aDpNYXRoLmFicyhvKX0pfWVsc2UgZi53aWR0aCs9bztlbHNlIGlmKCFhZGRGYWtlU3BhY2VzKG8sZi5wcmV2VHJhbnNmb3JtLGgpKWlmKDA9PT1mLnN0ci5sZW5ndGgpe3Jlc2V0TGFzdENoYXJzKCk7cHVzaFdoaXRlc3BhY2Uoe3dpZHRoOk1hdGguYWJzKG8pfSl9ZWxzZSBmLndpZHRoKz1vO01hdGguYWJzKGMpPi4yNSpmLmhlaWdodCYmZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXR1cm4hMH1mdW5jdGlvbiBidWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6ZSxleHRyYVNwYWNpbmc6dH0pe2NvbnN0IGE9Ty5mb250O2lmKCFlKXtjb25zdCBlPU8uY2hhclNwYWNpbmcrdDtlJiYoYS52ZXJ0aWNhbD9PLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwtZSk6Ty50cmFuc2xhdGVUZXh0TWF0cml4KGUqTy50ZXh0SFNjYWxlLDApKTtyZXR1cm59Y29uc3Qgcj1hLmNoYXJzVG9HbHlwaHMoZSksbj1PLmZvbnRNYXRyaXhbMF0qTy5mb250U2l6ZTtmb3IobGV0IGU9MCxpPXIubGVuZ3RoO2U8aTtlKyspe2NvbnN0IHM9cltlXSx7Y2F0ZWdvcnk6b309cztpZihvLmlzSW52aXNpYmxlRm9ybWF0TWFyayljb250aW51ZTtsZXQgYz1PLmNoYXJTcGFjaW5nKyhlKzE9PT1pP3Q6MCksbD1zLndpZHRoO2EudmVydGljYWwmJihsPXMudm1ldHJpYz9zLnZtZXRyaWNbMF06LWwpO2xldCBoPWwqbjtpZihvLmlzV2hpdGVzcGFjZSl7aWYoYS52ZXJ0aWNhbCl7Yys9LWgrTy53b3JkU3BhY2luZztPLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwtYyl9ZWxzZXtjKz1oK08ud29yZFNwYWNpbmc7Ty50cmFuc2xhdGVUZXh0TWF0cml4KGMqTy50ZXh0SFNjYWxlLDApfXNhdmVMYXN0Q2hhcigiICIpO2NvbnRpbnVlfWlmKCFvLmlzWmVyb1dpZHRoRGlhY3JpdGljJiYhY29tcGFyZVdpdGhMYXN0UG9zaXRpb24oaCkpe2EudmVydGljYWw/Ty50cmFuc2xhdGVUZXh0TWF0cml4KDAsaCk6Ty50cmFuc2xhdGVUZXh0TWF0cml4KGgqTy50ZXh0SFNjYWxlLDApO2NvbnRpbnVlfWNvbnN0IHU9ZW5zdXJlVGV4dENvbnRlbnRJdGVtKCk7by5pc1plcm9XaWR0aERpYWNyaXRpYyYmKGg9MCk7aWYoYS52ZXJ0aWNhbCl7Ty50cmFuc2xhdGVUZXh0TWF0cml4KDAsaCk7aD1NYXRoLmFicyhoKTt1LmhlaWdodCs9aH1lbHNle2gqPU8udGV4dEhTY2FsZTtPLnRyYW5zbGF0ZVRleHRNYXRyaXgoaCwwKTt1LndpZHRoKz1ofWgmJih1LnByZXZUcmFuc2Zvcm09Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSk7Y29uc3QgZD1zLnVuaWNvZGU7c2F2ZUxhc3RDaGFyKGQpJiZ1LnN0ci5wdXNoKCIgIik7dS5zdHIucHVzaChkKTtjJiYoYS52ZXJ0aWNhbD9PLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwtYyk6Ty50cmFuc2xhdGVUZXh0TWF0cml4KGMqTy50ZXh0SFNjYWxlLDApKX19ZnVuY3Rpb24gYXBwZW5kRU9MKCl7cmVzZXRMYXN0Q2hhcnMoKTtpZihmLmluaXRpYWxpemVkKXtmLmhhc0VPTD0hMDtmbHVzaFRleHRDb250ZW50SXRlbSgpfWVsc2UgZC5pdGVtcy5wdXNoKHtzdHI6IiIsZGlyOiJsdHIiLHdpZHRoOjAsaGVpZ2h0OjAsdHJhbnNmb3JtOmdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCksZm9udE5hbWU6Ty5sb2FkZWROYW1lLGhhc0VPTDohMH0pfWZ1bmN0aW9uIGFkZEZha2VTcGFjZXMoZSx0LGEpe2lmKGEqZi5zcGFjZUluRmxvd01pbjw9ZSYmZTw9YSpmLnNwYWNlSW5GbG93TWF4KXtpZihmLmluaXRpYWxpemVkKXtyZXNldExhc3RDaGFycygpO2Yuc3RyLnB1c2goIiAiKX1yZXR1cm4hMX1jb25zdCByPWYuZm9udE5hbWU7bGV0IG49MDtpZihmLnZlcnRpY2FsKXtuPWU7ZT0wfWZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cmVzZXRMYXN0Q2hhcnMoKTtwdXNoV2hpdGVzcGFjZSh7d2lkdGg6TWF0aC5hYnMoZSksaGVpZ2h0Ok1hdGguYWJzKG4pLHRyYW5zZm9ybTp0fHxnZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpLGZvbnROYW1lOnJ9KTtyZXR1cm4hMH1mdW5jdGlvbiBmbHVzaFRleHRDb250ZW50SXRlbSgpe2lmKGYuaW5pdGlhbGl6ZWQmJmYuc3RyKXtmLnZlcnRpY2FsP2YudG90YWxIZWlnaHQrPWYuaGVpZ2h0KmYudGV4dEFkdmFuY2VTY2FsZTpmLnRvdGFsV2lkdGgrPWYud2lkdGgqZi50ZXh0QWR2YW5jZVNjYWxlO2QuaXRlbXMucHVzaChmdW5jdGlvbiBydW5CaWRpVHJhbnNmb3JtKGUpe2xldCB0PWUuc3RyLmpvaW4oIiIpO3V8fCh0PSgwLHIubm9ybWFsaXplVW5pY29kZSkodCkpO2NvbnN0IGE9KDAsYi5iaWRpKSh0LC0xLGUudmVydGljYWwpO3JldHVybntzdHI6YS5zdHIsZGlyOmEuZGlyLHdpZHRoOk1hdGguYWJzKGUudG90YWxXaWR0aCksaGVpZ2h0Ok1hdGguYWJzKGUudG90YWxIZWlnaHQpLHRyYW5zZm9ybTplLnRyYW5zZm9ybSxmb250TmFtZTplLmZvbnROYW1lLGhhc0VPTDplLmhhc0VPTH19KGYpKTtmLmluaXRpYWxpemVkPSExO2Yuc3RyLmxlbmd0aD0wfX1mdW5jdGlvbiBlbnF1ZXVlQ2h1bmsoZT0hMSl7Y29uc3QgdD1kLml0ZW1zLmxlbmd0aDtpZigwIT09dCYmIShlJiZ0PDEwKSl7by5lbnF1ZXVlKGQsdCk7ZC5pdGVtcz1bXTtkLnN0eWxlcz1PYmplY3QuY3JlYXRlKG51bGwpfX1jb25zdCBUPW5ldyBUaW1lU2xvdE1hbmFnZXI7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbiBwcm9taXNlQm9keShlLGYpe2NvbnN0IG5leHQ9ZnVuY3Rpb24odCl7ZW5xdWV1ZUNodW5rKCEwKTtQcm9taXNlLmFsbChbdCxvLnJlYWR5XSkudGhlbigoZnVuY3Rpb24oKXt0cnl7cHJvbWlzZUJvZHkoZSxmKX1jYXRjaChlKXtmKGUpfX0pLGYpfTt0LmVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtULnJlc2V0KCk7Y29uc3QgZz17fTtsZXQgcCxiPVtdO2Zvcig7IShwPVQuY2hlY2soKSk7KXtiLmxlbmd0aD0wO2cuYXJncz1iO2lmKCFGLnJlYWQoZykpYnJlYWs7Y29uc3QgZT1PO089bi5zdGF0ZTtjb25zdCBmPWcuZm47Yj1nLmFyZ3M7c3dpdGNoKDB8Zil7Y2FzZSByLk9QUy5zZXRGb250OnZhciB5PWJbMF0ubmFtZSxNPWJbMV07aWYoTy5mb250JiZ5PT09Ty5mb250TmFtZSYmTT09PU8uZm9udFNpemUpYnJlYWs7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtPLmZvbnROYW1lPXk7Ty5mb250U2l6ZT1NO25leHQoaGFuZGxlU2V0Rm9udCh5LG51bGwpKTtyZXR1cm47Y2FzZSByLk9QUy5zZXRUZXh0UmlzZTpPLnRleHRSaXNlPWJbMF07YnJlYWs7Y2FzZSByLk9QUy5zZXRIU2NhbGU6Ty50ZXh0SFNjYWxlPWJbMF0vMTAwO2JyZWFrO2Nhc2Ugci5PUFMuc2V0TGVhZGluZzpPLmxlYWRpbmc9YlswXTticmVhaztjYXNlIHIuT1BTLm1vdmVUZXh0Ok8udHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoYlswXSxiWzFdKTtPLnRleHRNYXRyaXg9Ty50ZXh0TGluZU1hdHJpeC5zbGljZSgpO2JyZWFrO2Nhc2Ugci5PUFMuc2V0TGVhZGluZ01vdmVUZXh0Ok8ubGVhZGluZz0tYlsxXTtPLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KGJbMF0sYlsxXSk7Ty50ZXh0TWF0cml4PU8udGV4dExpbmVNYXRyaXguc2xpY2UoKTticmVhaztjYXNlIHIuT1BTLm5leHRMaW5lOk8uY2FycmlhZ2VSZXR1cm4oKTticmVhaztjYXNlIHIuT1BTLnNldFRleHRNYXRyaXg6Ty5zZXRUZXh0TWF0cml4KGJbMF0sYlsxXSxiWzJdLGJbM10sYls0XSxiWzVdKTtPLnNldFRleHRMaW5lTWF0cml4KGJbMF0sYlsxXSxiWzJdLGJbM10sYls0XSxiWzVdKTt1cGRhdGVBZHZhbmNlU2NhbGUoKTticmVhaztjYXNlIHIuT1BTLnNldENoYXJTcGFjaW5nOk8uY2hhclNwYWNpbmc9YlswXTticmVhaztjYXNlIHIuT1BTLnNldFdvcmRTcGFjaW5nOk8ud29yZFNwYWNpbmc9YlswXTticmVhaztjYXNlIHIuT1BTLmJlZ2luVGV4dDpPLnRleHRNYXRyaXg9ci5JREVOVElUWV9NQVRSSVguc2xpY2UoKTtPLnRleHRMaW5lTWF0cml4PXIuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7YnJlYWs7Y2FzZSByLk9QUy5zaG93U3BhY2VkVGV4dDppZighbi5zdGF0ZS5mb250KXt3LmVuc3VyZVN0YXRlRm9udChuLnN0YXRlKTtjb250aW51ZX1jb25zdCBmPShPLmZvbnQudmVydGljYWw/MTotMSkqTy5mb250U2l6ZS8xZTMsZz1iWzBdO2ZvcihsZXQgZT0wLHQ9Zy5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1nW2VdO2lmKCJzdHJpbmciPT10eXBlb2YgdCl4LnB1c2godCk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIHQmJjAhPT10KXtjb25zdCBlPXguam9pbigiIik7eC5sZW5ndGg9MDtidWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6ZSxleHRyYVNwYWNpbmc6dCpmfSl9fWlmKHgubGVuZ3RoPjApe2NvbnN0IGU9eC5qb2luKCIiKTt4Lmxlbmd0aD0wO2J1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczplLGV4dHJhU3BhY2luZzowfSl9YnJlYWs7Y2FzZSByLk9QUy5zaG93VGV4dDppZighbi5zdGF0ZS5mb250KXt3LmVuc3VyZVN0YXRlRm9udChuLnN0YXRlKTtjb250aW51ZX1idWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6YlswXSxleHRyYVNwYWNpbmc6MH0pO2JyZWFrO2Nhc2Ugci5PUFMubmV4dExpbmVTaG93VGV4dDppZighbi5zdGF0ZS5mb250KXt3LmVuc3VyZVN0YXRlRm9udChuLnN0YXRlKTtjb250aW51ZX1PLmNhcnJpYWdlUmV0dXJuKCk7YnVpbGRUZXh0Q29udGVudEl0ZW0oe2NoYXJzOmJbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIHIuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OmlmKCFuLnN0YXRlLmZvbnQpe3cuZW5zdXJlU3RhdGVGb250KG4uc3RhdGUpO2NvbnRpbnVlfU8ud29yZFNwYWNpbmc9YlswXTtPLmNoYXJTcGFjaW5nPWJbMV07Ty5jYXJyaWFnZVJldHVybigpO2J1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczpiWzJdLGV4dHJhU3BhY2luZzowfSk7YnJlYWs7Y2FzZSByLk9QUy5wYWludFhPYmplY3Q6Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtDfHwoQz1hLmdldCgiWE9iamVjdCIpfHxpLkRpY3QuZW1wdHkpO3ZhciBEPWJbMF1pbnN0YW5jZW9mIGkuTmFtZSxFPWJbMF0ubmFtZTtpZihEJiZrLmdldEJ5TmFtZShFKSlicmVhaztuZXh0KG5ldyBQcm9taXNlKChmdW5jdGlvbihlLGQpe2lmKCFEKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTtsZXQgZj1DLmdldFJhdyhFKTtpZihmIGluc3RhbmNlb2YgaS5SZWYpe2lmKGsuZ2V0QnlSZWYoZikpe2UoKTtyZXR1cm59aWYody5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEoZix3LnBhZ2VJbmRleCkpe2UoKTtyZXR1cm59Zj1TLmZldGNoKGYpfWlmKCEoZiBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGJlIGEgc3RyZWFtIik7Y29uc3QgZz1mLmRpY3QuZ2V0KCJTdWJ0eXBlIik7aWYoIShnIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZSIpO2lmKCJGb3JtIiE9PWcubmFtZSl7ay5zZXQoRSxmLmRpY3Qub2JqSWQsITApO2UoKTtyZXR1cm59Y29uc3QgcD1uLnN0YXRlLmNsb25lKCksYj1uZXcgU3RhdGVNYW5hZ2VyKHApLHk9Zi5kaWN0LmdldEFycmF5KCJNYXRyaXgiKTtBcnJheS5pc0FycmF5KHkpJiY2PT09eS5sZW5ndGgmJmIudHJhbnNmb3JtKHkpO2VucXVldWVDaHVuaygpO2NvbnN0IHg9e2VucXVldWVJbnZva2VkOiExLGVucXVldWUoZSx0KXt0aGlzLmVucXVldWVJbnZva2VkPSEwO28uZW5xdWV1ZShlLHQpfSxnZXQgZGVzaXJlZFNpemUoKXtyZXR1cm4gby5kZXNpcmVkU2l6ZX0sZ2V0IHJlYWR5KCl7cmV0dXJuIG8ucmVhZHl9fTt3LmdldFRleHRDb250ZW50KHtzdHJlYW06Zix0YXNrOnQscmVzb3VyY2VzOmYuZGljdC5nZXQoIlJlc291cmNlcyIpfHxhLHN0YXRlTWFuYWdlcjpiLGluY2x1ZGVNYXJrZWRDb250ZW50OnMsc2luazp4LHNlZW5TdHlsZXM6Yyx2aWV3Qm94OmwsbWFya2VkQ29udGVudERhdGE6aCxkaXNhYmxlTm9ybWFsaXphdGlvbjp1fSkudGhlbigoZnVuY3Rpb24oKXt4LmVucXVldWVJbnZva2VkfHxrLnNldChFLGYuZGljdC5vYmpJZCwhMCk7ZSgpfSksZCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighdy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgWE9iamVjdDogIiR7ZX0iLmApfX0pKSk7cmV0dXJuO2Nhc2Ugci5PUFMuc2V0R1N0YXRlOkQ9YlswXWluc3RhbmNlb2YgaS5OYW1lO0U9YlswXS5uYW1lO2lmKEQmJnYuZ2V0QnlOYW1lKEUpKWJyZWFrO25leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIUQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7Y29uc3Qgbj1hLmdldCgiRXh0R1N0YXRlIik7aWYoIShuIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7Y29uc3Qgcz1uLmdldChFKTtpZighKHMgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtjb25zdCBvPXMuZ2V0KCJGb250Iik7aWYobyl7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtPLmZvbnROYW1lPW51bGw7Ty5mb250U2l6ZT1vWzFdO2hhbmRsZVNldEZvbnQobnVsbCxvWzBdKS50aGVuKGUsdCl9ZWxzZXt2LnNldChFLHMub2JqSWQsITApO2UoKX19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighdy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJHtlfSIuYCl9fSkpKTtyZXR1cm47Y2FzZSByLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQ6Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtpZihzKXtoLmxldmVsKys7ZC5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnQiLHRhZzpiWzBdaW5zdGFuY2VvZiBpLk5hbWU/YlswXS5uYW1lOm51bGx9KX1icmVhaztjYXNlIHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzOmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7aWYocyl7aC5sZXZlbCsrO2xldCBlPW51bGw7YlsxXWluc3RhbmNlb2YgaS5EaWN0JiYoZT1iWzFdLmdldCgiTUNJRCIpKTtkLml0ZW1zLnB1c2goe3R5cGU6ImJlZ2luTWFya2VkQ29udGVudFByb3BzIixpZDpOdW1iZXIuaXNJbnRlZ2VyKGUpP2Ake3cuaWRGYWN0b3J5LmdldFBhZ2VPYmpJZCgpfV9tYyR7ZX1gOm51bGwsdGFnOmJbMF1pbnN0YW5jZW9mIGkuTmFtZT9iWzBdLm5hbWU6bnVsbH0pfWJyZWFrO2Nhc2Ugci5PUFMuZW5kTWFya2VkQ29udGVudDpmbHVzaFRleHRDb250ZW50SXRlbSgpO2lmKHMpe2lmKDA9PT1oLmxldmVsKWJyZWFrO2gubGV2ZWwtLTtkLml0ZW1zLnB1c2goe3R5cGU6ImVuZE1hcmtlZENvbnRlbnQifSl9YnJlYWs7Y2FzZSByLk9QUy5yZXN0b3JlOiFlfHxlLmZvbnQ9PT1PLmZvbnQmJmUuZm9udFNpemU9PT1PLmZvbnRTaXplJiZlLmZvbnROYW1lPT09Ty5mb250TmFtZXx8Zmx1c2hUZXh0Q29udGVudEl0ZW0oKX1pZihkLml0ZW1zLmxlbmd0aD49by5kZXNpcmVkU2l6ZSl7cD0hMDticmVha319aWYocCluZXh0KFIpO2Vsc2V7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtlbnF1ZXVlQ2h1bmsoKTtlKCl9fSkpLmNhdGNoKChlPT57aWYoIShlIGluc3RhbmNlb2Ygci5BYm9ydEV4Y2VwdGlvbikpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7KDAsci53YXJuKShgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nICIke3QubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO2VucXVldWVDaHVuaygpfX0pKX1leHRyYWN0RGF0YVN0cnVjdHVyZXMoZSx0LGEpe2NvbnN0IG49dGhpcy54cmVmO2xldCBzO2NvbnN0IGw9dGhpcy5yZWFkVG9Vbmljb2RlKGEudG9Vbmljb2RlfHxlLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKSk7aWYoYS5jb21wb3NpdGUpe2NvbnN0IHQ9ZS5nZXQoIkNJRFN5c3RlbUluZm8iKTt0IGluc3RhbmNlb2YgaS5EaWN0JiYoYS5jaWRTeXN0ZW1JbmZvPXtyZWdpc3RyeTooMCxyLnN0cmluZ1RvUERGU3RyaW5nKSh0LmdldCgiUmVnaXN0cnkiKSksb3JkZXJpbmc6KDAsci5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIk9yZGVyaW5nIikpLHN1cHBsZW1lbnQ6dC5nZXQoIlN1cHBsZW1lbnQiKX0pO3RyeXtjb25zdCB0PWUuZ2V0KCJDSURUb0dJRE1hcCIpO3QgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0mJihzPXQuZ2V0Qnl0ZXMoKSl9Y2F0Y2goZSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxyLndhcm4pKGBleHRyYWN0RGF0YVN0cnVjdHVyZXMgLSBpZ25vcmluZyBDSURUb0dJRE1hcCBkYXRhOiAiJHtlfSIuYCl9fWNvbnN0IGg9W107bGV0IHUsZD1udWxsO2lmKGUuaGFzKCJFbmNvZGluZyIpKXt1PWUuZ2V0KCJFbmNvZGluZyIpO2lmKHUgaW5zdGFuY2VvZiBpLkRpY3Qpe2Q9dS5nZXQoIkJhc2VFbmNvZGluZyIpO2Q9ZCBpbnN0YW5jZW9mIGkuTmFtZT9kLm5hbWU6bnVsbDtpZih1LmhhcygiRGlmZmVyZW5jZXMiKSl7Y29uc3QgZT11LmdldCgiRGlmZmVyZW5jZXMiKTtsZXQgdD0wO2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGU9bi5mZXRjaElmUmVmKGEpO2lmKCJudW1iZXIiPT10eXBlb2YgZSl0PWU7ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBpLk5hbWUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIGVudHJ5IGluICdEaWZmZXJlbmNlcycgYXJyYXk6ICR7ZX1gKTtoW3QrK109ZS5uYW1lfX19fWVsc2UgaWYodSBpbnN0YW5jZW9mIGkuTmFtZSlkPXUubmFtZTtlbHNle2NvbnN0IGU9IkVuY29kaW5nIGlzIG5vdCBhIE5hbWUgbm9yIGEgRGljdCI7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoZSk7KDAsci53YXJuKShlKX0iTWFjUm9tYW5FbmNvZGluZyIhPT1kJiYiTWFjRXhwZXJ0RW5jb2RpbmciIT09ZCYmIldpbkFuc2lFbmNvZGluZyIhPT1kJiYoZD1udWxsKX1jb25zdCBmPSFhLmZpbGV8fGEuaXNJbnRlcm5hbEZvbnQsZz0oMCxjLmdldFN5bWJvbHNGb250cykoKVthLm5hbWVdO2QmJmYmJmcmJihkPW51bGwpO2lmKGQpYS5kZWZhdWx0RW5jb2Rpbmc9KDAsby5nZXRFbmNvZGluZykoZCk7ZWxzZXtjb25zdCBlPSEhKGEuZmxhZ3MmUy5Gb250RmxhZ3MuU3ltYm9saWMpLHQ9ISEoYS5mbGFncyZTLkZvbnRGbGFncy5Ob25zeW1ib2xpYyk7dT1vLlN0YW5kYXJkRW5jb2Rpbmc7IlRydWVUeXBlIiE9PWEudHlwZXx8dHx8KHU9by5XaW5BbnNpRW5jb2RpbmcpO2lmKGV8fGcpe3U9by5NYWNSb21hbkVuY29kaW5nO2YmJigvU3ltYm9sL2kudGVzdChhLm5hbWUpP3U9by5TeW1ib2xTZXRFbmNvZGluZzovRGluZ2JhdHMvaS50ZXN0KGEubmFtZSk/dT1vLlphcGZEaW5nYmF0c0VuY29kaW5nOi9XaW5nZGluZ3MvaS50ZXN0KGEubmFtZSkmJih1PW8uV2luQW5zaUVuY29kaW5nKSl9YS5kZWZhdWx0RW5jb2Rpbmc9dX1hLmRpZmZlcmVuY2VzPWg7YS5iYXNlRW5jb2RpbmdOYW1lPWQ7YS5oYXNFbmNvZGluZz0hIWR8fGgubGVuZ3RoPjA7YS5kaWN0PWU7cmV0dXJuIGwudGhlbigoZT0+e2EudG9Vbmljb2RlPWU7cmV0dXJuIHRoaXMuYnVpbGRUb1VuaWNvZGUoYSl9KSkudGhlbigoZT0+e2EudG9Vbmljb2RlPWU7cyYmKGEuY2lkVG9HaWRNYXA9dGhpcy5yZWFkQ2lkVG9HaWRNYXAocyxlKSk7cmV0dXJuIGF9KSl9X3NpbXBsZUZvbnRUb1VuaWNvZGUoZSx0PSExKXsoMCxyLmFzc2VydCkoIWUuY29tcG9zaXRlLCJNdXN0IGJlIGEgc2ltcGxlIGZvbnQuIik7Y29uc3QgYT1bXSxuPWUuZGVmYXVsdEVuY29kaW5nLnNsaWNlKCksaT1lLmJhc2VFbmNvZGluZ05hbWUscz1lLmRpZmZlcmVuY2VzO2Zvcihjb25zdCBlIGluIHMpe2NvbnN0IHQ9c1tlXTsiLm5vdGRlZiIhPT10JiYobltlXT10KX1jb25zdCBjPSgwLEMuZ2V0R2x5cGhzVW5pY29kZSkoKTtmb3IoY29uc3QgciBpbiBuKXtsZXQgcz1uW3JdO2lmKCIiPT09cyljb250aW51ZTtsZXQgbD1jW3NdO2lmKHZvaWQgMCE9PWwpe2Fbcl09U3RyaW5nLmZyb21DaGFyQ29kZShsKTtjb250aW51ZX1sZXQgaD0wO3N3aXRjaChzWzBdKXtjYXNlIkciOjM9PT1zLmxlbmd0aCYmKGg9cGFyc2VJbnQocy5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlImciOjU9PT1zLmxlbmd0aCYmKGg9cGFyc2VJbnQocy5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlIkMiOmNhc2UiYyI6aWYocy5sZW5ndGg+PTMmJnMubGVuZ3RoPD00KXtjb25zdCBhPXMuc3Vic3RyaW5nKDEpO2lmKHQpe2g9cGFyc2VJbnQoYSwxNik7YnJlYWt9aD0rYTtpZihOdW1iZXIuaXNOYU4oaCkmJk51bWJlci5pc0ludGVnZXIocGFyc2VJbnQoYSwxNikpKXJldHVybiB0aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKGUsITApfWJyZWFrO2Nhc2UidSI6bD0oMCx2LmdldFVuaWNvZGVGb3JHbHlwaCkocyxjKTstMSE9PWwmJihoPWwpO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKHMpe2Nhc2UiZl9oIjpjYXNlImZfdCI6Y2FzZSJUX2giOmFbcl09cy5yZXBsYWNlQWxsKCJfIiwiIik7Y29udGludWV9fWlmKGg+MCYmaDw9MTExNDExMSYmTnVtYmVyLmlzSW50ZWdlcihoKSl7aWYoaSYmaD09PStyKXtjb25zdCBlPSgwLG8uZ2V0RW5jb2RpbmcpKGkpO2lmKGUmJihzPWVbcl0pKXthW3JdPVN0cmluZy5mcm9tQ2hhckNvZGUoY1tzXSk7Y29udGludWV9fWFbcl09U3RyaW5nLmZyb21Db2RlUG9pbnQoaCl9fXJldHVybiBhfWFzeW5jIGJ1aWxkVG9Vbmljb2RlKGUpe2UuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXA9ZS50b1VuaWNvZGU/Lmxlbmd0aD4wO2lmKGUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXApeyFlLmNvbXBvc2l0ZSYmZS5oYXNFbmNvZGluZyYmKGUuZmFsbGJhY2tUb1VuaWNvZGU9dGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShlKSk7cmV0dXJuIGUudG9Vbmljb2RlfWlmKCFlLmNvbXBvc2l0ZSlyZXR1cm4gbmV3IHUuVG9Vbmljb2RlTWFwKHRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUoZSkpO2lmKGUuY29tcG9zaXRlJiYoZS5jTWFwLmJ1aWx0SW5DTWFwJiYhKGUuY01hcCBpbnN0YW5jZW9mIG4uSWRlbnRpdHlDTWFwKXx8IkFkb2JlIj09PWUuY2lkU3lzdGVtSW5mby5yZWdpc3RyeSYmKCJHQjEiPT09ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nfHwiQ05TMSI9PT1lLmNpZFN5c3RlbUluZm8ub3JkZXJpbmd8fCJKYXBhbjEiPT09ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nfHwiS29yZWExIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZykpKXtjb25zdHtyZWdpc3RyeTp0LG9yZGVyaW5nOmF9PWUuY2lkU3lzdGVtSW5mbyxzPWkuTmFtZS5nZXQoYCR7dH0tJHthfS1VQ1MyYCksbz1hd2FpdCBuLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6cyxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KSxjPVtdLGw9W107ZS5jTWFwLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7aWYodD42NTUzNSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNSIpO2NvbnN0IGE9by5sb29rdXAodCk7aWYoYSl7bC5sZW5ndGg9MDtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDtlKz0yKWwucHVzaCgoYS5jaGFyQ29kZUF0KGUpPDw4KSthLmNoYXJDb2RlQXQoZSsxKSk7Y1tlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmwpfX0pKTtyZXR1cm4gbmV3IHUuVG9Vbmljb2RlTWFwKGMpfXJldHVybiBuZXcgdS5JZGVudGl0eVRvVW5pY29kZU1hcChlLmZpcnN0Q2hhcixlLmxhc3RDaGFyKX1yZWFkVG9Vbmljb2RlKGUpe3JldHVybiBlP2UgaW5zdGFuY2VvZiBpLk5hbWU/bi5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmUsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBuLklkZW50aXR5Q01hcD9uZXcgdS5JZGVudGl0eVRvVW5pY29kZU1hcCgwLDY1NTM1KTpuZXcgdS5Ub1VuaWNvZGVNYXAoZS5nZXRNYXAoKSl9KSk6ZSBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbT9uLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2Ygbi5JZGVudGl0eUNNYXApcmV0dXJuIG5ldyB1LklkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpO2NvbnN0IHQ9bmV3IEFycmF5KGUubGVuZ3RoKTtlLmZvckVhY2goKGZ1bmN0aW9uKGUsYSl7aWYoIm51bWJlciI9PXR5cGVvZiBhKXt0W2VdPVN0cmluZy5mcm9tQ29kZVBvaW50KGEpO3JldHVybn1jb25zdCByPVtdO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSs9Mil7Y29uc3QgdD1hLmNoYXJDb2RlQXQoZSk8PDh8YS5jaGFyQ29kZUF0KGUrMSk7aWYoNTUyOTYhPSg2MzQ4OCZ0KSl7ci5wdXNoKHQpO2NvbnRpbnVlfWUrPTI7Y29uc3Qgbj1hLmNoYXJDb2RlQXQoZSk8PDh8YS5jaGFyQ29kZUF0KGUrMSk7ci5wdXNoKCgoMTAyMyZ0KTw8MTApKygxMDIzJm4pKzY1NTM2KX10W2VdPVN0cmluZy5mcm9tQ29kZVBvaW50KC4uLnIpfSkpO3JldHVybiBuZXcgdS5Ub1VuaWNvZGVNYXAodCl9KSwoZT0+e2lmKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKXJldHVybiBudWxsO2lmKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpeygwLHIud2FybikoYHJlYWRUb1VuaWNvZGUgLSBpZ25vcmluZyBUb1VuaWNvZGUgZGF0YTogIiR7ZX0iLmApO3JldHVybiBudWxsfXRocm93IGV9KSk6UHJvbWlzZS5yZXNvbHZlKG51bGwpOlByb21pc2UucmVzb2x2ZShudWxsKX1yZWFkQ2lkVG9HaWRNYXAoZSx0KXtjb25zdCBhPVtdO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7Y29uc3Qgbj1lW3IrK108PDh8ZVtyXSxpPXI+PjE7KDAhPT1ufHx0LmhhcyhpKSkmJihhW2ldPW4pfXJldHVybiBhfWV4dHJhY3RXaWR0aHMoZSx0LGEpe2NvbnN0IHI9dGhpcy54cmVmO2xldCBuPVtdLHM9MDtjb25zdCBvPVtdO2xldCBjLGwsaCx1LGQsZixnLHA7aWYoYS5jb21wb3NpdGUpe3M9ZS5oYXMoIkRXIik/ZS5nZXQoIkRXIik6MWUzO3A9ZS5nZXQoIlciKTtpZihwKWZvcihsPTAsaD1wLmxlbmd0aDtsPGg7bCsrKXtmPXIuZmV0Y2hJZlJlZihwW2wrK10pO2c9ci5mZXRjaElmUmVmKHBbbF0pO2lmKEFycmF5LmlzQXJyYXkoZykpZm9yKHU9MCxkPWcubGVuZ3RoO3U8ZDt1KyspbltmKytdPXIuZmV0Y2hJZlJlZihnW3VdKTtlbHNle2NvbnN0IGU9ci5mZXRjaElmUmVmKHBbKytsXSk7Zm9yKHU9Zjt1PD1nO3UrKyluW3VdPWV9fWlmKGEudmVydGljYWwpe2xldCB0PWUuZ2V0QXJyYXkoIkRXMiIpfHxbODgwLC0xZTNdO2M9W3RbMV0sLjUqcyx0WzBdXTt0PWUuZ2V0KCJXMiIpO2lmKHQpZm9yKGw9MCxoPXQubGVuZ3RoO2w8aDtsKyspe2Y9ci5mZXRjaElmUmVmKHRbbCsrXSk7Zz1yLmZldGNoSWZSZWYodFtsXSk7aWYoQXJyYXkuaXNBcnJheShnKSlmb3IodT0wLGQ9Zy5sZW5ndGg7dTxkO3UrKylvW2YrK109W3IuZmV0Y2hJZlJlZihnW3UrK10pLHIuZmV0Y2hJZlJlZihnW3UrK10pLHIuZmV0Y2hJZlJlZihnW3VdKV07ZWxzZXtjb25zdCBlPVtyLmZldGNoSWZSZWYodFsrK2xdKSxyLmZldGNoSWZSZWYodFsrK2xdKSxyLmZldGNoSWZSZWYodFsrK2xdKV07Zm9yKHU9Zjt1PD1nO3UrKylvW3VdPWV9fX19ZWxzZXtjb25zdCBvPWEuZmlyc3RDaGFyO3A9ZS5nZXQoIldpZHRocyIpO2lmKHApe3U9bztmb3IobD0wLGg9cC5sZW5ndGg7bDxoO2wrKyluW3UrK109ci5mZXRjaElmUmVmKHBbbF0pO3M9cGFyc2VGbG9hdCh0LmdldCgiTWlzc2luZ1dpZHRoIikpfHwwfWVsc2V7Y29uc3QgdD1lLmdldCgiQmFzZUZvbnQiKTtpZih0IGluc3RhbmNlb2YgaS5OYW1lKXtjb25zdCBlPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKHQubmFtZSk7bj10aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKGUud2lkdGhzLGEpO3M9ZS5kZWZhdWx0V2lkdGh9fX1sZXQgbT0hMCxiPXM7Zm9yKGNvbnN0IGUgaW4gbil7Y29uc3QgdD1uW2VdO2lmKHQpaWYoYil7aWYoYiE9PXQpe209ITE7YnJlYWt9fWVsc2UgYj10fW0/YS5mbGFnc3w9Uy5Gb250RmxhZ3MuRml4ZWRQaXRjaDphLmZsYWdzJj1+Uy5Gb250RmxhZ3MuRml4ZWRQaXRjaDthLmRlZmF1bHRXaWR0aD1zO2Eud2lkdGhzPW47YS5kZWZhdWx0Vk1ldHJpY3M9YzthLnZtZXRyaWNzPW99aXNTZXJpZkZvbnQoZSl7Y29uc3QgdD1lLnNwbGl0KCItIilbMF07cmV0dXJuIHQgaW4oMCxjLmdldFNlcmlmRm9udHMpKCl8fC9zZXJpZi9naS50ZXN0KHQpfWdldEJhc2VGb250TWV0cmljcyhlKXtsZXQgdD0wLGE9T2JqZWN0LmNyZWF0ZShudWxsKSxyPSExO2xldCBuPSgwLGMuZ2V0U3RkRm9udE1hcCkoKVtlXXx8ZTtjb25zdCBpPSgwLGsuZ2V0TWV0cmljcykoKTtuIGluIGl8fChuPXRoaXMuaXNTZXJpZkZvbnQoZSk/IlRpbWVzLVJvbWFuIjoiSGVsdmV0aWNhIik7Y29uc3Qgcz1pW25dO2lmKCJudW1iZXIiPT10eXBlb2Ygcyl7dD1zO3I9ITB9ZWxzZSBhPXMoKTtyZXR1cm57ZGVmYXVsdFdpZHRoOnQsbW9ub3NwYWNlOnIsd2lkdGhzOmF9fWJ1aWxkQ2hhckNvZGVUb1dpZHRoKGUsdCl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKG51bGwpLHI9dC5kaWZmZXJlbmNlcyxuPXQuZGVmYXVsdEVuY29kaW5nO2ZvcihsZXQgdD0wO3Q8MjU2O3QrKyl0IGluIHImJmVbclt0XV0/YVt0XT1lW3JbdF1dOnQgaW4gbiYmZVtuW3RdXSYmKGFbdF09ZVtuW3RdXSk7cmV0dXJuIGF9cHJlRXZhbHVhdGVGb250KGUpe2NvbnN0IHQ9ZTtsZXQgYT1lLmdldCgiU3VidHlwZSIpO2lmKCEoYSBpbnN0YW5jZW9mIGkuTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBTdWJ0eXBlIik7bGV0IG4scyxvPSExO2lmKCJUeXBlMCI9PT1hLm5hbWUpe2NvbnN0IHQ9ZS5nZXQoIkRlc2NlbmRhbnRGb250cyIpO2lmKCF0KXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnRzIGFyZSBub3Qgc3BlY2lmaWVkIik7aWYoISgoZT1BcnJheS5pc0FycmF5KHQpP3RoaXMueHJlZi5mZXRjaElmUmVmKHRbMF0pOnQpaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnQgaXMgbm90IGEgZGljdGlvbmFyeS4iKTthPWUuZ2V0KCJTdWJ0eXBlIik7aWYoIShhIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IFN1YnR5cGUiKTtvPSEwfWNvbnN0IGM9ZS5nZXQoIkZpcnN0Q2hhciIpfHwwLGw9ZS5nZXQoIkxhc3RDaGFyIil8fChvPzY1NTM1OjI1NSksaD1lLmdldCgiRm9udERlc2NyaXB0b3IiKTtpZihoKXtuPW5ldyBPLk11cm11ckhhc2gzXzY0O2NvbnN0IGE9dC5nZXRSYXcoIkVuY29kaW5nIik7aWYoYSBpbnN0YW5jZW9mIGkuTmFtZSluLnVwZGF0ZShhLm5hbWUpO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIGkuUmVmKW4udXBkYXRlKGEudG9TdHJpbmcoKSk7ZWxzZSBpZihhIGluc3RhbmNlb2YgaS5EaWN0KWZvcihjb25zdCBlIG9mIGEuZ2V0UmF3VmFsdWVzKCkpaWYoZSBpbnN0YW5jZW9mIGkuTmFtZSluLnVwZGF0ZShlLm5hbWUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGkuUmVmKW4udXBkYXRlKGUudG9TdHJpbmcoKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCB0PWUubGVuZ3RoLGE9bmV3IEFycmF5KHQpO2ZvcihsZXQgcj0wO3I8dDtyKyspe2NvbnN0IHQ9ZVtyXTt0IGluc3RhbmNlb2YgaS5OYW1lP2Fbcl09dC5uYW1lOigibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBpLlJlZikmJihhW3JdPXQudG9TdHJpbmcoKSl9bi51cGRhdGUoYS5qb2luKCkpfW4udXBkYXRlKGAke2N9LSR7bH1gKTtzPWUuZ2V0KCJUb1VuaWNvZGUiKXx8dC5nZXQoIlRvVW5pY29kZSIpO2lmKHMgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pe2NvbnN0IGU9cy5zdHJ8fHMsdD1lLmJ1ZmZlcj9uZXcgVWludDhBcnJheShlLmJ1ZmZlci5idWZmZXIsMCxlLmJ1ZmZlckxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoZS5ieXRlcy5idWZmZXIsZS5zdGFydCxlLmVuZC1lLnN0YXJ0KTtuLnVwZGF0ZSh0KX1lbHNlIHMgaW5zdGFuY2VvZiBpLk5hbWUmJm4udXBkYXRlKHMubmFtZSk7Y29uc3Qgcj1lLmdldCgiV2lkdGhzIil8fHQuZ2V0KCJXaWR0aHMiKTtpZihBcnJheS5pc0FycmF5KHIpKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIHIpKCJudW1iZXIiPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIGkuUmVmKSYmZS5wdXNoKHQudG9TdHJpbmcoKSk7bi51cGRhdGUoZS5qb2luKCkpfWlmKG8pe24udXBkYXRlKCJjb21wb3NpdGVGb250Iik7Y29uc3QgYT1lLmdldCgiVyIpfHx0LmdldCgiVyIpO2lmKEFycmF5LmlzQXJyYXkoYSkpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgYSlpZigibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBpLlJlZillLnB1c2godC50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IGE9W107Zm9yKGNvbnN0IGUgb2YgdCkoIm51bWJlciI9PXR5cGVvZiBlfHxlIGluc3RhbmNlb2YgaS5SZWYpJiZhLnB1c2goZS50b1N0cmluZygpKTtlLnB1c2goYFske2Euam9pbigpfV1gKX1uLnVwZGF0ZShlLmpvaW4oKSl9Y29uc3Qgcj1lLmdldFJhdygiQ0lEVG9HSURNYXAiKXx8dC5nZXRSYXcoIkNJRFRvR0lETWFwIik7ciBpbnN0YW5jZW9mIGkuTmFtZT9uLnVwZGF0ZShyLm5hbWUpOnIgaW5zdGFuY2VvZiBpLlJlZj9uLnVwZGF0ZShyLnRvU3RyaW5nKCkpOnIgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0mJm4udXBkYXRlKHIucGVla0J5dGVzKCkpfX1yZXR1cm57ZGVzY3JpcHRvcjpoLGRpY3Q6ZSxiYXNlRGljdDp0LGNvbXBvc2l0ZTpvLHR5cGU6YS5uYW1lLGZpcnN0Q2hhcjpjLGxhc3RDaGFyOmwsdG9Vbmljb2RlOnMsaGFzaDpuP24uaGV4ZGlnZXN0KCk6IiJ9fWFzeW5jIHRyYW5zbGF0ZUZvbnQoe2Rlc2NyaXB0b3I6ZSxkaWN0OnQsYmFzZURpY3Q6YSxjb21wb3NpdGU6byx0eXBlOmwsZmlyc3RDaGFyOnUsbGFzdENoYXI6ZCx0b1VuaWNvZGU6Zixjc3NGb250SW5mbzpnfSl7Y29uc3QgbT0iVHlwZTMiPT09bDtsZXQgYjtpZighZSl7aWYoIW0pe2xldCBlPXQuZ2V0KCJCYXNlRm9udCIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkJhc2UgZm9udCBpcyBub3Qgc3BlY2lmaWVkIik7ZT1lLm5hbWUucmVwbGFjZUFsbCgvWyxfXS9nLCItIik7Y29uc3Qgbj10aGlzLmdldEJhc2VGb250TWV0cmljcyhlKSxvPWUuc3BsaXQoIi0iKVswXSxoPSh0aGlzLmlzU2VyaWZGb250KG8pP1MuRm9udEZsYWdzLlNlcmlmOjApfChuLm1vbm9zcGFjZT9TLkZvbnRGbGFncy5GaXhlZFBpdGNoOjApfCgoMCxjLmdldFN5bWJvbHNGb250cykoKVtvXT9TLkZvbnRGbGFncy5TeW1ib2xpYzpTLkZvbnRGbGFncy5Ob25zeW1ib2xpYyk7Yj17dHlwZTpsLG5hbWU6ZSxsb2FkZWROYW1lOmEubG9hZGVkTmFtZSxzeXN0ZW1Gb250SW5mbzpudWxsLHdpZHRoczpuLndpZHRocyxkZWZhdWx0V2lkdGg6bi5kZWZhdWx0V2lkdGgsaXNTaW11bGF0ZWRGbGFnczohMCxmbGFnczpoLGZpcnN0Q2hhcjp1LGxhc3RDaGFyOmQsdG9Vbmljb2RlOmYseEhlaWdodDowLGNhcEhlaWdodDowLGl0YWxpY0FuZ2xlOjAsaXNUeXBlM0ZvbnQ6bX07Y29uc3QgZz10LmdldCgiV2lkdGhzIikscD0oMCxjLmdldFN0YW5kYXJkRm9udE5hbWUpKGUpO2xldCB5PW51bGw7aWYocCl7eT1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShwKTtiLmlzSW50ZXJuYWxGb250PSEheX0hYi5pc0ludGVybmFsRm9udCYmdGhpcy5vcHRpb25zLnVzZVN5c3RlbUZvbnRzJiYoYi5zeXN0ZW1Gb250SW5mbz0oMCx4LmdldEZvbnRTdWJzdGl0dXRpb24pKHRoaXMuc3lzdGVtRm9udENhY2hlLHRoaXMuaWRGYWN0b3J5LHRoaXMub3B0aW9ucy5zdGFuZGFyZEZvbnREYXRhVXJsLGUscCkpO3JldHVybiB0aGlzLmV4dHJhY3REYXRhU3RydWN0dXJlcyh0LHQsYikudGhlbigodD0+e2lmKGcpe2NvbnN0IGU9W107bGV0IGE9dTtmb3IoY29uc3QgdCBvZiBnKWVbYSsrXT10aGlzLnhyZWYuZmV0Y2hJZlJlZih0KTt0LndpZHRocz1lfWVsc2UgdC53aWR0aHM9dGhpcy5idWlsZENoYXJDb2RlVG9XaWR0aChuLndpZHRocyx0KTtyZXR1cm4gbmV3IHMuRm9udChlLHksdCl9KSl9KGU9bmV3IGkuRGljdChudWxsKSkuc2V0KCJGb250TmFtZSIsaS5OYW1lLmdldChsKSk7ZS5zZXQoIkZvbnRCQm94Iix0LmdldEFycmF5KCJGb250QkJveCIpfHxbMCwwLDAsMF0pfWxldCB5PWUuZ2V0KCJGb250TmFtZSIpLHc9dC5nZXQoIkJhc2VGb250Iik7InN0cmluZyI9PXR5cGVvZiB5JiYoeT1pLk5hbWUuZ2V0KHkpKTsic3RyaW5nIj09dHlwZW9mIHcmJih3PWkuTmFtZS5nZXQodykpO2NvbnN0IEM9eT8ubmFtZSxrPXc/Lm5hbWU7aWYoIW0mJkMhPT1rKXsoMCxyLmluZm8pKGBUaGUgRm9udERlc2NyaXB0b3IncyBGb250TmFtZSBpcyAiJHtDfSIgYnV0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgRm9udCdzIEJhc2VGb250ICIke2t9Ii5gKTtDJiZrJiYoay5zdGFydHNXaXRoKEMpfHwhKDAsYy5pc0tub3duRm9udE5hbWUpKEMpJiYoMCxjLmlzS25vd25Gb250TmFtZSkoaykpJiYoeT1udWxsKX15fHw9dztpZighKHkgaW5zdGFuY2VvZiBpLk5hbWUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJpbnZhbGlkIGZvbnQgbmFtZSIpO2xldCB2LEYsTyxULE07dHJ5e3Y9ZS5nZXQoIkZvbnRGaWxlIiwiRm9udEZpbGUyIiwiRm9udEZpbGUzIil9Y2F0Y2goZSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxyLndhcm4pKGB0cmFuc2xhdGVGb250IC0gZmV0Y2hpbmcgIiR7eS5uYW1lfSIgZm9udCBmaWxlOiAiJHtlfSIuYCk7dj1uZXcgcC5OdWxsU3RyZWFtfWxldCBEPSExLEU9bnVsbCxOPW51bGw7aWYodil7aWYodi5kaWN0KXtjb25zdCBlPXYuZGljdC5nZXQoIlN1YnR5cGUiKTtlIGluc3RhbmNlb2YgaS5OYW1lJiYoRj1lLm5hbWUpO089di5kaWN0LmdldCgiTGVuZ3RoMSIpO1Q9di5kaWN0LmdldCgiTGVuZ3RoMiIpO009di5kaWN0LmdldCgiTGVuZ3RoMyIpfX1lbHNlIGlmKGcpe2NvbnN0IGU9KDAsaC5nZXRYZmFGb250TmFtZSkoeS5uYW1lKTtpZihlKXtnLmZvbnRGYW1pbHk9YCR7Zy5mb250RmFtaWx5fS1QZGZKUy1YRkFgO2cubWV0cmljcz1lLm1ldHJpY3N8fG51bGw7RT1lLmZhY3RvcnN8fG51bGw7dj1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShlLm5hbWUpO0Q9ISF2O2E9dD0oMCxoLmdldFhmYUZvbnREaWN0KSh5Lm5hbWUpO289ITB9fWVsc2UgaWYoIW0pe2NvbnN0IGU9KDAsYy5nZXRTdGFuZGFyZEZvbnROYW1lKSh5Lm5hbWUpO2lmKGUpe3Y9YXdhaXQgdGhpcy5mZXRjaFN0YW5kYXJkRm9udERhdGEoZSk7RD0hIXZ9IUQmJnRoaXMub3B0aW9ucy51c2VTeXN0ZW1Gb250cyYmKE49KDAseC5nZXRGb250U3Vic3RpdHV0aW9uKSh0aGlzLnN5c3RlbUZvbnRDYWNoZSx0aGlzLmlkRmFjdG9yeSx0aGlzLm9wdGlvbnMuc3RhbmRhcmRGb250RGF0YVVybCx5Lm5hbWUsZSkpfWI9e3R5cGU6bCxuYW1lOnkubmFtZSxzdWJ0eXBlOkYsZmlsZTp2LGxlbmd0aDE6TyxsZW5ndGgyOlQsbGVuZ3RoMzpNLGlzSW50ZXJuYWxGb250OkQsbG9hZGVkTmFtZTphLmxvYWRlZE5hbWUsY29tcG9zaXRlOm8sZml4ZWRQaXRjaDohMSxmb250TWF0cml4OnQuZ2V0QXJyYXkoIkZvbnRNYXRyaXgiKXx8ci5GT05UX0lERU5USVRZX01BVFJJWCxmaXJzdENoYXI6dSxsYXN0Q2hhcjpkLHRvVW5pY29kZTpmLGJib3g6ZS5nZXRBcnJheSgiRm9udEJCb3giKXx8dC5nZXRBcnJheSgiRm9udEJCb3giKSxhc2NlbnQ6ZS5nZXQoIkFzY2VudCIpLGRlc2NlbnQ6ZS5nZXQoIkRlc2NlbnQiKSx4SGVpZ2h0OmUuZ2V0KCJYSGVpZ2h0Iil8fDAsY2FwSGVpZ2h0OmUuZ2V0KCJDYXBIZWlnaHQiKXx8MCxmbGFnczplLmdldCgiRmxhZ3MiKSxpdGFsaWNBbmdsZTplLmdldCgiSXRhbGljQW5nbGUiKXx8MCxpc1R5cGUzRm9udDptLGNzc0ZvbnRJbmZvOmcsc2NhbGVGYWN0b3JzOkUsc3lzdGVtRm9udEluZm86Tn07aWYobyl7Y29uc3QgZT1hLmdldCgiRW5jb2RpbmciKTtlIGluc3RhbmNlb2YgaS5OYW1lJiYoYi5jaWRFbmNvZGluZz1lLm5hbWUpO2NvbnN0IHQ9YXdhaXQgbi5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmUsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSk7Yi5jTWFwPXQ7Yi52ZXJ0aWNhbD1iLmNNYXAudmVydGljYWx9cmV0dXJuIHRoaXMuZXh0cmFjdERhdGFTdHJ1Y3R1cmVzKHQsYSxiKS50aGVuKChhPT57dGhpcy5leHRyYWN0V2lkdGhzKHQsZSxhKTtyZXR1cm4gbmV3IHMuRm9udCh5Lm5hbWUsdixhKX0pKX1zdGF0aWMgYnVpbGRGb250UGF0aHMoZSx0LGEsbil7ZnVuY3Rpb24gYnVpbGRQYXRoKHQpe2NvbnN0IGk9YCR7ZS5sb2FkZWROYW1lfV9wYXRoXyR7dH1gO3RyeXtpZihlLnJlbmRlcmVyLmhhc0J1aWx0UGF0aCh0KSlyZXR1cm47YS5zZW5kKCJjb21tb25vYmoiLFtpLCJGb250UGF0aCIsZS5yZW5kZXJlci5nZXRQYXRoSnModCldKX1jYXRjaChlKXtpZihuLmlnbm9yZUVycm9ycyl7KDAsci53YXJuKShgYnVpbGRGb250UGF0aHMgLSBpZ25vcmluZyAke2l9IGdseXBoOiAiJHtlfSIuYCk7cmV0dXJufXRocm93IGV9fWZvcihjb25zdCBlIG9mIHQpe2J1aWxkUGF0aChlLmZvbnRDaGFyKTtjb25zdCB0PWUuYWNjZW50O3Q/LmZvbnRDaGFyJiZidWlsZFBhdGgodC5mb250Q2hhcil9fXN0YXRpYyBnZXQgZmFsbGJhY2tGb250RGljdCgpe2NvbnN0IGU9bmV3IGkuRGljdDtlLnNldCgiQmFzZUZvbnQiLGkuTmFtZS5nZXQoIkhlbHZldGljYSIpKTtlLnNldCgiVHlwZSIsaS5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpO2Uuc2V0KCJTdWJ0eXBlIixpLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIkVuY29kaW5nIixpLk5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSk7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImZhbGxiYWNrRm9udERpY3QiLGUpfX10LlBhcnRpYWxFdmFsdWF0b3I9UGFydGlhbEV2YWx1YXRvcjtjbGFzcyBUcmFuc2xhdGVkRm9udHtjb25zdHJ1Y3Rvcih7bG9hZGVkTmFtZTplLGZvbnQ6dCxkaWN0OmEsZXZhbHVhdG9yT3B0aW9uczpyfSl7dGhpcy5sb2FkZWROYW1lPWU7dGhpcy5mb250PXQ7dGhpcy5kaWN0PWE7dGhpcy5fZXZhbHVhdG9yT3B0aW9ucz1yfHxEO3RoaXMudHlwZTNMb2FkZWQ9bnVsbDt0aGlzLnR5cGUzRGVwZW5kZW5jaWVzPXQuaXNUeXBlM0ZvbnQ/bmV3IFNldDpudWxsO3RoaXMuc2VudD0hMX1zZW5kKGUpe2lmKCF0aGlzLnNlbnQpe3RoaXMuc2VudD0hMDtlLnNlbmQoImNvbW1vbm9iaiIsW3RoaXMubG9hZGVkTmFtZSwiRm9udCIsdGhpcy5mb250LmV4cG9ydERhdGEodGhpcy5fZXZhbHVhdG9yT3B0aW9ucy5mb250RXh0cmFQcm9wZXJ0aWVzKV0pfX1mYWxsYmFjayhlKXtpZih0aGlzLmZvbnQuZGF0YSl7dGhpcy5mb250LmRpc2FibGVGb250RmFjZT0hMDtQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKHRoaXMuZm9udCx0aGlzLmZvbnQuZ2x5cGhDYWNoZVZhbHVlcyxlLHRoaXMuX2V2YWx1YXRvck9wdGlvbnMpfX1sb2FkVHlwZTNEYXRhKGUsdCxhKXtpZih0aGlzLnR5cGUzTG9hZGVkKXJldHVybiB0aGlzLnR5cGUzTG9hZGVkO2lmKCF0aGlzLmZvbnQuaXNUeXBlM0ZvbnQpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGJlIGEgVHlwZTMgZm9udC4iKTtjb25zdCBuPWUuY2xvbmUoe2lnbm9yZUVycm9yczohMX0pO24ucGFyc2luZ1R5cGUzRm9udD0hMDtjb25zdCBzPW5ldyBpLlJlZlNldChlLnR5cGUzRm9udFJlZnMpO3RoaXMuZGljdC5vYmpJZCYmIXMuaGFzKHRoaXMuZGljdC5vYmpJZCkmJnMucHV0KHRoaXMuZGljdC5vYmpJZCk7bi50eXBlM0ZvbnRSZWZzPXM7Y29uc3Qgbz10aGlzLmZvbnQsYz10aGlzLnR5cGUzRGVwZW5kZW5jaWVzO2xldCBsPVByb21pc2UucmVzb2x2ZSgpO2NvbnN0IGg9dGhpcy5kaWN0LmdldCgiQ2hhclByb2NzIiksdT10aGlzLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKXx8dCxkPU9iamVjdC5jcmVhdGUobnVsbCksZj1yLlV0aWwubm9ybWFsaXplUmVjdChvLmJib3h8fFswLDAsMCwwXSksZz1mWzJdLWZbMF0scD1mWzNdLWZbMV0sbT1NYXRoLmh5cG90KGcscCk7Zm9yKGNvbnN0IGUgb2YgaC5nZXRLZXlzKCkpbD1sLnRoZW4oKCgpPT57Y29uc3QgdD1oLmdldChlKSxpPW5ldyBULk9wZXJhdG9yTGlzdDtyZXR1cm4gbi5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTp0LHRhc2s6YSxyZXNvdXJjZXM6dSxvcGVyYXRvckxpc3Q6aX0pLnRoZW4oKCgpPT57aS5mbkFycmF5WzBdPT09ci5PUFMuc2V0Q2hhcldpZHRoQW5kQm91bmRzJiZ0aGlzLl9yZW1vdmVUeXBlM0NvbG9yT3BlcmF0b3JzKGksbSk7ZFtlXT1pLmdldElSKCk7Zm9yKGNvbnN0IGUgb2YgaS5kZXBlbmRlbmNpZXMpYy5hZGQoZSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpeygwLHIud2FybikoYFR5cGUzIGZvbnQgcmVzb3VyY2UgIiR7ZX0iIGlzIG5vdCBhdmFpbGFibGUuYCk7Y29uc3QgYT1uZXcgVC5PcGVyYXRvckxpc3Q7ZFtlXT1hLmdldElSKCl9KSl9KSk7dGhpcy50eXBlM0xvYWRlZD1sLnRoZW4oKCgpPT57by5jaGFyUHJvY09wZXJhdG9yTGlzdD1kO2lmKHRoaXMuX2Jib3gpe28uaXNDaGFyQkJveD0hMDtvLmJib3g9dGhpcy5fYmJveH19KSk7cmV0dXJuIHRoaXMudHlwZTNMb2FkZWR9X3JlbW92ZVR5cGUzQ29sb3JPcGVyYXRvcnMoZSx0PU5hTil7Y29uc3QgYT1yLlV0aWwubm9ybWFsaXplUmVjdChlLmFyZ3NBcnJheVswXS5zbGljZSgyKSksbj1hWzJdLWFbMF0saT1hWzNdLWFbMV0scz1NYXRoLmh5cG90KG4saSk7aWYoMD09PW58fDA9PT1pKXtlLmZuQXJyYXkuc3BsaWNlKDAsMSk7ZS5hcmdzQXJyYXkuc3BsaWNlKDAsMSl9ZWxzZSBpZigwPT09dHx8TWF0aC5yb3VuZChzL3QpPj0xMCl7dGhpcy5fYmJveHx8KHRoaXMuX2Jib3g9WzEvMCwxLzAsLTEvMCwtMS8wXSk7dGhpcy5fYmJveFswXT1NYXRoLm1pbih0aGlzLl9iYm94WzBdLGFbMF0pO3RoaXMuX2Jib3hbMV09TWF0aC5taW4odGhpcy5fYmJveFsxXSxhWzFdKTt0aGlzLl9iYm94WzJdPU1hdGgubWF4KHRoaXMuX2Jib3hbMl0sYVsyXSk7dGhpcy5fYmJveFszXT1NYXRoLm1heCh0aGlzLl9iYm94WzNdLGFbM10pfWxldCBvPTAsYz1lLmxlbmd0aDtmb3IoO288Yzspe3N3aXRjaChlLmZuQXJyYXlbb10pe2Nhc2Ugci5PUFMuc2V0Q2hhcldpZHRoQW5kQm91bmRzOmJyZWFrO2Nhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZTpjYXNlIHIuT1BTLnNldEZpbGxDb2xvclNwYWNlOmNhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3I6Y2FzZSByLk9QUy5zZXRTdHJva2VDb2xvck46Y2FzZSByLk9QUy5zZXRGaWxsQ29sb3I6Y2FzZSByLk9QUy5zZXRGaWxsQ29sb3JOOmNhc2Ugci5PUFMuc2V0U3Ryb2tlR3JheTpjYXNlIHIuT1BTLnNldEZpbGxHcmF5OmNhc2Ugci5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I6Y2FzZSByLk9QUy5zZXRGaWxsUkdCQ29sb3I6Y2FzZSByLk9QUy5zZXRTdHJva2VDTVlLQ29sb3I6Y2FzZSByLk9QUy5zZXRGaWxsQ01ZS0NvbG9yOmNhc2Ugci5PUFMuc2hhZGluZ0ZpbGw6Y2FzZSByLk9QUy5zZXRSZW5kZXJpbmdJbnRlbnQ6ZS5mbkFycmF5LnNwbGljZShvLDEpO2UuYXJnc0FycmF5LnNwbGljZShvLDEpO2MtLTtjb250aW51ZTtjYXNlIHIuT1BTLnNldEdTdGF0ZTpjb25zdFt0XT1lLmFyZ3NBcnJheVtvXTtsZXQgYT0wLG49dC5sZW5ndGg7Zm9yKDthPG47KXtjb25zdFtlXT10W2FdO3N3aXRjaChlKXtjYXNlIlRSIjpjYXNlIlRSMiI6Y2FzZSJIVCI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOnQuc3BsaWNlKGEsMSk7bi0tO2NvbnRpbnVlfWErK319bysrfX19Y2xhc3MgU3RhdGVNYW5hZ2Vye2NvbnN0cnVjdG9yKGU9bmV3IEV2YWxTdGF0ZSl7dGhpcy5zdGF0ZT1lO3RoaXMuc3RhdGVTdGFjaz1bXX1zYXZlKCl7Y29uc3QgZT10aGlzLnN0YXRlO3RoaXMuc3RhdGVTdGFjay5wdXNoKHRoaXMuc3RhdGUpO3RoaXMuc3RhdGU9ZS5jbG9uZSgpfXJlc3RvcmUoKXtjb25zdCBlPXRoaXMuc3RhdGVTdGFjay5wb3AoKTtlJiYodGhpcy5zdGF0ZT1lKX10cmFuc2Zvcm0oZSl7dGhpcy5zdGF0ZS5jdG09ci5VdGlsLnRyYW5zZm9ybSh0aGlzLnN0YXRlLmN0bSxlKX19Y2xhc3MgVGV4dFN0YXRle2NvbnN0cnVjdG9yKCl7dGhpcy5jdG09bmV3IEZsb2F0MzJBcnJheShyLklERU5USVRZX01BVFJJWCk7dGhpcy5mb250TmFtZT1udWxsO3RoaXMuZm9udFNpemU9MDt0aGlzLmxvYWRlZE5hbWU9bnVsbDt0aGlzLmZvbnQ9bnVsbDt0aGlzLmZvbnRNYXRyaXg9ci5GT05UX0lERU5USVRZX01BVFJJWDt0aGlzLnRleHRNYXRyaXg9ci5JREVOVElUWV9NQVRSSVguc2xpY2UoKTt0aGlzLnRleHRMaW5lTWF0cml4PXIuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7dGhpcy5jaGFyU3BhY2luZz0wO3RoaXMud29yZFNwYWNpbmc9MDt0aGlzLmxlYWRpbmc9MDt0aGlzLnRleHRIU2NhbGU9MTt0aGlzLnRleHRSaXNlPTB9c2V0VGV4dE1hdHJpeChlLHQsYSxyLG4saSl7Y29uc3Qgcz10aGlzLnRleHRNYXRyaXg7c1swXT1lO3NbMV09dDtzWzJdPWE7c1szXT1yO3NbNF09bjtzWzVdPWl9c2V0VGV4dExpbmVNYXRyaXgoZSx0LGEscixuLGkpe2NvbnN0IHM9dGhpcy50ZXh0TGluZU1hdHJpeDtzWzBdPWU7c1sxXT10O3NbMl09YTtzWzNdPXI7c1s0XT1uO3NbNV09aX10cmFuc2xhdGVUZXh0TWF0cml4KGUsdCl7Y29uc3QgYT10aGlzLnRleHRNYXRyaXg7YVs0XT1hWzBdKmUrYVsyXSp0K2FbNF07YVs1XT1hWzFdKmUrYVszXSp0K2FbNV19dHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoZSx0KXtjb25zdCBhPXRoaXMudGV4dExpbmVNYXRyaXg7YVs0XT1hWzBdKmUrYVsyXSp0K2FbNF07YVs1XT1hWzFdKmUrYVszXSp0K2FbNV19Y2FycmlhZ2VSZXR1cm4oKXt0aGlzLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KDAsLXRoaXMubGVhZGluZyk7dGhpcy50ZXh0TWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKX1jbG9uZSgpe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZSh0aGlzKTtlLnRleHRNYXRyaXg9dGhpcy50ZXh0TWF0cml4LnNsaWNlKCk7ZS50ZXh0TGluZU1hdHJpeD10aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7ZS5mb250TWF0cml4PXRoaXMuZm9udE1hdHJpeC5zbGljZSgpO3JldHVybiBlfX1jbGFzcyBFdmFsU3RhdGV7Y29uc3RydWN0b3IoKXt0aGlzLmN0bT1uZXcgRmxvYXQzMkFycmF5KHIuSURFTlRJVFlfTUFUUklYKTt0aGlzLmZvbnQ9bnVsbDt0aGlzLnRleHRSZW5kZXJpbmdNb2RlPXIuVGV4dFJlbmRlcmluZ01vZGUuRklMTDt0aGlzLmZpbGxDb2xvclNwYWNlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7dGhpcy5zdHJva2VDb2xvclNwYWNlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXl9Y2xvbmUoKXtyZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKX19Y2xhc3MgRXZhbHVhdG9yUHJlcHJvY2Vzc29ye3N0YXRpYyBnZXQgb3BNYXAoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywib3BNYXAiLHt3OntpZDpyLk9QUy5zZXRMaW5lV2lkdGgsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sSjp7aWQ6ci5PUFMuc2V0TGluZUNhcCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxqOntpZDpyLk9QUy5zZXRMaW5lSm9pbixudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxNOntpZDpyLk9QUy5zZXRNaXRlckxpbWl0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGQ6e2lkOnIuT1BTLnNldERhc2gsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0scmk6e2lkOnIuT1BTLnNldFJlbmRlcmluZ0ludGVudCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxpOntpZDpyLk9QUy5zZXRGbGF0bmVzcyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxnczp7aWQ6ci5PUFMuc2V0R1N0YXRlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LHE6e2lkOnIuT1BTLnNhdmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sUTp7aWQ6ci5PUFMucmVzdG9yZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxjbTp7aWQ6ci5PUFMudHJhbnNmb3JtLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LG06e2lkOnIuT1BTLm1vdmVUbyxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxsOntpZDpyLk9QUy5saW5lVG8sbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sYzp7aWQ6ci5PUFMuY3VydmVUbyxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSx2OntpZDpyLk9QUy5jdXJ2ZVRvMixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSx5OntpZDpyLk9QUy5jdXJ2ZVRvMyxudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxoOntpZDpyLk9QUy5jbG9zZVBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0scmU6e2lkOnIuT1BTLnJlY3RhbmdsZSxudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxTOntpZDpyLk9QUy5zdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sczp7aWQ6ci5PUFMuY2xvc2VTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZjp7aWQ6ci5PUFMuZmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxGOntpZDpyLk9QUy5maWxsLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LCJmKiI6e2lkOnIuT1BTLmVvRmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxCOntpZDpyLk9QUy5maWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LCJCKiI6e2lkOnIuT1BTLmVvRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxiOntpZDpyLk9QUy5jbG9zZUZpbGxTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sImIqIjp7aWQ6ci5PUFMuY2xvc2VFT0ZpbGxTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sbjp7aWQ6ci5PUFMuZW5kUGF0aCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxXOntpZDpyLk9QUy5jbGlwLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LCJXKiI6e2lkOnIuT1BTLmVvQ2xpcCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxCVDp7aWQ6ci5PUFMuYmVnaW5UZXh0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEVUOntpZDpyLk9QUy5lbmRUZXh0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LFRjOntpZDpyLk9QUy5zZXRDaGFyU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxUdzp7aWQ6ci5PUFMuc2V0V29yZFNwYWNpbmcsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sVHo6e2lkOnIuT1BTLnNldEhTY2FsZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxUTDp7aWQ6ci5PUFMuc2V0TGVhZGluZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxUZjp7aWQ6ci5PUFMuc2V0Rm9udCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxUcjp7aWQ6ci5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sVHM6e2lkOnIuT1BTLnNldFRleHRSaXNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFRkOntpZDpyLk9QUy5tb3ZlVGV4dCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxURDp7aWQ6ci5PUFMuc2V0TGVhZGluZ01vdmVUZXh0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LFRtOntpZDpyLk9QUy5zZXRUZXh0TWF0cml4LG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LCJUKiI6e2lkOnIuT1BTLm5leHRMaW5lLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LFRqOntpZDpyLk9QUy5zaG93VGV4dCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxUSjp7aWQ6ci5PUFMuc2hvd1NwYWNlZFRleHQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sIiciOntpZDpyLk9QUy5uZXh0TGluZVNob3dUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LCciJzp7aWQ6ci5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQsbnVtQXJnczozLHZhcmlhYmxlQXJnczohMX0sZDA6e2lkOnIuT1BTLnNldENoYXJXaWR0aCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxkMTp7aWQ6ci5PUFMuc2V0Q2hhcldpZHRoQW5kQm91bmRzLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LENTOntpZDpyLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGNzOntpZDpyLk9QUy5zZXRGaWxsQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxTQzp7aWQ6ci5PUFMuc2V0U3Ryb2tlQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMH0sU0NOOntpZDpyLk9QUy5zZXRTdHJva2VDb2xvck4sbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9LHNjOntpZDpyLk9QUy5zZXRGaWxsQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMH0sc2NuOntpZDpyLk9QUy5zZXRGaWxsQ29sb3JOLG51bUFyZ3M6MzMsdmFyaWFibGVBcmdzOiEwfSxHOntpZDpyLk9QUy5zZXRTdHJva2VHcmF5LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGc6e2lkOnIuT1BTLnNldEZpbGxHcmF5LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFJHOntpZDpyLk9QUy5zZXRTdHJva2VSR0JDb2xvcixudW1BcmdzOjMsdmFyaWFibGVBcmdzOiExfSxyZzp7aWQ6ci5PUFMuc2V0RmlsbFJHQkNvbG9yLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LEs6e2lkOnIuT1BTLnNldFN0cm9rZUNNWUtDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxrOntpZDpyLk9QUy5zZXRGaWxsQ01ZS0NvbG9yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LHNoOntpZDpyLk9QUy5zaGFkaW5nRmlsbCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxCSTp7aWQ6ci5PUFMuYmVnaW5JbmxpbmVJbWFnZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxJRDp7aWQ6ci5PUFMuYmVnaW5JbWFnZURhdGEsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sRUk6e2lkOnIuT1BTLmVuZElubGluZUltYWdlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LERvOntpZDpyLk9QUy5wYWludFhPYmplY3QsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sTVA6e2lkOnIuT1BTLm1hcmtQb2ludCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxEUDp7aWQ6ci5PUFMubWFya1BvaW50UHJvcHMsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sQk1DOntpZDpyLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sQkRDOntpZDpyLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxFTUM6e2lkOnIuT1BTLmVuZE1hcmtlZENvbnRlbnQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sQlg6e2lkOnIuT1BTLmJlZ2luQ29tcGF0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEVYOntpZDpyLk9QUy5lbmRDb21wYXQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sQk06bnVsbCxCRDpudWxsLHRydWU6bnVsbCxmYTpudWxsLGZhbDpudWxsLGZhbHM6bnVsbCxmYWxzZTpudWxsLG51Om51bGwsbnVsOm51bGwsbnVsbDpudWxsfSl9c3RhdGljIE1BWF9JTlZBTElEX1BBVEhfT1BTPTEwO2NvbnN0cnVjdG9yKGUsdCxhPW5ldyBTdGF0ZU1hbmFnZXIpe3RoaXMucGFyc2VyPW5ldyBmLlBhcnNlcih7bGV4ZXI6bmV3IGYuTGV4ZXIoZSxFdmFsdWF0b3JQcmVwcm9jZXNzb3Iub3BNYXApLHhyZWY6dH0pO3RoaXMuc3RhdGVNYW5hZ2VyPWE7dGhpcy5ub25Qcm9jZXNzZWRBcmdzPVtdO3RoaXMuX2lzUGF0aE9wPSExO3RoaXMuX251bUludmFsaWRQYXRoT1BTPTB9Z2V0IHNhdmVkU3RhdGVzRGVwdGgoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuc3RhdGVTdGFjay5sZW5ndGh9cmVhZChlKXtsZXQgdD1lLmFyZ3M7Zm9yKDs7KXtjb25zdCBhPXRoaXMucGFyc2VyLmdldE9iaigpO2lmKGEgaW5zdGFuY2VvZiBpLkNtZCl7Y29uc3Qgbj1hLmNtZCxpPUV2YWx1YXRvclByZXByb2Nlc3Nvci5vcE1hcFtuXTtpZighaSl7KDAsci53YXJuKShgVW5rbm93biBjb21tYW5kICIke259Ii5gKTtjb250aW51ZX1jb25zdCBzPWkuaWQsbz1pLm51bUFyZ3M7bGV0IGM9bnVsbCE9PXQ/dC5sZW5ndGg6MDt0aGlzLl9pc1BhdGhPcHx8KHRoaXMuX251bUludmFsaWRQYXRoT1BTPTApO3RoaXMuX2lzUGF0aE9wPXM+PXIuT1BTLm1vdmVUbyYmczw9ci5PUFMuZW5kUGF0aDtpZihpLnZhcmlhYmxlQXJncyljPm8mJigwLHIuaW5mbykoYENvbW1hbmQgJHtufTogZXhwZWN0ZWQgWzAsICR7b31dIGFyZ3MsIGJ1dCByZWNlaXZlZCAke2N9IGFyZ3MuYCk7ZWxzZXtpZihjIT09byl7Y29uc3QgZT10aGlzLm5vblByb2Nlc3NlZEFyZ3M7Zm9yKDtjPm87KXtlLnB1c2godC5zaGlmdCgpKTtjLS19Zm9yKDtjPG8mJjAhPT1lLmxlbmd0aDspe251bGw9PT10JiYodD1bXSk7dC51bnNoaWZ0KGUucG9wKCkpO2MrK319aWYoYzxvKXtjb25zdCBlPWBjb21tYW5kICR7bn06IGV4cGVjdGVkICR7b30gYXJncywgYnV0IHJlY2VpdmVkICR7Y30gYXJncy5gO2lmKHRoaXMuX2lzUGF0aE9wJiYrK3RoaXMuX251bUludmFsaWRQYXRoT1BTPkV2YWx1YXRvclByZXByb2Nlc3Nvci5NQVhfSU5WQUxJRF9QQVRIX09QUyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCAke2V9YCk7KDAsci53YXJuKShgU2tpcHBpbmcgJHtlfWApO251bGwhPT10JiYodC5sZW5ndGg9MCk7Y29udGludWV9fXRoaXMucHJlcHJvY2Vzc0NvbW1hbmQocyx0KTtlLmZuPXM7ZS5hcmdzPXQ7cmV0dXJuITB9aWYoYT09PWkuRU9GKXJldHVybiExO2lmKG51bGwhPT1hKXtudWxsPT09dCYmKHQ9W10pO3QucHVzaChhKTtpZih0Lmxlbmd0aD4zMyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzIil9fX1wcmVwcm9jZXNzQ29tbWFuZChlLHQpe3N3aXRjaCgwfGUpe2Nhc2Ugci5PUFMuc2F2ZTp0aGlzLnN0YXRlTWFuYWdlci5zYXZlKCk7YnJlYWs7Y2FzZSByLk9QUy5yZXN0b3JlOnRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmUoKTticmVhaztjYXNlIHIuT1BTLnRyYW5zZm9ybTp0aGlzLnN0YXRlTWFuYWdlci50cmFuc2Zvcm0odCl9fX10LkV2YWx1YXRvclByZXByb2Nlc3Nvcj1FdmFsdWF0b3JQcmVwcm9jZXNzb3J9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5JZGVudGl0eUNNYXA9dC5DTWFwRmFjdG9yeT10LkNNYXA9dm9pZCAwO3ZhciByPWEoMiksbj1hKDQpLGk9YSg1KSxzPWEoMTUpLG89YSgxNiksYz1hKDMpLGw9YSg4KTtjb25zdCBoPVsiQWRvYmUtR0IxLVVDUzIiLCJBZG9iZS1DTlMxLVVDUzIiLCJBZG9iZS1KYXBhbjEtVUNTMiIsIkFkb2JlLUtvcmVhMS1VQ1MyIiwiNzgtRVVDLUgiLCI3OC1FVUMtViIsIjc4LUgiLCI3OC1SS1NKLUgiLCI3OC1SS1NKLVYiLCI3OC1WIiwiNzhtcy1SS1NKLUgiLCI3OG1zLVJLU0otViIsIjgzcHYtUktTSi1IIiwiOTBtcy1SS1NKLUgiLCI5MG1zLVJLU0otViIsIjkwbXNwLVJLU0otSCIsIjkwbXNwLVJLU0otViIsIjkwcHYtUktTSi1IIiwiOTBwdi1SS1NKLVYiLCJBZGQtSCIsIkFkZC1SS1NKLUgiLCJBZGQtUktTSi1WIiwiQWRkLVYiLCJBZG9iZS1DTlMxLTAiLCJBZG9iZS1DTlMxLTEiLCJBZG9iZS1DTlMxLTIiLCJBZG9iZS1DTlMxLTMiLCJBZG9iZS1DTlMxLTQiLCJBZG9iZS1DTlMxLTUiLCJBZG9iZS1DTlMxLTYiLCJBZG9iZS1HQjEtMCIsIkFkb2JlLUdCMS0xIiwiQWRvYmUtR0IxLTIiLCJBZG9iZS1HQjEtMyIsIkFkb2JlLUdCMS00IiwiQWRvYmUtR0IxLTUiLCJBZG9iZS1KYXBhbjEtMCIsIkFkb2JlLUphcGFuMS0xIiwiQWRvYmUtSmFwYW4xLTIiLCJBZG9iZS1KYXBhbjEtMyIsIkFkb2JlLUphcGFuMS00IiwiQWRvYmUtSmFwYW4xLTUiLCJBZG9iZS1KYXBhbjEtNiIsIkFkb2JlLUtvcmVhMS0wIiwiQWRvYmUtS29yZWExLTEiLCJBZG9iZS1Lb3JlYTEtMiIsIkI1LUgiLCJCNS1WIiwiQjVwYy1IIiwiQjVwYy1WIiwiQ05TLUVVQy1IIiwiQ05TLUVVQy1WIiwiQ05TMS1IIiwiQ05TMS1WIiwiQ05TMi1IIiwiQ05TMi1WIiwiRVRISy1CNS1IIiwiRVRISy1CNS1WIiwiRVRlbi1CNS1IIiwiRVRlbi1CNS1WIiwiRVRlbm1zLUI1LUgiLCJFVGVubXMtQjUtViIsIkVVQy1IIiwiRVVDLVYiLCJFeHQtSCIsIkV4dC1SS1NKLUgiLCJFeHQtUktTSi1WIiwiRXh0LVYiLCJHQi1FVUMtSCIsIkdCLUVVQy1WIiwiR0ItSCIsIkdCLVYiLCJHQkstRVVDLUgiLCJHQkstRVVDLVYiLCJHQksySy1IIiwiR0JLMkstViIsIkdCS3AtRVVDLUgiLCJHQktwLUVVQy1WIiwiR0JULUVVQy1IIiwiR0JULUVVQy1WIiwiR0JULUgiLCJHQlQtViIsIkdCVHBjLUVVQy1IIiwiR0JUcGMtRVVDLVYiLCJHQnBjLUVVQy1IIiwiR0JwYy1FVUMtViIsIkgiLCJIS2RsYS1CNS1IIiwiSEtkbGEtQjUtViIsIkhLZGxiLUI1LUgiLCJIS2RsYi1CNS1WIiwiSEtnY2NzLUI1LUgiLCJIS2djY3MtQjUtViIsIkhLbTMxNC1CNS1IIiwiSEttMzE0LUI1LVYiLCJIS200NzEtQjUtSCIsIkhLbTQ3MS1CNS1WIiwiSEtzY3MtQjUtSCIsIkhLc2NzLUI1LVYiLCJIYW5rYWt1IiwiSGlyYWdhbmEiLCJLU0MtRVVDLUgiLCJLU0MtRVVDLVYiLCJLU0MtSCIsIktTQy1Kb2hhYi1IIiwiS1NDLUpvaGFiLVYiLCJLU0MtViIsIktTQ21zLVVIQy1IIiwiS1NDbXMtVUhDLUhXLUgiLCJLU0Ntcy1VSEMtSFctViIsIktTQ21zLVVIQy1WIiwiS1NDcGMtRVVDLUgiLCJLU0NwYy1FVUMtViIsIkthdGFrYW5hIiwiTldQLUgiLCJOV1AtViIsIlJLU0otSCIsIlJLU0otViIsIlJvbWFuIiwiVW5pQ05TLVVDUzItSCIsIlVuaUNOUy1VQ1MyLVYiLCJVbmlDTlMtVVRGMTYtSCIsIlVuaUNOUy1VVEYxNi1WIiwiVW5pQ05TLVVURjMyLUgiLCJVbmlDTlMtVVRGMzItViIsIlVuaUNOUy1VVEY4LUgiLCJVbmlDTlMtVVRGOC1WIiwiVW5pR0ItVUNTMi1IIiwiVW5pR0ItVUNTMi1WIiwiVW5pR0ItVVRGMTYtSCIsIlVuaUdCLVVURjE2LVYiLCJVbmlHQi1VVEYzMi1IIiwiVW5pR0ItVVRGMzItViIsIlVuaUdCLVVURjgtSCIsIlVuaUdCLVVURjgtViIsIlVuaUpJUy1VQ1MyLUgiLCJVbmlKSVMtVUNTMi1IVy1IIiwiVW5pSklTLVVDUzItSFctViIsIlVuaUpJUy1VQ1MyLVYiLCJVbmlKSVMtVVRGMTYtSCIsIlVuaUpJUy1VVEYxNi1WIiwiVW5pSklTLVVURjMyLUgiLCJVbmlKSVMtVVRGMzItViIsIlVuaUpJUy1VVEY4LUgiLCJVbmlKSVMtVVRGOC1WIiwiVW5pSklTMjAwNC1VVEYxNi1IIiwiVW5pSklTMjAwNC1VVEYxNi1WIiwiVW5pSklTMjAwNC1VVEYzMi1IIiwiVW5pSklTMjAwNC1VVEYzMi1WIiwiVW5pSklTMjAwNC1VVEY4LUgiLCJVbmlKSVMyMDA0LVVURjgtViIsIlVuaUpJU1Byby1VQ1MyLUhXLVYiLCJVbmlKSVNQcm8tVUNTMi1WIiwiVW5pSklTUHJvLVVURjgtViIsIlVuaUpJU1gwMjEzLVVURjMyLUgiLCJVbmlKSVNYMDIxMy1VVEYzMi1WIiwiVW5pSklTWDAyMTMyMDA0LVVURjMyLUgiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItViIsIlVuaUtTLVVDUzItSCIsIlVuaUtTLVVDUzItViIsIlVuaUtTLVVURjE2LUgiLCJVbmlLUy1VVEYxNi1WIiwiVW5pS1MtVVRGMzItSCIsIlVuaUtTLVVURjMyLVYiLCJVbmlLUy1VVEY4LUgiLCJVbmlLUy1VVEY4LVYiLCJWIiwiV1AtU3ltYm9sIl0sdT0yKioyNC0xO2NsYXNzIENNYXB7Y29uc3RydWN0b3IoZT0hMSl7dGhpcy5jb2Rlc3BhY2VSYW5nZXM9W1tdLFtdLFtdLFtdXTt0aGlzLm51bUNvZGVzcGFjZVJhbmdlcz0wO3RoaXMuX21hcD1bXTt0aGlzLm5hbWU9IiI7dGhpcy52ZXJ0aWNhbD0hMTt0aGlzLnVzZUNNYXA9bnVsbDt0aGlzLmJ1aWx0SW5DTWFwPWV9YWRkQ29kZXNwYWNlUmFuZ2UoZSx0LGEpe3RoaXMuY29kZXNwYWNlUmFuZ2VzW2UtMV0ucHVzaCh0LGEpO3RoaXMubnVtQ29kZXNwYWNlUmFuZ2VzKyt9bWFwQ2lkUmFuZ2UoZSx0LGEpe2lmKHQtZT51KXRocm93IG5ldyBFcnJvcigibWFwQ2lkUmFuZ2UgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuIik7Zm9yKDtlPD10Oyl0aGlzLl9tYXBbZSsrXT1hKyt9bWFwQmZSYW5nZShlLHQsYSl7aWYodC1lPnUpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlIC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2NvbnN0IHI9YS5sZW5ndGgtMTtmb3IoO2U8PXQ7KXt0aGlzLl9tYXBbZSsrXT1hO2NvbnN0IHQ9YS5jaGFyQ29kZUF0KHIpKzE7dD4yNTU/YT1hLnN1YnN0cmluZygwLHItMSkrU3RyaW5nLmZyb21DaGFyQ29kZShhLmNoYXJDb2RlQXQoci0xKSsxKSsiXDAiOmE9YS5zdWJzdHJpbmcoMCxyKStTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfX1tYXBCZlJhbmdlVG9BcnJheShlLHQsYSl7aWYodC1lPnUpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlVG9BcnJheSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtjb25zdCByPWEubGVuZ3RoO2xldCBuPTA7Zm9yKDtlPD10JiZuPHI7KXt0aGlzLl9tYXBbZV09YVtuKytdOysrZX19bWFwT25lKGUsdCl7dGhpcy5fbWFwW2VdPXR9bG9va3VwKGUpe3JldHVybiB0aGlzLl9tYXBbZV19Y29udGFpbnMoZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX1mb3JFYWNoKGUpe2NvbnN0IHQ9dGhpcy5fbWFwLGE9dC5sZW5ndGg7aWYoYTw9NjU1MzYpZm9yKGxldCByPTA7cjxhO3IrKyl2b2lkIDAhPT10W3JdJiZlKHIsdFtyXSk7ZWxzZSBmb3IoY29uc3QgYSBpbiB0KWUoYSx0W2FdKX1jaGFyQ29kZU9mKGUpe2NvbnN0IHQ9dGhpcy5fbWFwO2lmKHQubGVuZ3RoPD02NTUzNilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcihjb25zdCBhIGluIHQpaWYodFthXT09PWUpcmV0dXJuIDB8YTtyZXR1cm4tMX1nZXRNYXAoKXtyZXR1cm4gdGhpcy5fbWFwfXJlYWRDaGFyQ29kZShlLHQsYSl7bGV0IHI9MDtjb25zdCBuPXRoaXMuY29kZXNwYWNlUmFuZ2VzO2ZvcihsZXQgaT0wLHM9bi5sZW5ndGg7aTxzO2krKyl7cj0ocjw8OHxlLmNoYXJDb2RlQXQodCtpKSk+Pj4wO2NvbnN0IHM9bltpXTtmb3IobGV0IGU9MCx0PXMubGVuZ3RoO2U8dDspe2NvbnN0IHQ9c1tlKytdLG49c1tlKytdO2lmKHI+PXQmJnI8PW4pe2EuY2hhcmNvZGU9cjthLmxlbmd0aD1pKzE7cmV0dXJufX19YS5jaGFyY29kZT0wO2EubGVuZ3RoPTF9Z2V0Q2hhckNvZGVMZW5ndGgoZSl7Y29uc3QgdD10aGlzLmNvZGVzcGFjZVJhbmdlcztmb3IobGV0IGE9MCxyPXQubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9dFthXTtmb3IobGV0IHQ9MCxuPXIubGVuZ3RoO3Q8bjspe2NvbnN0IG49clt0KytdLGk9clt0KytdO2lmKGU+PW4mJmU8PWkpcmV0dXJuIGErMX19cmV0dXJuIDF9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9tYXAubGVuZ3RofWdldCBpc0lkZW50aXR5Q01hcCgpe2lmKCJJZGVudGl0eS1IIiE9PXRoaXMubmFtZSYmIklkZW50aXR5LVYiIT09dGhpcy5uYW1lKXJldHVybiExO2lmKDY1NTM2IT09dGhpcy5fbWFwLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MDtlPDY1NTM2O2UrKylpZih0aGlzLl9tYXBbZV0hPT1lKXJldHVybiExO3JldHVybiEwfX10LkNNYXA9Q01hcDtjbGFzcyBJZGVudGl0eUNNYXAgZXh0ZW5kcyBDTWFwe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKTt0aGlzLnZlcnRpY2FsPWU7dGhpcy5hZGRDb2Rlc3BhY2VSYW5nZSh0LDAsNjU1MzUpfW1hcENpZFJhbmdlKGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcENpZFJhbmdlIil9bWFwQmZSYW5nZShlLHQsYSl7KDAsci51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlIil9bWFwQmZSYW5nZVRvQXJyYXkoZSx0LGEpeygwLHIudW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQmZSYW5nZVRvQXJyYXkiKX1tYXBPbmUoZSx0KXsoMCxyLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcENpZE9uZSIpfWxvb2t1cChlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzU/ZTp2b2lkIDB9Y29udGFpbnMoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1fWZvckVhY2goZSl7Zm9yKGxldCB0PTA7dDw9NjU1MzU7dCsrKWUodCx0KX1jaGFyQ29kZU9mKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNT9lOi0xfWdldE1hcCgpe2NvbnN0IGU9bmV3IEFycmF5KDY1NTM2KTtmb3IobGV0IHQ9MDt0PD02NTUzNTt0KyspZVt0XT10O3JldHVybiBlfWdldCBsZW5ndGgoKXtyZXR1cm4gNjU1MzZ9Z2V0IGlzSWRlbnRpdHlDTWFwKCl7KDAsci51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgYWNjZXNzIC5pc0lkZW50aXR5Q01hcCIpfX10LklkZW50aXR5Q01hcD1JZGVudGl0eUNNYXA7ZnVuY3Rpb24gc3RyVG9JbnQoZSl7bGV0IHQ9MDtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl0PXQ8PDh8ZS5jaGFyQ29kZUF0KGEpO3JldHVybiB0Pj4+MH1mdW5jdGlvbiBleHBlY3RTdHJpbmcoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIGV4cGVjdEludChlKXtpZighTnVtYmVyLmlzSW50ZWdlcihlKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiTWFsZm9ybWVkIENNYXA6IGV4cGVjdGVkIGludC4iKX1mdW5jdGlvbiBwYXJzZUJmQ2hhcihlLHQpe2Zvcig7Oyl7bGV0IGE9dC5nZXRPYmooKTtpZihhPT09bi5FT0YpYnJlYWs7aWYoKDAsbi5pc0NtZCkoYSwiZW5kYmZjaGFyIikpcmV0dXJuO2V4cGVjdFN0cmluZyhhKTtjb25zdCByPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtleHBlY3RTdHJpbmcoYSk7Y29uc3QgaT1hO2UubWFwT25lKHIsaSl9fWZ1bmN0aW9uIHBhcnNlQmZSYW5nZShlLHQpe2Zvcig7Oyl7bGV0IGE9dC5nZXRPYmooKTtpZihhPT09bi5FT0YpYnJlYWs7aWYoKDAsbi5pc0NtZCkoYSwiZW5kYmZyYW5nZSIpKXJldHVybjtleHBlY3RTdHJpbmcoYSk7Y29uc3Qgcj1zdHJUb0ludChhKTthPXQuZ2V0T2JqKCk7ZXhwZWN0U3RyaW5nKGEpO2NvbnN0IGk9c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2lmKE51bWJlci5pc0ludGVnZXIoYSl8fCJzdHJpbmciPT10eXBlb2YgYSl7Y29uc3QgdD1OdW1iZXIuaXNJbnRlZ2VyKGEpP1N0cmluZy5mcm9tQ2hhckNvZGUoYSk6YTtlLm1hcEJmUmFuZ2UocixpLHQpfWVsc2V7aWYoISgwLG4uaXNDbWQpKGEsIlsiKSlicmVhazt7YT10LmdldE9iaigpO2NvbnN0IHM9W107Zm9yKDshKDAsbi5pc0NtZCkoYSwiXSIpJiZhIT09bi5FT0Y7KXtzLnB1c2goYSk7YT10LmdldE9iaigpfWUubWFwQmZSYW5nZVRvQXJyYXkocixpLHMpfX19dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgYmYgcmFuZ2UuIil9ZnVuY3Rpb24gcGFyc2VDaWRDaGFyKGUsdCl7Zm9yKDs7KXtsZXQgYT10LmdldE9iaigpO2lmKGE9PT1uLkVPRilicmVhaztpZigoMCxuLmlzQ21kKShhLCJlbmRjaWRjaGFyIikpcmV0dXJuO2V4cGVjdFN0cmluZyhhKTtjb25zdCByPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtleHBlY3RJbnQoYSk7Y29uc3QgaT1hO2UubWFwT25lKHIsaSl9fWZ1bmN0aW9uIHBhcnNlQ2lkUmFuZ2UoZSx0KXtmb3IoOzspe2xldCBhPXQuZ2V0T2JqKCk7aWYoYT09PW4uRU9GKWJyZWFrO2lmKCgwLG4uaXNDbWQpKGEsImVuZGNpZHJhbmdlIikpcmV0dXJuO2V4cGVjdFN0cmluZyhhKTtjb25zdCByPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtleHBlY3RTdHJpbmcoYSk7Y29uc3QgaT1zdHJUb0ludChhKTthPXQuZ2V0T2JqKCk7ZXhwZWN0SW50KGEpO2NvbnN0IHM9YTtlLm1hcENpZFJhbmdlKHIsaSxzKX19ZnVuY3Rpb24gcGFyc2VDb2Rlc3BhY2VSYW5nZShlLHQpe2Zvcig7Oyl7bGV0IGE9dC5nZXRPYmooKTtpZihhPT09bi5FT0YpYnJlYWs7aWYoKDAsbi5pc0NtZCkoYSwiZW5kY29kZXNwYWNlcmFuZ2UiKSlyZXR1cm47aWYoInN0cmluZyIhPXR5cGVvZiBhKWJyZWFrO2NvbnN0IHI9c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2lmKCJzdHJpbmciIT10eXBlb2YgYSlicmVhaztjb25zdCBpPXN0clRvSW50KGEpO2UuYWRkQ29kZXNwYWNlUmFuZ2UoYS5sZW5ndGgscixpKX10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBjb2Rlc3BhY2UgcmFuZ2UuIil9ZnVuY3Rpb24gcGFyc2VXTW9kZShlLHQpe2NvbnN0IGE9dC5nZXRPYmooKTtOdW1iZXIuaXNJbnRlZ2VyKGEpJiYoZS52ZXJ0aWNhbD0hIWEpfWZ1bmN0aW9uIHBhcnNlQ01hcE5hbWUoZSx0KXtjb25zdCBhPXQuZ2V0T2JqKCk7YSBpbnN0YW5jZW9mIG4uTmFtZSYmKGUubmFtZT1hLm5hbWUpfWFzeW5jIGZ1bmN0aW9uIHBhcnNlQ01hcChlLHQsYSxpKXtsZXQgcyxvO2U6Zm9yKDs7KXRyeXtjb25zdCBhPXQuZ2V0T2JqKCk7aWYoYT09PW4uRU9GKWJyZWFrO2lmKGEgaW5zdGFuY2VvZiBuLk5hbWUpeyJXTW9kZSI9PT1hLm5hbWU/cGFyc2VXTW9kZShlLHQpOiJDTWFwTmFtZSI9PT1hLm5hbWUmJnBhcnNlQ01hcE5hbWUoZSx0KTtzPWF9ZWxzZSBpZihhIGluc3RhbmNlb2Ygbi5DbWQpc3dpdGNoKGEuY21kKXtjYXNlImVuZGNtYXAiOmJyZWFrIGU7Y2FzZSJ1c2VjbWFwIjpzIGluc3RhbmNlb2Ygbi5OYW1lJiYobz1zLm5hbWUpO2JyZWFrO2Nhc2UiYmVnaW5jb2Rlc3BhY2VyYW5nZSI6cGFyc2VDb2Rlc3BhY2VSYW5nZShlLHQpO2JyZWFrO2Nhc2UiYmVnaW5iZmNoYXIiOnBhcnNlQmZDaGFyKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmNpZGNoYXIiOnBhcnNlQ2lkQ2hhcihlLHQpO2JyZWFrO2Nhc2UiYmVnaW5iZnJhbmdlIjpwYXJzZUJmUmFuZ2UoZSx0KTticmVhaztjYXNlImJlZ2luY2lkcmFuZ2UiOnBhcnNlQ2lkUmFuZ2UoZSx0KX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGMuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxyLndhcm4pKCJJbnZhbGlkIGNNYXAgZGF0YTogIitlKTtjb250aW51ZX0haSYmbyYmKGk9byk7cmV0dXJuIGk/ZXh0ZW5kQ01hcChlLGEsaSk6ZX1hc3luYyBmdW5jdGlvbiBleHRlbmRDTWFwKGUsdCxhKXtlLnVzZUNNYXA9YXdhaXQgY3JlYXRlQnVpbHRJbkNNYXAoYSx0KTtpZigwPT09ZS5udW1Db2Rlc3BhY2VSYW5nZXMpe2NvbnN0IHQ9ZS51c2VDTWFwLmNvZGVzcGFjZVJhbmdlcztmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyllLmNvZGVzcGFjZVJhbmdlc1thXT10W2FdLnNsaWNlKCk7ZS5udW1Db2Rlc3BhY2VSYW5nZXM9ZS51c2VDTWFwLm51bUNvZGVzcGFjZVJhbmdlc31lLnVzZUNNYXAuZm9yRWFjaCgoZnVuY3Rpb24odCxhKXtlLmNvbnRhaW5zKHQpfHxlLm1hcE9uZSh0LGUudXNlQ01hcC5sb29rdXAodCkpfSkpO3JldHVybiBlfWFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJ1aWx0SW5DTWFwKGUsdCl7aWYoIklkZW50aXR5LUgiPT09ZSlyZXR1cm4gbmV3IElkZW50aXR5Q01hcCghMSwyKTtpZigiSWRlbnRpdHktViI9PT1lKXJldHVybiBuZXcgSWRlbnRpdHlDTWFwKCEwLDIpO2lmKCFoLmluY2x1ZGVzKGUpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBDTWFwIG5hbWU6ICIrZSk7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJCdWlsdC1pbiBDTWFwIHBhcmFtZXRlcnMgYXJlIG5vdCBwcm92aWRlZC4iKTtjb25zdHtjTWFwRGF0YTphLGNvbXByZXNzaW9uVHlwZTpufT1hd2FpdCB0KGUpLGk9bmV3IENNYXAoITApO2lmKG49PT1yLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZKXJldHVybihuZXcgcy5CaW5hcnlDTWFwUmVhZGVyKS5wcm9jZXNzKGEsaSwoZT0+ZXh0ZW5kQ01hcChpLHQsZSkpKTtpZihuPT09ci5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUpe2NvbnN0IGU9bmV3IG8uTGV4ZXIobmV3IGwuU3RyZWFtKGEpKTtyZXR1cm4gcGFyc2VDTWFwKGksZSx0LG51bGwpfXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBDTWFwICJjb21wcmVzc2lvblR5cGUiIHZhbHVlOiAke259YCl9dC5DTWFwRmFjdG9yeT1jbGFzcyBDTWFwRmFjdG9yeXtzdGF0aWMgYXN5bmMgY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dCx1c2VDTWFwOmF9KXtpZihlIGluc3RhbmNlb2Ygbi5OYW1lKXJldHVybiBjcmVhdGVCdWlsdEluQ01hcChlLm5hbWUsdCk7aWYoZSBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSl7Y29uc3Qgcj1hd2FpdCBwYXJzZUNNYXAobmV3IENNYXAsbmV3IG8uTGV4ZXIoZSksdCxhKTtyZXR1cm4gci5pc0lkZW50aXR5Q01hcD9jcmVhdGVCdWlsdEluQ01hcChyLm5hbWUsdCk6cn10aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nIHJlcXVpcmVkLiIpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5CaW5hcnlDTWFwUmVhZGVyPXZvaWQgMDt2YXIgcj1hKDIpO2Z1bmN0aW9uIGhleFRvSW50KGUsdCl7bGV0IGE9MDtmb3IobGV0IHI9MDtyPD10O3IrKylhPWE8PDh8ZVtyXTtyZXR1cm4gYT4+PjB9ZnVuY3Rpb24gaGV4VG9TdHIoZSx0KXtyZXR1cm4gMT09PXQ/U3RyaW5nLmZyb21DaGFyQ29kZShlWzBdLGVbMV0pOjM9PT10P1N0cmluZy5mcm9tQ2hhckNvZGUoZVswXSxlWzFdLGVbMl0sZVszXSk6U3RyaW5nLmZyb21DaGFyQ29kZSguLi5lLnN1YmFycmF5KDAsdCsxKSl9ZnVuY3Rpb24gYWRkSGV4KGUsdCxhKXtsZXQgcj0wO2ZvcihsZXQgbj1hO24+PTA7bi0tKXtyKz1lW25dK3Rbbl07ZVtuXT0yNTUmcjtyPj49OH19ZnVuY3Rpb24gaW5jSGV4KGUsdCl7bGV0IGE9MTtmb3IobGV0IHI9dDtyPj0wJiZhPjA7ci0tKXthKz1lW3JdO2Vbcl09MjU1JmE7YT4+PTh9fWNvbnN0IG49MTY7Y2xhc3MgQmluYXJ5Q01hcFN0cmVhbXtjb25zdHJ1Y3RvcihlKXt0aGlzLmJ1ZmZlcj1lO3RoaXMucG9zPTA7dGhpcy5lbmQ9ZS5sZW5ndGg7dGhpcy50bXBCdWY9bmV3IFVpbnQ4QXJyYXkoMTkpfXJlYWRCeXRlKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ1ZmZlclt0aGlzLnBvcysrXX1yZWFkTnVtYmVyKCl7bGV0IGUsdD0wO2Rve2NvbnN0IGE9dGhpcy5yZWFkQnl0ZSgpO2lmKGE8MCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigidW5leHBlY3RlZCBFT0YgaW4gYmNtYXAiKTtlPSEoMTI4JmEpO3Q9dDw8N3wxMjcmYX13aGlsZSghZSk7cmV0dXJuIHR9cmVhZFNpZ25lZCgpe2NvbnN0IGU9dGhpcy5yZWFkTnVtYmVyKCk7cmV0dXJuIDEmZT9+KGU+Pj4xKTplPj4+MX1yZWFkSGV4KGUsdCl7ZS5zZXQodGhpcy5idWZmZXIuc3ViYXJyYXkodGhpcy5wb3MsdGhpcy5wb3MrdCsxKSk7dGhpcy5wb3MrPXQrMX1yZWFkSGV4TnVtYmVyKGUsdCl7bGV0IGE7Y29uc3Qgbj10aGlzLnRtcEJ1ZjtsZXQgaT0wO2Rve2NvbnN0IGU9dGhpcy5yZWFkQnl0ZSgpO2lmKGU8MCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigidW5leHBlY3RlZCBFT0YgaW4gYmNtYXAiKTthPSEoMTI4JmUpO25baSsrXT0xMjcmZX13aGlsZSghYSk7bGV0IHM9dCxvPTAsYz0wO2Zvcig7cz49MDspe2Zvcig7Yzw4JiZuLmxlbmd0aD4wOyl7b3w9blstLWldPDxjO2MrPTd9ZVtzXT0yNTUmbztzLS07bz4+PTg7Yy09OH19cmVhZEhleFNpZ25lZChlLHQpe3RoaXMucmVhZEhleE51bWJlcihlLHQpO2NvbnN0IGE9MSZlW3RdPzI1NTowO2xldCByPTA7Zm9yKGxldCBuPTA7bjw9dDtuKyspe3I9KDEmcik8PDh8ZVtuXTtlW25dPXI+PjFeYX19cmVhZFN0cmluZygpe2NvbnN0IGU9dGhpcy5yZWFkTnVtYmVyKCksdD1uZXcgQXJyYXkoZSk7Zm9yKGxldCBhPTA7YTxlO2ErKyl0W2FdPXRoaXMucmVhZE51bWJlcigpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLnQpfX10LkJpbmFyeUNNYXBSZWFkZXI9Y2xhc3MgQmluYXJ5Q01hcFJlYWRlcnthc3luYyBwcm9jZXNzKGUsdCxhKXtjb25zdCByPW5ldyBCaW5hcnlDTWFwU3RyZWFtKGUpLGk9ci5yZWFkQnl0ZSgpO3QudmVydGljYWw9ISEoMSZpKTtsZXQgcz1udWxsO2NvbnN0IG89bmV3IFVpbnQ4QXJyYXkobiksYz1uZXcgVWludDhBcnJheShuKSxsPW5ldyBVaW50OEFycmF5KG4pLGg9bmV3IFVpbnQ4QXJyYXkobiksdT1uZXcgVWludDhBcnJheShuKTtsZXQgZCxmO2Zvcig7KGY9ci5yZWFkQnl0ZSgpKT49MDspe2NvbnN0IGU9Zj4+NTtpZig3PT09ZSl7c3dpdGNoKDMxJmYpe2Nhc2UgMDpyLnJlYWRTdHJpbmcoKTticmVhaztjYXNlIDE6cz1yLnJlYWRTdHJpbmcoKX1jb250aW51ZX1jb25zdCBhPSEhKDE2JmYpLGk9MTUmZjtpZihpKzE+bil0aHJvdyBuZXcgRXJyb3IoIkJpbmFyeUNNYXBSZWFkZXIucHJvY2VzczogSW52YWxpZCBkYXRhU2l6ZS4iKTtjb25zdCBnPTEscD1yLnJlYWROdW1iZXIoKTtzd2l0Y2goZSl7Y2FzZSAwOnIucmVhZEhleChvLGkpO3IucmVhZEhleE51bWJlcihjLGkpO2FkZEhleChjLG8saSk7dC5hZGRDb2Rlc3BhY2VSYW5nZShpKzEsaGV4VG9JbnQobyxpKSxoZXhUb0ludChjLGkpKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgoYyxpKTtyLnJlYWRIZXhOdW1iZXIobyxpKTthZGRIZXgobyxjLGkpO3IucmVhZEhleE51bWJlcihjLGkpO2FkZEhleChjLG8saSk7dC5hZGRDb2Rlc3BhY2VSYW5nZShpKzEsaGV4VG9JbnQobyxpKSxoZXhUb0ludChjLGkpKX1icmVhaztjYXNlIDE6ci5yZWFkSGV4KG8saSk7ci5yZWFkSGV4TnVtYmVyKGMsaSk7YWRkSGV4KGMsbyxpKTtyLnJlYWROdW1iZXIoKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgoYyxpKTtyLnJlYWRIZXhOdW1iZXIobyxpKTthZGRIZXgobyxjLGkpO3IucmVhZEhleE51bWJlcihjLGkpO2FkZEhleChjLG8saSk7ci5yZWFkTnVtYmVyKCl9YnJlYWs7Y2FzZSAyOnIucmVhZEhleChsLGkpO2Q9ci5yZWFkTnVtYmVyKCk7dC5tYXBPbmUoaGV4VG9JbnQobCxpKSxkKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgobCxpKTtpZighYSl7ci5yZWFkSGV4TnVtYmVyKHUsaSk7YWRkSGV4KGwsdSxpKX1kPXIucmVhZFNpZ25lZCgpKyhkKzEpO3QubWFwT25lKGhleFRvSW50KGwsaSksZCl9YnJlYWs7Y2FzZSAzOnIucmVhZEhleChvLGkpO3IucmVhZEhleE51bWJlcihjLGkpO2FkZEhleChjLG8saSk7ZD1yLnJlYWROdW1iZXIoKTt0Lm1hcENpZFJhbmdlKGhleFRvSW50KG8saSksaGV4VG9JbnQoYyxpKSxkKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgoYyxpKTtpZihhKW8uc2V0KGMpO2Vsc2V7ci5yZWFkSGV4TnVtYmVyKG8saSk7YWRkSGV4KG8sYyxpKX1yLnJlYWRIZXhOdW1iZXIoYyxpKTthZGRIZXgoYyxvLGkpO2Q9ci5yZWFkTnVtYmVyKCk7dC5tYXBDaWRSYW5nZShoZXhUb0ludChvLGkpLGhleFRvSW50KGMsaSksZCl9YnJlYWs7Y2FzZSA0OnIucmVhZEhleChsLGcpO3IucmVhZEhleChoLGkpO3QubWFwT25lKGhleFRvSW50KGwsZyksaGV4VG9TdHIoaCxpKSk7Zm9yKGxldCBlPTE7ZTxwO2UrKyl7aW5jSGV4KGwsZyk7aWYoIWEpe3IucmVhZEhleE51bWJlcih1LGcpO2FkZEhleChsLHUsZyl9aW5jSGV4KGgsaSk7ci5yZWFkSGV4U2lnbmVkKHUsaSk7YWRkSGV4KGgsdSxpKTt0Lm1hcE9uZShoZXhUb0ludChsLGcpLGhleFRvU3RyKGgsaSkpfWJyZWFrO2Nhc2UgNTpyLnJlYWRIZXgobyxnKTtyLnJlYWRIZXhOdW1iZXIoYyxnKTthZGRIZXgoYyxvLGcpO3IucmVhZEhleChoLGkpO3QubWFwQmZSYW5nZShoZXhUb0ludChvLGcpLGhleFRvSW50KGMsZyksaGV4VG9TdHIoaCxpKSk7Zm9yKGxldCBlPTE7ZTxwO2UrKyl7aW5jSGV4KGMsZyk7aWYoYSlvLnNldChjKTtlbHNle3IucmVhZEhleE51bWJlcihvLGcpO2FkZEhleChvLGMsZyl9ci5yZWFkSGV4TnVtYmVyKGMsZyk7YWRkSGV4KGMsbyxnKTtyLnJlYWRIZXgoaCxpKTt0Lm1hcEJmUmFuZ2UoaGV4VG9JbnQobyxnKSxoZXhUb0ludChjLGcpLGhleFRvU3RyKGgsaSkpfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBCaW5hcnlDTWFwUmVhZGVyLnByb2Nlc3MgLSB1bmtub3duIHR5cGU6ICR7ZX1gKX19cmV0dXJuIHM/YShzKTp0fX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5QYXJzZXI9dC5MaW5lYXJpemF0aW9uPXQuTGV4ZXI9dm9pZCAwO3ZhciByPWEoMiksbj1hKDQpLGk9YSgzKSxzPWEoOCksbz1hKDE3KSxjPWEoMTkpLGw9YSgyMCksaD1hKDIyKSx1PWEoMjMpLGQ9YSgyNiksZj1hKDI5KSxnPWEoMzEpLHA9YSgzMiksbT1hKDMzKTtjbGFzcyBQYXJzZXJ7Y29uc3RydWN0b3Ioe2xleGVyOmUseHJlZjp0LGFsbG93U3RyZWFtczphPSExLHJlY292ZXJ5TW9kZTpyPSExfSl7dGhpcy5sZXhlcj1lO3RoaXMueHJlZj10O3RoaXMuYWxsb3dTdHJlYW1zPWE7dGhpcy5yZWNvdmVyeU1vZGU9cjt0aGlzLmltYWdlQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLl9pbWFnZUlkPTA7dGhpcy5yZWZpbGwoKX1yZWZpbGwoKXt0aGlzLmJ1ZjE9dGhpcy5sZXhlci5nZXRPYmooKTt0aGlzLmJ1ZjI9dGhpcy5sZXhlci5nZXRPYmooKX1zaGlmdCgpe2lmKHRoaXMuYnVmMiBpbnN0YW5jZW9mIG4uQ21kJiYiSUQiPT09dGhpcy5idWYyLmNtZCl7dGhpcy5idWYxPXRoaXMuYnVmMjt0aGlzLmJ1ZjI9bnVsbH1lbHNle3RoaXMuYnVmMT10aGlzLmJ1ZjI7dGhpcy5idWYyPXRoaXMubGV4ZXIuZ2V0T2JqKCl9fXRyeVNoaWZ0KCl7dHJ5e3RoaXMuc2hpZnQoKTtyZXR1cm4hMH1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybiExfX1nZXRPYmooZT1udWxsKXtjb25zdCB0PXRoaXMuYnVmMTt0aGlzLnNoaWZ0KCk7aWYodCBpbnN0YW5jZW9mIG4uQ21kKXN3aXRjaCh0LmNtZCl7Y2FzZSJCSSI6cmV0dXJuIHRoaXMubWFrZUlubGluZUltYWdlKGUpO2Nhc2UiWyI6Y29uc3QgYT1bXTtmb3IoOyEoMCxuLmlzQ21kKSh0aGlzLmJ1ZjEsIl0iKSYmdGhpcy5idWYxIT09bi5FT0Y7KWEucHVzaCh0aGlzLmdldE9iaihlKSk7aWYodGhpcy5idWYxPT09bi5FT0Ype2lmKHRoaXMucmVjb3ZlcnlNb2RlKXJldHVybiBhO3Rocm93IG5ldyBpLlBhcnNlckVPRkV4Y2VwdGlvbigiRW5kIG9mIGZpbGUgaW5zaWRlIGFycmF5LiIpfXRoaXMuc2hpZnQoKTtyZXR1cm4gYTtjYXNlIjw8Ijpjb25zdCBzPW5ldyBuLkRpY3QodGhpcy54cmVmKTtmb3IoOyEoMCxuLmlzQ21kKSh0aGlzLmJ1ZjEsIj4+IikmJnRoaXMuYnVmMSE9PW4uRU9GOyl7aWYoISh0aGlzLmJ1ZjEgaW5zdGFuY2VvZiBuLk5hbWUpKXsoMCxyLmluZm8pKCJNYWxmb3JtZWQgZGljdGlvbmFyeToga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpO3RoaXMuc2hpZnQoKTtjb250aW51ZX1jb25zdCB0PXRoaXMuYnVmMS5uYW1lO3RoaXMuc2hpZnQoKTtpZih0aGlzLmJ1ZjE9PT1uLkVPRilicmVhaztzLnNldCh0LHRoaXMuZ2V0T2JqKGUpKX1pZih0aGlzLmJ1ZjE9PT1uLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIHM7dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeS4iKX1pZigoMCxuLmlzQ21kKSh0aGlzLmJ1ZjIsInN0cmVhbSIpKXJldHVybiB0aGlzLmFsbG93U3RyZWFtcz90aGlzLm1ha2VTdHJlYW0ocyxlKTpzO3RoaXMuc2hpZnQoKTtyZXR1cm4gcztkZWZhdWx0OnJldHVybiB0fWlmKE51bWJlci5pc0ludGVnZXIodCkpe2lmKE51bWJlci5pc0ludGVnZXIodGhpcy5idWYxKSYmKDAsbi5pc0NtZCkodGhpcy5idWYyLCJSIikpe2NvbnN0IGU9bi5SZWYuZ2V0KHQsdGhpcy5idWYxKTt0aGlzLnNoaWZ0KCk7dGhpcy5zaGlmdCgpO3JldHVybiBlfXJldHVybiB0fXJldHVybiJzdHJpbmciPT10eXBlb2YgdCYmZT9lLmRlY3J5cHRTdHJpbmcodCk6dH1maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKXtjb25zdHtrbm93bkNvbW1hbmRzOnR9PXRoaXMubGV4ZXIsYT1lLnBvcztsZXQgbyxjLGw9MDtmb3IoOy0xIT09KG89ZS5nZXRCeXRlKCkpOylpZigwPT09bClsPTY5PT09bz8xOjA7ZWxzZSBpZigxPT09bClsPTczPT09bz8yOjA7ZWxzZSBpZigzMj09PW98fDEwPT09b3x8MTM9PT1vKXtjPWUucG9zO2NvbnN0IGE9ZS5wZWVrQnl0ZXMoMTUpLGk9YS5sZW5ndGg7aWYoMD09PWkpYnJlYWs7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7bz1hW2VdO2lmKCgwIT09b3x8MD09PWFbZSsxXSkmJigxMCE9PW8mJjEzIT09byYmKG88MzJ8fG8+MTI3KSkpe2w9MDticmVha319aWYoMiE9PWwpY29udGludWU7aWYoIXQpeygwLHIud2FybikoImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kIC0gYGxleGVyLmtub3duQ29tbWFuZHNgIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1jb25zdCBoPW5ldyBMZXhlcihuZXcgcy5TdHJlYW0oYS5zbGljZSgpKSx0KTtoLl9oZXhTdHJpbmdXYXJuPSgpPT57fTtsZXQgdT0wO2Zvcig7Oyl7Y29uc3QgZT1oLmdldE9iaigpO2lmKGU9PT1uLkVPRil7bD0wO2JyZWFrfWlmKGUgaW5zdGFuY2VvZiBuLkNtZCl7Y29uc3QgYT10W2UuY21kXTtpZighYSl7bD0wO2JyZWFrfWlmKGEudmFyaWFibGVBcmdzP3U8PWEubnVtQXJnczp1PT09YS5udW1BcmdzKWJyZWFrO3U9MH1lbHNlIHUrK31pZigyPT09bClicmVha31lbHNlIGw9MDtpZigtMT09PW8peygwLHIud2FybikoImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOiBSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXIiKTtpZihjKXsoMCxyLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpO2Uuc2tpcCgtKGUucG9zLWMpKX19bGV0IGg9NDtlLnNraXAoLWgpO289ZS5wZWVrQnl0ZSgpO2Uuc2tpcChoKTsoMCxpLmlzV2hpdGVTcGFjZSkobyl8fGgtLTtyZXR1cm4gZS5wb3MtaC1hfWZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoZSl7Y29uc3QgdD1lLnBvcztsZXQgYSxuLGk9ITE7Zm9yKDstMSE9PShhPWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09YSl7c3dpdGNoKGUuZ2V0Qnl0ZSgpKXtjYXNlIDA6YnJlYWs7Y2FzZSAyNTU6ZS5za2lwKC0xKTticmVhaztjYXNlIDIxNzppPSEwO2JyZWFrO2Nhc2UgMTkyOmNhc2UgMTkzOmNhc2UgMTk0OmNhc2UgMTk1OmNhc2UgMTk3OmNhc2UgMTk4OmNhc2UgMTk5OmNhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjAzOmNhc2UgMjA1OmNhc2UgMjA2OmNhc2UgMjA3OmNhc2UgMTk2OmNhc2UgMjA0OmNhc2UgMjE4OmNhc2UgMjE5OmNhc2UgMjIwOmNhc2UgMjIxOmNhc2UgMjIyOmNhc2UgMjIzOmNhc2UgMjI0OmNhc2UgMjI1OmNhc2UgMjI2OmNhc2UgMjI3OmNhc2UgMjI4OmNhc2UgMjI5OmNhc2UgMjMwOmNhc2UgMjMxOmNhc2UgMjMyOmNhc2UgMjMzOmNhc2UgMjM0OmNhc2UgMjM1OmNhc2UgMjM2OmNhc2UgMjM3OmNhc2UgMjM4OmNhc2UgMjM5OmNhc2UgMjU0Om49ZS5nZXRVaW50MTYoKTtuPjI/ZS5za2lwKG4tMik6ZS5za2lwKC0yKX1pZihpKWJyZWFrfWNvbnN0IHM9ZS5wb3MtdDtpZigtMT09PWEpeygwLHIud2FybikoIklubGluZSBEQ1REZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0kgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIik7ZS5za2lwKC1zKTtyZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKX10aGlzLmlubGluZVN0cmVhbVNraXBFSShlKTtyZXR1cm4gc31maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChlKXtjb25zdCB0PWUucG9zO2xldCBhO2Zvcig7LTEhPT0oYT1lLmdldEJ5dGUoKSk7KWlmKDEyNj09PWEpe2NvbnN0IHQ9ZS5wb3M7YT1lLnBlZWtCeXRlKCk7Zm9yKDsoMCxpLmlzV2hpdGVTcGFjZSkoYSk7KXtlLnNraXAoKTthPWUucGVla0J5dGUoKX1pZig2Mj09PWEpe2Uuc2tpcCgpO2JyZWFrfWlmKGUucG9zPnQpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoMik7aWYoNjk9PT10WzBdJiY3Mz09PXRbMV0pYnJlYWt9fWNvbnN0IG49ZS5wb3MtdDtpZigtMT09PWEpeygwLHIud2FybikoIklubGluZSBBU0NJSTg1RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtbik7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIG59ZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGUpe2NvbnN0IHQ9ZS5wb3M7bGV0IGE7Zm9yKDstMSE9PShhPWUuZ2V0Qnl0ZSgpKSYmNjIhPT1hOyk7Y29uc3Qgbj1lLnBvcy10O2lmKC0xPT09YSl7KDAsci53YXJuKSgiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtbik7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIG59aW5saW5lU3RyZWFtU2tpcEVJKGUpe2xldCB0LGE9MDtmb3IoOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09YSlhPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09YSlhPTczPT09dD8yOjA7ZWxzZSBpZigyPT09YSlicmVha31tYWtlSW5saW5lSW1hZ2UoZSl7Y29uc3QgdD10aGlzLmxleGVyLGE9dC5zdHJlYW0saT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBzO2Zvcig7ISgwLG4uaXNDbWQpKHRoaXMuYnVmMSwiSUQiKSYmdGhpcy5idWYxIT09bi5FT0Y7KXtpZighKHRoaXMuYnVmMSBpbnN0YW5jZW9mIG4uTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkRpY3Rpb25hcnkga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpO2NvbnN0IHQ9dGhpcy5idWYxLm5hbWU7dGhpcy5zaGlmdCgpO2lmKHRoaXMuYnVmMT09PW4uRU9GKWJyZWFrO2lbdF09dGhpcy5nZXRPYmooZSl9LTEhPT10LmJlZ2luSW5saW5lSW1hZ2VQb3MmJihzPWEucG9zLXQuYmVnaW5JbmxpbmVJbWFnZVBvcyk7Y29uc3Qgbz10aGlzLnhyZWYuZmV0Y2hJZlJlZihpLkZ8fGkuRmlsdGVyKTtsZXQgYztpZihvIGluc3RhbmNlb2Ygbi5OYW1lKWM9by5uYW1lO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShvKSl7Y29uc3QgZT10aGlzLnhyZWYuZmV0Y2hJZlJlZihvWzBdKTtlIGluc3RhbmNlb2Ygbi5OYW1lJiYoYz1lLm5hbWUpfWNvbnN0IGw9YS5wb3M7bGV0IGgsdTtzd2l0Y2goYyl7Y2FzZSJEQ1QiOmNhc2UiRENURGVjb2RlIjpoPXRoaXMuZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChhKTticmVhaztjYXNlIkE4NSI6Y2FzZSJBU0NJSTg1RGVjb2RlIjpoPXRoaXMuZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQoYSk7YnJlYWs7Y2FzZSJBSHgiOmNhc2UiQVNDSUlIZXhEZWNvZGUiOmg9dGhpcy5maW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQoYSk7YnJlYWs7ZGVmYXVsdDpoPXRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoYSl9aWYoaDwxZTMmJnM+MCl7Y29uc3QgZT1hLnBvczthLnBvcz10LmJlZ2luSW5saW5lSW1hZ2VQb3M7dT1mdW5jdGlvbiBnZXRJbmxpbmVJbWFnZUNhY2hlS2V5KGUpe2NvbnN0IHQ9W10sYT1lLmxlbmd0aDtsZXQgcj0wO2Zvcig7cjxhLTE7KXQucHVzaChlW3IrK108PDh8ZVtyKytdKTtyPGEmJnQucHVzaChlW3JdKTtyZXR1cm4gYSsiXyIrU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQpfShhLmdldEJ5dGVzKHMraCkpO2EucG9zPWU7Y29uc3Qgcj10aGlzLmltYWdlQ2FjaGVbdV07aWYodm9pZCAwIT09cil7dGhpcy5idWYyPW4uQ21kLmdldCgiRUkiKTt0aGlzLnNoaWZ0KCk7ci5yZXNldCgpO3JldHVybiByfX1jb25zdCBkPW5ldyBuLkRpY3QodGhpcy54cmVmKTtmb3IoY29uc3QgZSBpbiBpKWQuc2V0KGUsaVtlXSk7bGV0IGY9YS5tYWtlU3ViU3RyZWFtKGwsaCxkKTtlJiYoZj1lLmNyZWF0ZVN0cmVhbShmLGgpKTtmPXRoaXMuZmlsdGVyKGYsZCxoKTtmLmRpY3Q9ZDtpZih2b2lkIDAhPT11KXtmLmNhY2hlS2V5PSJpbmxpbmVfaW1nXyIrICsrdGhpcy5faW1hZ2VJZDt0aGlzLmltYWdlQ2FjaGVbdV09Zn10aGlzLmJ1ZjI9bi5DbWQuZ2V0KCJFSSIpO3RoaXMuc2hpZnQoKTtyZXR1cm4gZn1fZmluZFN0cmVhbUxlbmd0aChlLHQpe2NvbnN0e3N0cmVhbTphfT10aGlzLmxleGVyO2EucG9zPWU7Y29uc3Qgcj10Lmxlbmd0aDtmb3IoO2EucG9zPGEuZW5kOyl7Y29uc3Qgbj1hLnBlZWtCeXRlcygyMDQ4KSxpPW4ubGVuZ3RoLXI7aWYoaTw9MClicmVhaztsZXQgcz0wO2Zvcig7czxpOyl7bGV0IGk9MDtmb3IoO2k8ciYmbltzK2ldPT09dFtpXTspaSsrO2lmKGk+PXIpe2EucG9zKz1zO3JldHVybiBhLnBvcy1lfXMrK31hLnBvcys9aX1yZXR1cm4tMX1tYWtlU3RyZWFtKGUsdCl7Y29uc3QgYT10aGlzLmxleGVyO2xldCBzPWEuc3RyZWFtO2Euc2tpcFRvTmV4dExpbmUoKTtjb25zdCBvPXMucG9zLTE7bGV0IGM9ZS5nZXQoIkxlbmd0aCIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGMpKXsoMCxyLmluZm8pKGBCYWQgbGVuZ3RoICIke2MmJmMudG9TdHJpbmcoKX0iIGluIHN0cmVhbS5gKTtjPTB9cy5wb3M9bytjO2EubmV4dENoYXIoKTtpZih0aGlzLnRyeVNoaWZ0KCkmJigwLG4uaXNDbWQpKHRoaXMuYnVmMiwiZW5kc3RyZWFtIikpdGhpcy5zaGlmdCgpO2Vsc2V7Y29uc3QgZT1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTE1LDExNiwxMTQsMTAxLDk3LDEwOV0pO2xldCB0PXRoaXMuX2ZpbmRTdHJlYW1MZW5ndGgobyxlKTtpZih0PDApe2NvbnN0IGE9MTtmb3IobGV0IG49MTtuPD1hO24rKyl7Y29uc3QgYT1lLmxlbmd0aC1uLGM9ZS5zbGljZSgwLGEpLGw9dGhpcy5fZmluZFN0cmVhbUxlbmd0aChvLGMpO2lmKGw+PTApe2NvbnN0IGU9cy5wZWVrQnl0ZXMoYSsxKVthXTtpZighKDAsaS5pc1doaXRlU3BhY2UpKGUpKWJyZWFrOygwLHIuaW5mbykoYEZvdW5kICIkeygwLHIuYnl0ZXNUb1N0cmluZykoYyl9IiB3aGVuIHNlYXJjaGluZyBmb3IgZW5kc3RyZWFtIGNvbW1hbmQuYCk7dD1sO2JyZWFrfX1pZih0PDApdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1pc3NpbmcgZW5kc3RyZWFtIGNvbW1hbmQuIil9Yz10O2EubmV4dENoYXIoKTt0aGlzLnNoaWZ0KCk7dGhpcy5zaGlmdCgpfXRoaXMuc2hpZnQoKTtzPXMubWFrZVN1YlN0cmVhbShvLGMsZSk7dCYmKHM9dC5jcmVhdGVTdHJlYW0ocyxjKSk7cz10aGlzLmZpbHRlcihzLGUsYyk7cy5kaWN0PWU7cmV0dXJuIHN9ZmlsdGVyKGUsdCxhKXtsZXQgaT10LmdldCgiRiIsIkZpbHRlciIpLHM9dC5nZXQoIkRQIiwiRGVjb2RlUGFybXMiKTtpZihpIGluc3RhbmNlb2Ygbi5OYW1lKXtBcnJheS5pc0FycmF5KHMpJiYoMCxyLndhcm4pKCIvRGVjb2RlUGFybXMgc2hvdWxkIG5vdCBiZSBhbiBBcnJheSwgd2hlbiAvRmlsdGVyIGlzIGEgTmFtZS4iKTtyZXR1cm4gdGhpcy5tYWtlRmlsdGVyKGUsaS5uYW1lLGEscyl9bGV0IG89YTtpZihBcnJheS5pc0FycmF5KGkpKXtjb25zdCB0PWksYT1zO2ZvcihsZXQgYz0wLGw9dC5sZW5ndGg7YzxsOysrYyl7aT10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W2NdKTtpZighKGkgaW5zdGFuY2VvZiBuLk5hbWUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBCYWQgZmlsdGVyIG5hbWUgIiR7aX0iYCk7cz1udWxsO0FycmF5LmlzQXJyYXkoYSkmJmMgaW4gYSYmKHM9dGhpcy54cmVmLmZldGNoSWZSZWYoYVtjXSkpO2U9dGhpcy5tYWtlRmlsdGVyKGUsaS5uYW1lLG8scyk7bz1udWxsfX1yZXR1cm4gZX1tYWtlRmlsdGVyKGUsdCxhLG4pe2lmKDA9PT1hKXsoMCxyLndhcm4pKGBFbXB0eSAiJHt0fSIgc3RyZWFtLmApO3JldHVybiBuZXcgcy5OdWxsU3RyZWFtfXRyeXtzd2l0Y2godCl7Y2FzZSJGbCI6Y2FzZSJGbGF0ZURlY29kZSI6cmV0dXJuIG4/bmV3IHAuUHJlZGljdG9yU3RyZWFtKG5ldyBoLkZsYXRlU3RyZWFtKGUsYSksYSxuKTpuZXcgaC5GbGF0ZVN0cmVhbShlLGEpO2Nhc2UiTFpXIjpjYXNlIkxaV0RlY29kZSI6bGV0IHQ9MTtpZihuKXtuLmhhcygiRWFybHlDaGFuZ2UiKSYmKHQ9bi5nZXQoIkVhcmx5Q2hhbmdlIikpO3JldHVybiBuZXcgcC5QcmVkaWN0b3JTdHJlYW0obmV3IGcuTFpXU3RyZWFtKGUsYSx0KSxhLG4pfXJldHVybiBuZXcgZy5MWldTdHJlYW0oZSxhLHQpO2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6cmV0dXJuIG5ldyBkLkpwZWdTdHJlYW0oZSxhLG4pO2Nhc2UiSlBYIjpjYXNlIkpQWERlY29kZSI6cmV0dXJuIG5ldyBmLkpweFN0cmVhbShlLGEsbik7Y2FzZSJBODUiOmNhc2UiQVNDSUk4NURlY29kZSI6cmV0dXJuIG5ldyBvLkFzY2lpODVTdHJlYW0oZSxhKTtjYXNlIkFIeCI6Y2FzZSJBU0NJSUhleERlY29kZSI6cmV0dXJuIG5ldyBjLkFzY2lpSGV4U3RyZWFtKGUsYSk7Y2FzZSJDQ0YiOmNhc2UiQ0NJVFRGYXhEZWNvZGUiOnJldHVybiBuZXcgbC5DQ0lUVEZheFN0cmVhbShlLGEsbik7Y2FzZSJSTCI6Y2FzZSJSdW5MZW5ndGhEZWNvZGUiOnJldHVybiBuZXcgbS5SdW5MZW5ndGhTdHJlYW0oZSxhKTtjYXNlIkpCSUcyRGVjb2RlIjpyZXR1cm4gbmV3IHUuSmJpZzJTdHJlYW0oZSxhLG4pfSgwLHIud2FybikoYEZpbHRlciAiJHt0fSIgaXMgbm90IHN1cHBvcnRlZC5gKTtyZXR1cm4gZX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoYEludmFsaWQgc3RyZWFtOiAiJHtlfSJgKTtyZXR1cm4gbmV3IHMuTnVsbFN0cmVhbX19fXQuUGFyc2VyPVBhcnNlcjtjb25zdCBiPVsxLDAsMCwwLDAsMCwwLDAsMCwxLDEsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDIsMCwwLDIsMiwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXTtmdW5jdGlvbiB0b0hleERpZ2l0KGUpe3JldHVybiBlPj00OCYmZTw9NTc/MTUmZTplPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDI/OSsoMTUmZSk6LTF9Y2xhc3MgTGV4ZXJ7Y29uc3RydWN0b3IoZSx0PW51bGwpe3RoaXMuc3RyZWFtPWU7dGhpcy5uZXh0Q2hhcigpO3RoaXMuc3RyQnVmPVtdO3RoaXMua25vd25Db21tYW5kcz10O3RoaXMuX2hleFN0cmluZ051bVdhcm49MDt0aGlzLmJlZ2luSW5saW5lSW1hZ2VQb3M9LTF9bmV4dENoYXIoKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9cGVla0NoYXIoKXtyZXR1cm4gdGhpcy5zdHJlYW0ucGVla0J5dGUoKX1nZXROdW1iZXIoKXtsZXQgZT10aGlzLmN1cnJlbnRDaGFyLHQ9ITEsYT0wLG49MTtpZig0NT09PWUpe249LTE7ZT10aGlzLm5leHRDaGFyKCk7NDU9PT1lJiYoZT10aGlzLm5leHRDaGFyKCkpfWVsc2UgNDM9PT1lJiYoZT10aGlzLm5leHRDaGFyKCkpO2lmKDEwPT09ZXx8MTM9PT1lKWRve2U9dGhpcy5uZXh0Q2hhcigpfXdoaWxlKDEwPT09ZXx8MTM9PT1lKTtpZig0Nj09PWUpe2E9MTA7ZT10aGlzLm5leHRDaGFyKCl9aWYoZTw0OHx8ZT41Nyl7Y29uc3QgdD1gSW52YWxpZCBudW1iZXI6ICR7U3RyaW5nLmZyb21DaGFyQ29kZShlKX0gKGNoYXJDb2RlICR7ZX0pYDtpZigoMCxpLmlzV2hpdGVTcGFjZSkoZSl8fC0xPT09ZSl7KDAsci5pbmZvKShgTGV4ZXIuZ2V0TnVtYmVyIC0gIiR7dH0iLmApO3JldHVybiAwfXRocm93IG5ldyByLkZvcm1hdEVycm9yKHQpfWxldCBzPWUtNDgsbz0wLGM9MTtmb3IoOyhlPXRoaXMubmV4dENoYXIoKSk+PTA7KWlmKGU+PTQ4JiZlPD01Nyl7Y29uc3Qgcj1lLTQ4O2lmKHQpbz0xMCpvK3I7ZWxzZXswIT09YSYmKGEqPTEwKTtzPTEwKnMrcn19ZWxzZSBpZig0Nj09PWUpe2lmKDAhPT1hKWJyZWFrO2E9MX1lbHNlIGlmKDQ1PT09ZSkoMCxyLndhcm4pKCJCYWRseSBmb3JtYXR0ZWQgbnVtYmVyOiBtaW51cyBzaWduIGluIHRoZSBtaWRkbGUiKTtlbHNle2lmKDY5IT09ZSYmMTAxIT09ZSlicmVhaztlPXRoaXMucGVla0NoYXIoKTtpZig0Mz09PWV8fDQ1PT09ZSl7Yz00NT09PWU/LTE6MTt0aGlzLm5leHRDaGFyKCl9ZWxzZSBpZihlPDQ4fHxlPjU3KWJyZWFrO3Q9ITB9MCE9PWEmJihzLz1hKTt0JiYocyo9MTAqKihjKm8pKTtyZXR1cm4gbipzfWdldFN0cmluZygpe2xldCBlPTEsdD0hMTtjb25zdCBhPXRoaXMuc3RyQnVmO2EubGVuZ3RoPTA7bGV0IG49dGhpcy5uZXh0Q2hhcigpO2Zvcig7Oyl7bGV0IGk9ITE7c3dpdGNoKDB8bil7Y2FzZS0xOigwLHIud2FybikoIlVudGVybWluYXRlZCBzdHJpbmciKTt0PSEwO2JyZWFrO2Nhc2UgNDA6KytlO2EucHVzaCgiKCIpO2JyZWFrO2Nhc2UgNDE6aWYoMD09LS1lKXt0aGlzLm5leHRDaGFyKCk7dD0hMH1lbHNlIGEucHVzaCgiKSIpO2JyZWFrO2Nhc2UgOTI6bj10aGlzLm5leHRDaGFyKCk7c3dpdGNoKG4pe2Nhc2UtMTooMCxyLndhcm4pKCJVbnRlcm1pbmF0ZWQgc3RyaW5nIik7dD0hMDticmVhaztjYXNlIDExMDphLnB1c2goIlxuIik7YnJlYWs7Y2FzZSAxMTQ6YS5wdXNoKCJcciIpO2JyZWFrO2Nhc2UgMTE2OmEucHVzaCgiXHQiKTticmVhaztjYXNlIDk4OmEucHVzaCgiXGIiKTticmVhaztjYXNlIDEwMjphLnB1c2goIlxmIik7YnJlYWs7Y2FzZSA5MjpjYXNlIDQwOmNhc2UgNDE6YS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobikpO2JyZWFrO2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpsZXQgZT0xNSZuO249dGhpcy5uZXh0Q2hhcigpO2k9ITA7aWYobj49NDgmJm48PTU1KXtlPShlPDwzKSsoMTUmbik7bj10aGlzLm5leHRDaGFyKCk7aWYobj49NDgmJm48PTU1KXtpPSExO2U9KGU8PDMpKygxNSZuKX19YS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO2JyZWFrO2Nhc2UgMTM6MTA9PT10aGlzLnBlZWtDaGFyKCkmJnRoaXMubmV4dENoYXIoKTticmVhaztjYXNlIDEwOmJyZWFrO2RlZmF1bHQ6YS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobikpfWJyZWFrO2RlZmF1bHQ6YS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobikpfWlmKHQpYnJlYWs7aXx8KG49dGhpcy5uZXh0Q2hhcigpKX1yZXR1cm4gYS5qb2luKCIiKX1nZXROYW1lKCl7bGV0IGUsdDtjb25zdCBhPXRoaXMuc3RyQnVmO2EubGVuZ3RoPTA7Zm9yKDsoZT10aGlzLm5leHRDaGFyKCkpPj0wJiYhYltlXTspaWYoMzU9PT1lKXtlPXRoaXMubmV4dENoYXIoKTtpZihiW2VdKXsoMCxyLndhcm4pKCJMZXhlcl9nZXROYW1lOiBOVU1CRVIgU0lHTiAoIykgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgaGV4YWRlY2ltYWwgbnVtYmVyLiIpO2EucHVzaCgiIyIpO2JyZWFrfWNvbnN0IG49dG9IZXhEaWdpdChlKTtpZigtMSE9PW4pe3Q9ZTtlPXRoaXMubmV4dENoYXIoKTtjb25zdCBpPXRvSGV4RGlnaXQoZSk7aWYoLTE9PT1pKXsoMCxyLndhcm4pKGBMZXhlcl9nZXROYW1lOiBJbGxlZ2FsIGRpZ2l0ICgke1N0cmluZy5mcm9tQ2hhckNvZGUoZSl9KSBpbiBoZXhhZGVjaW1hbCBudW1iZXIuYCk7YS5wdXNoKCIjIixTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKTtpZihiW2VdKWJyZWFrO2EucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTtjb250aW51ZX1hLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuPDw0fGkpKX1lbHNlIGEucHVzaCgiIyIsU3RyaW5nLmZyb21DaGFyQ29kZShlKSl9ZWxzZSBhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7YS5sZW5ndGg+MTI3JiYoMCxyLndhcm4pKGBOYW1lIHRva2VuIGlzIGxvbmdlciB0aGFuIGFsbG93ZWQgYnkgdGhlIHNwZWM6ICR7YS5sZW5ndGh9YCk7cmV0dXJuIG4uTmFtZS5nZXQoYS5qb2luKCIiKSl9X2hleFN0cmluZ1dhcm4oZSl7NSE9dGhpcy5faGV4U3RyaW5nTnVtV2FybisrP3RoaXMuX2hleFN0cmluZ051bVdhcm4+NXx8KDAsci53YXJuKShgZ2V0SGV4U3RyaW5nIC0gaWdub3JpbmcgaW52YWxpZCBjaGFyYWN0ZXI6ICR7ZX1gKTooMCxyLndhcm4pKCJnZXRIZXhTdHJpbmcgLSBpZ25vcmluZyBhZGRpdGlvbmFsIGludmFsaWQgY2hhcmFjdGVycy4iKX1nZXRIZXhTdHJpbmcoKXtjb25zdCBlPXRoaXMuc3RyQnVmO2UubGVuZ3RoPTA7bGV0IHQsYSxuPXRoaXMuY3VycmVudENoYXIsaT0hMDt0aGlzLl9oZXhTdHJpbmdOdW1XYXJuPTA7Zm9yKDs7KXtpZihuPDApeygwLHIud2FybikoIlVudGVybWluYXRlZCBoZXggc3RyaW5nIik7YnJlYWt9aWYoNjI9PT1uKXt0aGlzLm5leHRDaGFyKCk7YnJlYWt9aWYoMSE9PWJbbl0pe2lmKGkpe3Q9dG9IZXhEaWdpdChuKTtpZigtMT09PXQpe3RoaXMuX2hleFN0cmluZ1dhcm4obik7bj10aGlzLm5leHRDaGFyKCk7Y29udGludWV9fWVsc2V7YT10b0hleERpZ2l0KG4pO2lmKC0xPT09YSl7dGhpcy5faGV4U3RyaW5nV2FybihuKTtuPXRoaXMubmV4dENoYXIoKTtjb250aW51ZX1lLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh0PDw0fGEpKX1pPSFpO249dGhpcy5uZXh0Q2hhcigpfWVsc2Ugbj10aGlzLm5leHRDaGFyKCl9cmV0dXJuIGUuam9pbigiIil9Z2V0T2JqKCl7bGV0IGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyO2Zvcig7Oyl7aWYodDwwKXJldHVybiBuLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKDEhPT1iW3RdKWJyZWFrO3Q9dGhpcy5uZXh0Q2hhcigpfXN3aXRjaCgwfHQpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7Y2FzZSA0MDpyZXR1cm4gdGhpcy5nZXRTdHJpbmcoKTtjYXNlIDQ3OnJldHVybiB0aGlzLmdldE5hbWUoKTtjYXNlIDkxOnRoaXMubmV4dENoYXIoKTtyZXR1cm4gbi5DbWQuZ2V0KCJbIik7Y2FzZSA5Mzp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIG4uQ21kLmdldCgiXSIpO2Nhc2UgNjA6dD10aGlzLm5leHRDaGFyKCk7aWYoNjA9PT10KXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIG4uQ21kLmdldCgiPDwiKX1yZXR1cm4gdGhpcy5nZXRIZXhTdHJpbmcoKTtjYXNlIDYyOnQ9dGhpcy5uZXh0Q2hhcigpO2lmKDYyPT09dCl7dGhpcy5uZXh0Q2hhcigpO3JldHVybiBuLkNtZC5nZXQoIj4+Iil9cmV0dXJuIG4uQ21kLmdldCgiPiIpO2Nhc2UgMTIzOnRoaXMubmV4dENoYXIoKTtyZXR1cm4gbi5DbWQuZ2V0KCJ7Iik7Y2FzZSAxMjU6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBuLkNtZC5nZXQoIn0iKTtjYXNlIDQxOnRoaXMubmV4dENoYXIoKTt0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSWxsZWdhbCBjaGFyYWN0ZXI6ICR7dH1gKX1sZXQgYT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKHQ8MzJ8fHQ+MTI3KXtjb25zdCBlPXRoaXMucGVla0NoYXIoKTtpZihlPj0zMiYmZTw9MTI3KXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIG4uQ21kLmdldChhKX19Y29uc3QgaT10aGlzLmtub3duQ29tbWFuZHM7bGV0IHM9dm9pZCAwIT09aT8uW2FdO2Zvcig7KHQ9dGhpcy5uZXh0Q2hhcigpKT49MCYmIWJbdF07KXtjb25zdCBlPWErU3RyaW5nLmZyb21DaGFyQ29kZSh0KTtpZihzJiZ2b2lkIDA9PT1pW2VdKWJyZWFrO2lmKDEyOD09PWEubGVuZ3RoKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBDb21tYW5kIHRva2VuIHRvbyBsb25nOiAke2EubGVuZ3RofWApO2E9ZTtzPXZvaWQgMCE9PWk/LlthXX1pZigidHJ1ZSI9PT1hKXJldHVybiEwO2lmKCJmYWxzZSI9PT1hKXJldHVybiExO2lmKCJudWxsIj09PWEpcmV0dXJuIG51bGw7IkJJIj09PWEmJih0aGlzLmJlZ2luSW5saW5lSW1hZ2VQb3M9dGhpcy5zdHJlYW0ucG9zKTtyZXR1cm4gbi5DbWQuZ2V0KGEpfXNraXBUb05leHRMaW5lKCl7bGV0IGU9dGhpcy5jdXJyZW50Q2hhcjtmb3IoO2U+PTA7KXtpZigxMz09PWUpe2U9dGhpcy5uZXh0Q2hhcigpOzEwPT09ZSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEwPT09ZSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWU9dGhpcy5uZXh0Q2hhcigpfX19dC5MZXhlcj1MZXhlcjt0LkxpbmVhcml6YXRpb249Y2xhc3MgTGluZWFyaXphdGlvbntzdGF0aWMgY3JlYXRlKGUpe2Z1bmN0aW9uIGdldEludChlLHQsYT0hMSl7Y29uc3Qgcj1lLmdldCh0KTtpZihOdW1iZXIuaXNJbnRlZ2VyKHIpJiYoYT9yPj0wOnI+MCkpcmV0dXJuIHI7dGhyb3cgbmV3IEVycm9yKGBUaGUgIiR7dH0iIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuYCl9Y29uc3QgdD1uZXcgUGFyc2VyKHtsZXhlcjpuZXcgTGV4ZXIoZSkseHJlZjpudWxsfSksYT10LmdldE9iaigpLHI9dC5nZXRPYmooKSxpPXQuZ2V0T2JqKCkscz10LmdldE9iaigpO2xldCBvLGM7aWYoIShOdW1iZXIuaXNJbnRlZ2VyKGEpJiZOdW1iZXIuaXNJbnRlZ2VyKHIpJiYoMCxuLmlzQ21kKShpLCJvYmoiKSYmcyBpbnN0YW5jZW9mIG4uRGljdCYmIm51bWJlciI9PXR5cGVvZihvPXMuZ2V0KCJMaW5lYXJpemVkIikpJiZvPjApKXJldHVybiBudWxsO2lmKChjPWdldEludChzLCJMIikpIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdUaGUgIkwiIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXMgbm90IGVxdWFsIHRoZSBzdHJlYW0gbGVuZ3RoLicpO3JldHVybntsZW5ndGg6YyxoaW50czpmdW5jdGlvbiBnZXRIaW50cyhlKXtjb25zdCB0PWUuZ2V0KCJIIik7bGV0IGE7aWYoQXJyYXkuaXNBcnJheSh0KSYmKDI9PT0oYT10Lmxlbmd0aCl8fDQ9PT1hKSl7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7Y29uc3QgYT10W2VdO2lmKCEoTnVtYmVyLmlzSW50ZWdlcihhKSYmYT4wKSl0aHJvdyBuZXcgRXJyb3IoYEhpbnQgKCR7ZX0pIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC5gKX1yZXR1cm4gdH10aHJvdyBuZXcgRXJyb3IoIkhpbnQgYXJyYXkgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLiIpfShzKSxvYmplY3ROdW1iZXJGaXJzdDpnZXRJbnQocywiTyIpLGVuZEZpcnN0OmdldEludChzLCJFIiksbnVtUGFnZXM6Z2V0SW50KHMsIk4iKSxtYWluWFJlZkVudHJpZXNPZmZzZXQ6Z2V0SW50KHMsIlQiKSxwYWdlRmlyc3Q6cy5oYXMoIlAiKT9nZXRJbnQocywiUCIsITApOjB9fX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Bc2NpaTg1U3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE4KSxuPWEoMyk7Y2xhc3MgQXNjaWk4NVN0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCl7dCYmKHQqPS44KTtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5pbnB1dD1uZXcgVWludDhBcnJheSg1KX1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyO2xldCB0PWUuZ2V0Qnl0ZSgpO2Zvcig7KDAsbi5pc1doaXRlU3BhY2UpKHQpOyl0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dHx8MTI2PT09dCl7dGhpcy5lb2Y9ITA7cmV0dXJufWNvbnN0IGE9dGhpcy5idWZmZXJMZW5ndGg7bGV0IHIsaTtpZigxMjI9PT10KXtyPXRoaXMuZW5zdXJlQnVmZmVyKGErNCk7Zm9yKGk9MDtpPDQ7KytpKXJbYStpXT0wO3RoaXMuYnVmZmVyTGVuZ3RoKz00fWVsc2V7Y29uc3Qgcz10aGlzLmlucHV0O3NbMF09dDtmb3IoaT0xO2k8NTsrK2kpe3Q9ZS5nZXRCeXRlKCk7Zm9yKDsoMCxuLmlzV2hpdGVTcGFjZSkodCk7KXQ9ZS5nZXRCeXRlKCk7c1tpXT10O2lmKC0xPT09dHx8MTI2PT09dClicmVha31yPXRoaXMuZW5zdXJlQnVmZmVyKGEraS0xKTt0aGlzLmJ1ZmZlckxlbmd0aCs9aS0xO2lmKGk8NSl7Zm9yKDtpPDU7KytpKXNbaV09MTE3O3RoaXMuZW9mPSEwfWxldCBvPTA7Zm9yKGk9MDtpPDU7KytpKW89ODUqbysoc1tpXS0zMyk7Zm9yKGk9MztpPj0wOy0taSl7clthK2ldPTI1NSZvO28+Pj04fX19fXQuQXNjaWk4NVN0cmVhbT1Bc2NpaTg1U3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU3RyZWFtc1NlcXVlbmNlU3RyZWFtPXQuRGVjb2RlU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDUpLG49YSg4KTtjb25zdCBpPW5ldyBVaW50OEFycmF5KDApO2NsYXNzIERlY29kZVN0cmVhbSBleHRlbmRzIHIuQmFzZVN0cmVhbXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpO3RoaXMuX3Jhd01pbkJ1ZmZlckxlbmd0aD1lfHwwO3RoaXMucG9zPTA7dGhpcy5idWZmZXJMZW5ndGg9MDt0aGlzLmVvZj0hMTt0aGlzLmJ1ZmZlcj1pO3RoaXMubWluQnVmZmVyTGVuZ3RoPTUxMjtpZihlKWZvcig7dGhpcy5taW5CdWZmZXJMZW5ndGg8ZTspdGhpcy5taW5CdWZmZXJMZW5ndGgqPTJ9Z2V0IGlzRW1wdHkoKXtmb3IoOyF0aGlzLmVvZiYmMD09PXRoaXMuYnVmZmVyTGVuZ3RoOyl0aGlzLnJlYWRCbG9jaygpO3JldHVybiAwPT09dGhpcy5idWZmZXJMZW5ndGh9ZW5zdXJlQnVmZmVyKGUpe2NvbnN0IHQ9dGhpcy5idWZmZXI7aWYoZTw9dC5ieXRlTGVuZ3RoKXJldHVybiB0O2xldCBhPXRoaXMubWluQnVmZmVyTGVuZ3RoO2Zvcig7YTxlOylhKj0yO2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoYSk7ci5zZXQodCk7cmV0dXJuIHRoaXMuYnVmZmVyPXJ9Z2V0Qnl0ZSgpe2NvbnN0IGU9dGhpcy5wb3M7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw9ZTspe2lmKHRoaXMuZW9mKXJldHVybi0xO3RoaXMucmVhZEJsb2NrKCl9cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdfWdldEJ5dGVzKGUpe2NvbnN0IHQ9dGhpcy5wb3M7bGV0IGE7aWYoZSl7dGhpcy5lbnN1cmVCdWZmZXIodCtlKTthPXQrZTtmb3IoOyF0aGlzLmVvZiYmdGhpcy5idWZmZXJMZW5ndGg8YTspdGhpcy5yZWFkQmxvY2soKTtjb25zdCByPXRoaXMuYnVmZmVyTGVuZ3RoO2E+ciYmKGE9cil9ZWxzZXtmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTthPXRoaXMuYnVmZmVyTGVuZ3RofXRoaXMucG9zPWE7cmV0dXJuIHRoaXMuYnVmZmVyLnN1YmFycmF5KHQsYSl9cmVzZXQoKXt0aGlzLnBvcz0wfW1ha2VTdWJTdHJlYW0oZSx0LGE9bnVsbCl7aWYodm9pZCAwPT09dClmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTtlbHNle2NvbnN0IGE9ZSt0O2Zvcig7dGhpcy5idWZmZXJMZW5ndGg8PWEmJiF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKX1yZXR1cm4gbmV3IG4uU3RyZWFtKHRoaXMuYnVmZmVyLGUsdCxhKX1nZXRCYXNlU3RyZWFtcygpe3JldHVybiB0aGlzLnN0cj90aGlzLnN0ci5nZXRCYXNlU3RyZWFtcygpOm51bGx9fXQuRGVjb2RlU3RyZWFtPURlY29kZVN0cmVhbTt0LlN0cmVhbXNTZXF1ZW5jZVN0cmVhbT1jbGFzcyBTdHJlYW1zU2VxdWVuY2VTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0PW51bGwpe2xldCBhPTA7Zm9yKGNvbnN0IHQgb2YgZSlhKz10IGluc3RhbmNlb2YgRGVjb2RlU3RyZWFtP3QuX3Jhd01pbkJ1ZmZlckxlbmd0aDp0Lmxlbmd0aDtzdXBlcihhKTt0aGlzLnN0cmVhbXM9ZTt0aGlzLl9vbkVycm9yPXR9cmVhZEJsb2NrKCl7Y29uc3QgZT10aGlzLnN0cmVhbXM7aWYoMD09PWUubGVuZ3RoKXt0aGlzLmVvZj0hMDtyZXR1cm59Y29uc3QgdD1lLnNoaWZ0KCk7bGV0IGE7dHJ5e2E9dC5nZXRCeXRlcygpfWNhdGNoKGUpe2lmKHRoaXMuX29uRXJyb3Ipe3RoaXMuX29uRXJyb3IoZSx0LmRpY3Q/Lm9iaklkKTtyZXR1cm59dGhyb3cgZX1jb25zdCByPXRoaXMuYnVmZmVyTGVuZ3RoLG49cithLmxlbmd0aDt0aGlzLmVuc3VyZUJ1ZmZlcihuKS5zZXQoYSxyKTt0aGlzLmJ1ZmZlckxlbmd0aD1ufWdldEJhc2VTdHJlYW1zKCl7Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiB0aGlzLnN0cmVhbXMpe2NvbnN0IGE9dC5nZXRCYXNlU3RyZWFtcygpO2EmJmUucHVzaCguLi5hKX1yZXR1cm4gZS5sZW5ndGg+MD9lOm51bGx9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkFzY2lpSGV4U3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE4KTtjbGFzcyBBc2NpaUhleFN0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCl7dCYmKHQqPS41KTtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5maXJzdERpZ2l0PS0xfXJlYWRCbG9jaygpe2NvbnN0IGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoOGUzKTtpZighZS5sZW5ndGgpe3RoaXMuZW9mPSEwO3JldHVybn1jb25zdCB0PWUubGVuZ3RoKzE+PjEsYT10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCt0KTtsZXQgcj10aGlzLmJ1ZmZlckxlbmd0aCxuPXRoaXMuZmlyc3REaWdpdDtmb3IoY29uc3QgdCBvZiBlKXtsZXQgZTtpZih0Pj00OCYmdDw9NTcpZT0xNSZ0O2Vsc2V7aWYoISh0Pj02NSYmdDw9NzB8fHQ+PTk3JiZ0PD0xMDIpKXtpZig2Mj09PXQpe3RoaXMuZW9mPSEwO2JyZWFrfWNvbnRpbnVlfWU9OSsoMTUmdCl9aWYobjwwKW49ZTtlbHNle2FbcisrXT1uPDw0fGU7bj0tMX19aWYobj49MCYmdGhpcy5lb2Ype2FbcisrXT1uPDw0O249LTF9dGhpcy5maXJzdERpZ2l0PW47dGhpcy5idWZmZXJMZW5ndGg9cn19dC5Bc2NpaUhleFN0cmVhbT1Bc2NpaUhleFN0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkNDSVRURmF4U3RyZWFtPXZvaWQgMDt2YXIgcj1hKDIxKSxuPWEoMTgpLGk9YSg0KTtjbGFzcyBDQ0lUVEZheFN0cmVhbSBleHRlbmRzIG4uRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7YSBpbnN0YW5jZW9mIGkuRGljdHx8KGE9aS5EaWN0LmVtcHR5KTtjb25zdCBuPXtuZXh0OigpPT5lLmdldEJ5dGUoKX07dGhpcy5jY2l0dEZheERlY29kZXI9bmV3IHIuQ0NJVFRGYXhEZWNvZGVyKG4se0s6YS5nZXQoIksiKSxFbmRPZkxpbmU6YS5nZXQoIkVuZE9mTGluZSIpLEVuY29kZWRCeXRlQWxpZ246YS5nZXQoIkVuY29kZWRCeXRlQWxpZ24iKSxDb2x1bW5zOmEuZ2V0KCJDb2x1bW5zIiksUm93czphLmdldCgiUm93cyIpLEVuZE9mQmxvY2s6YS5nZXQoIkVuZE9mQmxvY2siKSxCbGFja0lzMTphLmdldCgiQmxhY2tJczEiKX0pfXJlYWRCbG9jaygpe2Zvcig7IXRoaXMuZW9mOyl7Y29uc3QgZT10aGlzLmNjaXR0RmF4RGVjb2Rlci5yZWFkTmV4dENoYXIoKTtpZigtMT09PWUpe3RoaXMuZW9mPSEwO3JldHVybn10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCsxKTt0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lfX19dC5DQ0lUVEZheFN0cmVhbT1DQ0lUVEZheFN0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkNDSVRURmF4RGVjb2Rlcj12b2lkIDA7dmFyIHI9YSgyKTtjb25zdCBuPS0xLGk9W1stMSwtMV0sWy0xLC0xXSxbNyw4XSxbNyw3XSxbNiw2XSxbNiw2XSxbNiw1XSxbNiw1XSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXV0scz1bWy0xLC0xXSxbMTIsLTJdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDk2XSxbMTIsMjU2MF1dLG89W1stMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzgsMjldLFs4LDI5XSxbOCwzMF0sWzgsMzBdLFs4LDQ1XSxbOCw0NV0sWzgsNDZdLFs4LDQ2XSxbNywyMl0sWzcsMjJdLFs3LDIyXSxbNywyMl0sWzcsMjNdLFs3LDIzXSxbNywyM10sWzcsMjNdLFs4LDQ3XSxbOCw0N10sWzgsNDhdLFs4LDQ4XSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs3LDIwXSxbNywyMF0sWzcsMjBdLFs3LDIwXSxbOCwzM10sWzgsMzNdLFs4LDM0XSxbOCwzNF0sWzgsMzVdLFs4LDM1XSxbOCwzNl0sWzgsMzZdLFs4LDM3XSxbOCwzN10sWzgsMzhdLFs4LDM4XSxbNywxOV0sWzcsMTldLFs3LDE5XSxbNywxOV0sWzgsMzFdLFs4LDMxXSxbOCwzMl0sWzgsMzJdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzgsNTNdLFs4LDUzXSxbOCw1NF0sWzgsNTRdLFs3LDI2XSxbNywyNl0sWzcsMjZdLFs3LDI2XSxbOCwzOV0sWzgsMzldLFs4LDQwXSxbOCw0MF0sWzgsNDFdLFs4LDQxXSxbOCw0Ml0sWzgsNDJdLFs4LDQzXSxbOCw0M10sWzgsNDRdLFs4LDQ0XSxbNywyMV0sWzcsMjFdLFs3LDIxXSxbNywyMV0sWzcsMjhdLFs3LDI4XSxbNywyOF0sWzcsMjhdLFs4LDYxXSxbOCw2MV0sWzgsNjJdLFs4LDYyXSxbOCw2M10sWzgsNjNdLFs4LDBdLFs4LDBdLFs4LDMyMF0sWzgsMzIwXSxbOCwzODRdLFs4LDM4NF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNywyN10sWzcsMjddLFs3LDI3XSxbNywyN10sWzgsNTldLFs4LDU5XSxbOCw2MF0sWzgsNjBdLFs5LDE0NzJdLFs5LDE1MzZdLFs5LDE2MDBdLFs5LDE3MjhdLFs3LDE4XSxbNywxOF0sWzcsMThdLFs3LDE4XSxbNywyNF0sWzcsMjRdLFs3LDI0XSxbNywyNF0sWzgsNDldLFs4LDQ5XSxbOCw1MF0sWzgsNTBdLFs4LDUxXSxbOCw1MV0sWzgsNTJdLFs4LDUyXSxbNywyNV0sWzcsMjVdLFs3LDI1XSxbNywyNV0sWzgsNTVdLFs4LDU1XSxbOCw1Nl0sWzgsNTZdLFs4LDU3XSxbOCw1N10sWzgsNThdLFs4LDU4XSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzgsNDQ4XSxbOCw0NDhdLFs4LDUxMl0sWzgsNTEyXSxbOSw3MDRdLFs5LDc2OF0sWzgsNjQwXSxbOCw2NDBdLFs4LDU3Nl0sWzgsNTc2XSxbOSw4MzJdLFs5LDg5Nl0sWzksOTYwXSxbOSwxMDI0XSxbOSwxMDg4XSxbOSwxMTUyXSxbOSwxMjE2XSxbOSwxMjgwXSxbOSwxMzQ0XSxbOSwxNDA4XSxbNywyNTZdLFs3LDI1Nl0sWzcsMjU2XSxbNywyNTZdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN11dLGM9W1stMSwtMV0sWy0xLC0xXSxbMTIsLTJdLFsxMiwtMl0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzEyLDE5ODRdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIwNDhdLFsxMiwyMTEyXSxbMTIsMjExMl0sWzEyLDIxNzZdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIyNDBdLFsxMiwyMzA0XSxbMTIsMjMwNF0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDIzNjhdLFsxMiwyNDMyXSxbMTIsMjQzMl0sWzEyLDI0OTZdLFsxMiwyNDk2XSxbMTIsMjU2MF0sWzEyLDI1NjBdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTIsNTJdLFsxMiw1Ml0sWzEzLDY0MF0sWzEzLDcwNF0sWzEzLDc2OF0sWzEzLDgzMl0sWzEyLDU1XSxbMTIsNTVdLFsxMiw1Nl0sWzEyLDU2XSxbMTMsMTI4MF0sWzEzLDEzNDRdLFsxMywxNDA4XSxbMTMsMTQ3Ml0sWzEyLDU5XSxbMTIsNTldLFsxMiw2MF0sWzEyLDYwXSxbMTMsMTUzNl0sWzEzLDE2MDBdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNF0sWzExLDI1XSxbMTEsMjVdLFsxMSwyNV0sWzExLDI1XSxbMTMsMTY2NF0sWzEzLDE3MjhdLFsxMiwzMjBdLFsxMiwzMjBdLFsxMiwzODRdLFsxMiwzODRdLFsxMiw0NDhdLFsxMiw0NDhdLFsxMyw1MTJdLFsxMyw1NzZdLFsxMiw1M10sWzEyLDUzXSxbMTIsNTRdLFsxMiw1NF0sWzEzLDg5Nl0sWzEzLDk2MF0sWzEzLDEwMjRdLFsxMywxMDg4XSxbMTMsMTE1Ml0sWzEzLDEyMTZdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XV0sbD1bWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFsxMSwyM10sWzExLDIzXSxbMTIsNTBdLFsxMiw1MV0sWzEyLDQ0XSxbMTIsNDVdLFsxMiw0Nl0sWzEyLDQ3XSxbMTIsNTddLFsxMiw1OF0sWzEyLDYxXSxbMTIsMjU2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxN10sWzEwLDE3XSxbMTAsMTddLFsxMCwxN10sWzEyLDQ4XSxbMTIsNDldLFsxMiw2Ml0sWzEyLDYzXSxbMTIsMzBdLFsxMiwzMV0sWzEyLDMyXSxbMTIsMzNdLFsxMiw0MF0sWzEyLDQxXSxbMTEsMjJdLFsxMSwyMl0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFsxMiwxMjhdLFsxMiwxOTJdLFsxMiwyNl0sWzEyLDI3XSxbMTIsMjhdLFsxMiwyOV0sWzExLDE5XSxbMTEsMTldLFsxMSwyMF0sWzExLDIwXSxbMTIsMzRdLFsxMiwzNV0sWzEyLDM2XSxbMTIsMzddLFsxMiwzOF0sWzEyLDM5XSxbMTEsMjFdLFsxMSwyMV0sWzEyLDQyXSxbMTIsNDNdLFsxMCwwXSxbMTAsMF0sWzEwLDBdLFsxMCwwXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdXSxoPVtbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFs2LDldLFs2LDhdLFs1LDddLFs1LDddLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdXTt0LkNDSVRURmF4RGVjb2Rlcj1jbGFzcyBDQ0lUVEZheERlY29kZXJ7Y29uc3RydWN0b3IoZSx0PXt9KXtpZighZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUubmV4dCl0aHJvdyBuZXcgRXJyb3IoJ0NDSVRURmF4RGVjb2RlciAtIGludmFsaWQgInNvdXJjZSIgcGFyYW1ldGVyLicpO3RoaXMuc291cmNlPWU7dGhpcy5lb2Y9ITE7dGhpcy5lbmNvZGluZz10Lkt8fDA7dGhpcy5lb2xpbmU9dC5FbmRPZkxpbmV8fCExO3RoaXMuYnl0ZUFsaWduPXQuRW5jb2RlZEJ5dGVBbGlnbnx8ITE7dGhpcy5jb2x1bW5zPXQuQ29sdW1uc3x8MTcyODt0aGlzLnJvd3M9dC5Sb3dzfHwwO3RoaXMuZW9ibG9jaz10LkVuZE9mQmxvY2s/PyEwO3RoaXMuYmxhY2s9dC5CbGFja0lzMXx8ITE7dGhpcy5jb2RpbmdMaW5lPW5ldyBVaW50MzJBcnJheSh0aGlzLmNvbHVtbnMrMSk7dGhpcy5yZWZMaW5lPW5ldyBVaW50MzJBcnJheSh0aGlzLmNvbHVtbnMrMik7dGhpcy5jb2RpbmdMaW5lWzBdPXRoaXMuY29sdW1uczt0aGlzLmNvZGluZ1Bvcz0wO3RoaXMucm93PTA7dGhpcy5uZXh0TGluZTJEPXRoaXMuZW5jb2Rpbmc8MDt0aGlzLmlucHV0Qml0cz0wO3RoaXMuaW5wdXRCdWY9MDt0aGlzLm91dHB1dEJpdHM9MDt0aGlzLnJvd3NEb25lPSExO2xldCBhO2Zvcig7MD09PShhPXRoaXMuX2xvb2tCaXRzKDEyKSk7KXRoaXMuX2VhdEJpdHMoMSk7MT09PWEmJnRoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5uZXh0TGluZTJEPSF0aGlzLl9sb29rQml0cygxKTt0aGlzLl9lYXRCaXRzKDEpfX1yZWFkTmV4dENoYXIoKXtpZih0aGlzLmVvZilyZXR1cm4tMTtjb25zdCBlPXRoaXMucmVmTGluZSx0PXRoaXMuY29kaW5nTGluZSxhPXRoaXMuY29sdW1ucztsZXQgaSxzLG8sYyxsO2lmKDA9PT10aGlzLm91dHB1dEJpdHMpe3RoaXMucm93c0RvbmUmJih0aGlzLmVvZj0hMCk7aWYodGhpcy5lb2YpcmV0dXJuLTE7dGhpcy5lcnI9ITE7bGV0IG8sbCxoO2lmKHRoaXMubmV4dExpbmUyRCl7Zm9yKGM9MDt0W2NdPGE7KytjKWVbY109dFtjXTtlW2MrK109YTtlW2NdPWE7dFswXT0wO3RoaXMuY29kaW5nUG9zPTA7aT0wO3M9MDtmb3IoO3RbdGhpcy5jb2RpbmdQb3NdPGE7KXtvPXRoaXMuX2dldFR3b0RpbUNvZGUoKTtzd2l0Y2gobyl7Y2FzZSAwOnRoaXMuX2FkZFBpeGVscyhlW2krMV0scyk7ZVtpKzFdPGEmJihpKz0yKTticmVhaztjYXNlIDE6bz1sPTA7aWYocyl7ZG97bys9aD10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShoPj02NCk7ZG97bCs9aD10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShoPj02NCl9ZWxzZXtkb3tvKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KTtkb3tsKz1oPXRoaXMuX2dldEJsYWNrQ29kZSgpfXdoaWxlKGg+PTY0KX10aGlzLl9hZGRQaXhlbHModFt0aGlzLmNvZGluZ1Bvc10rbyxzKTt0W3RoaXMuY29kaW5nUG9zXTxhJiZ0aGlzLl9hZGRQaXhlbHModFt0aGlzLmNvZGluZ1Bvc10rbCwxXnMpO2Zvcig7ZVtpXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbaV08YTspaSs9MjticmVhaztjYXNlIDc6dGhpcy5fYWRkUGl4ZWxzKGVbaV0rMyxzKTtzXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpeysraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSA1OnRoaXMuX2FkZFBpeGVscyhlW2ldKzIscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXsrK2k7Zm9yKDtlW2ldPD10W3RoaXMuY29kaW5nUG9zXSYmZVtpXTxhOylpKz0yfWJyZWFrO2Nhc2UgMzp0aGlzLl9hZGRQaXhlbHMoZVtpXSsxLHMpO3NePTE7aWYodFt0aGlzLmNvZGluZ1Bvc108YSl7KytpO2Zvcig7ZVtpXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbaV08YTspaSs9Mn1icmVhaztjYXNlIDI6dGhpcy5fYWRkUGl4ZWxzKGVbaV0scyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXsrK2k7Zm9yKDtlW2ldPD10W3RoaXMuY29kaW5nUG9zXSYmZVtpXTxhOylpKz0yfWJyZWFrO2Nhc2UgODp0aGlzLl9hZGRQaXhlbHNOZWcoZVtpXS0zLHMpO3NePTE7aWYodFt0aGlzLmNvZGluZ1Bvc108YSl7aT4wPy0taTorK2k7Zm9yKDtlW2ldPD10W3RoaXMuY29kaW5nUG9zXSYmZVtpXTxhOylpKz0yfWJyZWFrO2Nhc2UgNjp0aGlzLl9hZGRQaXhlbHNOZWcoZVtpXS0yLHMpO3NePTE7aWYodFt0aGlzLmNvZGluZ1Bvc108YSl7aT4wPy0taTorK2k7Zm9yKDtlW2ldPD10W3RoaXMuY29kaW5nUG9zXSYmZVtpXTxhOylpKz0yfWJyZWFrO2Nhc2UgNDp0aGlzLl9hZGRQaXhlbHNOZWcoZVtpXS0xLHMpO3NePTE7aWYodFt0aGlzLmNvZGluZ1Bvc108YSl7aT4wPy0taTorK2k7Zm9yKDtlW2ldPD10W3RoaXMuY29kaW5nUG9zXSYmZVtpXTxhOylpKz0yfWJyZWFrO2Nhc2Ugbjp0aGlzLl9hZGRQaXhlbHMoYSwwKTt0aGlzLmVvZj0hMDticmVhaztkZWZhdWx0OigwLHIuaW5mbykoImJhZCAyZCBjb2RlIik7dGhpcy5fYWRkUGl4ZWxzKGEsMCk7dGhpcy5lcnI9ITB9fX1lbHNle3RbMF09MDt0aGlzLmNvZGluZ1Bvcz0wO3M9MDtmb3IoO3RbdGhpcy5jb2RpbmdQb3NdPGE7KXtvPTA7aWYocylkb3tvKz1oPXRoaXMuX2dldEJsYWNrQ29kZSgpfXdoaWxlKGg+PTY0KTtlbHNlIGRve28rPWg9dGhpcy5fZ2V0V2hpdGVDb2RlKCl9d2hpbGUoaD49NjQpO3RoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStvLHMpO3NePTF9fWxldCB1PSExO3RoaXMuYnl0ZUFsaWduJiYodGhpcy5pbnB1dEJpdHMmPS04KTtpZih0aGlzLmVvYmxvY2t8fHRoaXMucm93IT09dGhpcy5yb3dzLTEpe289dGhpcy5fbG9va0JpdHMoMTIpO2lmKHRoaXMuZW9saW5lKWZvcig7byE9PW4mJjEhPT1vOyl7dGhpcy5fZWF0Qml0cygxKTtvPXRoaXMuX2xvb2tCaXRzKDEyKX1lbHNlIGZvcig7MD09PW87KXt0aGlzLl9lYXRCaXRzKDEpO289dGhpcy5fbG9va0JpdHMoMTIpfWlmKDE9PT1vKXt0aGlzLl9lYXRCaXRzKDEyKTt1PSEwfWVsc2Ugbz09PW4mJih0aGlzLmVvZj0hMCl9ZWxzZSB0aGlzLnJvd3NEb25lPSEwO2lmKCF0aGlzLmVvZiYmdGhpcy5lbmNvZGluZz4wJiYhdGhpcy5yb3dzRG9uZSl7dGhpcy5uZXh0TGluZTJEPSF0aGlzLl9sb29rQml0cygxKTt0aGlzLl9lYXRCaXRzKDEpfWlmKHRoaXMuZW9ibG9jayYmdSYmdGhpcy5ieXRlQWxpZ24pe289dGhpcy5fbG9va0JpdHMoMTIpO2lmKDE9PT1vKXt0aGlzLl9lYXRCaXRzKDEyKTtpZih0aGlzLmVuY29kaW5nPjApe3RoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9aWYodGhpcy5lbmNvZGluZz49MClmb3IoYz0wO2M8NDsrK2Mpe289dGhpcy5fbG9va0JpdHMoMTIpOzEhPT1vJiYoMCxyLmluZm8pKCJiYWQgcnRjIGNvZGU6ICIrbyk7dGhpcy5fZWF0Qml0cygxMik7aWYodGhpcy5lbmNvZGluZz4wKXt0aGlzLl9sb29rQml0cygxKTt0aGlzLl9lYXRCaXRzKDEpfX10aGlzLmVvZj0hMH19ZWxzZSBpZih0aGlzLmVyciYmdGhpcy5lb2xpbmUpe2Zvcig7Oyl7bz10aGlzLl9sb29rQml0cygxMyk7aWYobz09PW4pe3RoaXMuZW9mPSEwO3JldHVybi0xfWlmKG8+PjE9PTEpYnJlYWs7dGhpcy5fZWF0Qml0cygxKX10aGlzLl9lYXRCaXRzKDEyKTtpZih0aGlzLmVuY29kaW5nPjApe3RoaXMuX2VhdEJpdHMoMSk7dGhpcy5uZXh0TGluZTJEPSEoMSZvKX19dGhpcy5vdXRwdXRCaXRzPXRbMF0+MD90W3RoaXMuY29kaW5nUG9zPTBdOnRbdGhpcy5jb2RpbmdQb3M9MV07dGhpcy5yb3crK31pZih0aGlzLm91dHB1dEJpdHM+PTgpe2w9MSZ0aGlzLmNvZGluZ1Bvcz8wOjI1NTt0aGlzLm91dHB1dEJpdHMtPTg7aWYoMD09PXRoaXMub3V0cHV0Qml0cyYmdFt0aGlzLmNvZGluZ1Bvc108YSl7dGhpcy5jb2RpbmdQb3MrKzt0aGlzLm91dHB1dEJpdHM9dFt0aGlzLmNvZGluZ1Bvc10tdFt0aGlzLmNvZGluZ1Bvcy0xXX19ZWxzZXtvPTg7bD0wO2Rve2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5vdXRwdXRCaXRzKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdJbnZhbGlkIC9DQ0lUVEZheERlY29kZSBkYXRhLCAib3V0cHV0Qml0cyIgbXVzdCBiZSBhIG51bWJlci4nKTtpZih0aGlzLm91dHB1dEJpdHM+byl7bDw8PW87MSZ0aGlzLmNvZGluZ1Bvc3x8KGx8PTI1NT4+OC1vKTt0aGlzLm91dHB1dEJpdHMtPW87bz0wfWVsc2V7bDw8PXRoaXMub3V0cHV0Qml0czsxJnRoaXMuY29kaW5nUG9zfHwobHw9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyk7by09dGhpcy5vdXRwdXRCaXRzO3RoaXMub3V0cHV0Qml0cz0wO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpe3RoaXMuY29kaW5nUG9zKys7dGhpcy5vdXRwdXRCaXRzPXRbdGhpcy5jb2RpbmdQb3NdLXRbdGhpcy5jb2RpbmdQb3MtMV19ZWxzZSBpZihvPjApe2w8PD1vO289MH19fXdoaWxlKG8pfXRoaXMuYmxhY2smJihsXj0yNTUpO3JldHVybiBsfV9hZGRQaXhlbHMoZSx0KXtjb25zdCBhPXRoaXMuY29kaW5nTGluZTtsZXQgbj10aGlzLmNvZGluZ1BvcztpZihlPmFbbl0pe2lmKGU+dGhpcy5jb2x1bW5zKXsoMCxyLmluZm8pKCJyb3cgaXMgd3JvbmcgbGVuZ3RoIik7dGhpcy5lcnI9ITA7ZT10aGlzLmNvbHVtbnN9MSZuXnQmJisrbjthW25dPWV9dGhpcy5jb2RpbmdQb3M9bn1fYWRkUGl4ZWxzTmVnKGUsdCl7Y29uc3QgYT10aGlzLmNvZGluZ0xpbmU7bGV0IG49dGhpcy5jb2RpbmdQb3M7aWYoZT5hW25dKXtpZihlPnRoaXMuY29sdW1ucyl7KDAsci5pbmZvKSgicm93IGlzIHdyb25nIGxlbmd0aCIpO3RoaXMuZXJyPSEwO2U9dGhpcy5jb2x1bW5zfTEmbl50JiYrK247YVtuXT1lfWVsc2UgaWYoZTxhW25dKXtpZihlPDApeygwLHIuaW5mbykoImludmFsaWQgY29kZSIpO3RoaXMuZXJyPSEwO2U9MH1mb3IoO24+MCYmZTxhW24tMV07KS0tbjthW25dPWV9dGhpcy5jb2RpbmdQb3M9bn1fZmluZFRhYmxlQ29kZShlLHQsYSxyKXtjb25zdCBpPXJ8fDA7Zm9yKGxldCByPWU7cjw9dDsrK3Ipe2xldCBlPXRoaXMuX2xvb2tCaXRzKHIpO2lmKGU9PT1uKXJldHVyblshMCwxLCExXTtyPHQmJihlPDw9dC1yKTtpZighaXx8ZT49aSl7Y29uc3QgdD1hW2UtaV07aWYodFswXT09PXIpe3RoaXMuX2VhdEJpdHMocik7cmV0dXJuWyEwLHRbMV0sITBdfX19cmV0dXJuWyExLDAsITFdfV9nZXRUd29EaW1Db2RlKCl7bGV0IGUsdD0wO2lmKHRoaXMuZW9ibG9jayl7dD10aGlzLl9sb29rQml0cyg3KTtlPWlbdF07aWYoZT8uWzBdPjApe3RoaXMuX2VhdEJpdHMoZVswXSk7cmV0dXJuIGVbMV19fWVsc2V7Y29uc3QgZT10aGlzLl9maW5kVGFibGVDb2RlKDEsNyxpKTtpZihlWzBdJiZlWzJdKXJldHVybiBlWzFdfSgwLHIuaW5mbykoIkJhZCB0d28gZGltIGNvZGUiKTtyZXR1cm4gbn1fZ2V0V2hpdGVDb2RlKCl7bGV0IGUsdD0wO2lmKHRoaXMuZW9ibG9jayl7dD10aGlzLl9sb29rQml0cygxMik7aWYodD09PW4pcmV0dXJuIDE7ZT10Pj41PT0wP3NbdF06b1t0Pj4zXTtpZihlWzBdPjApe3RoaXMuX2VhdEJpdHMoZVswXSk7cmV0dXJuIGVbMV19fWVsc2V7bGV0IGU9dGhpcy5fZmluZFRhYmxlQ29kZSgxLDksbyk7aWYoZVswXSlyZXR1cm4gZVsxXTtlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMTEsMTIscyk7aWYoZVswXSlyZXR1cm4gZVsxXX0oMCxyLmluZm8pKCJiYWQgd2hpdGUgY29kZSIpO3RoaXMuX2VhdEJpdHMoMSk7cmV0dXJuIDF9X2dldEJsYWNrQ29kZSgpe2xldCBlLHQ7aWYodGhpcy5lb2Jsb2NrKXtlPXRoaXMuX2xvb2tCaXRzKDEzKTtpZihlPT09bilyZXR1cm4gMTt0PWU+Pjc9PTA/Y1tlXTplPj45PT0wJiZlPj43IT0wP2xbKGU+PjEpLTY0XTpoW2U+PjddO2lmKHRbMF0+MCl7dGhpcy5fZWF0Qml0cyh0WzBdKTtyZXR1cm4gdFsxXX19ZWxzZXtsZXQgZT10aGlzLl9maW5kVGFibGVDb2RlKDIsNixoKTtpZihlWzBdKXJldHVybiBlWzFdO2U9dGhpcy5fZmluZFRhYmxlQ29kZSg3LDEyLGwsNjQpO2lmKGVbMF0pcmV0dXJuIGVbMV07ZT10aGlzLl9maW5kVGFibGVDb2RlKDEwLDEzLGMpO2lmKGVbMF0pcmV0dXJuIGVbMV19KDAsci5pbmZvKSgiYmFkIGJsYWNrIGNvZGUiKTt0aGlzLl9lYXRCaXRzKDEpO3JldHVybiAxfV9sb29rQml0cyhlKXtsZXQgdDtmb3IoO3RoaXMuaW5wdXRCaXRzPGU7KXtpZigtMT09PSh0PXRoaXMuc291cmNlLm5leHQoKSkpcmV0dXJuIDA9PT10aGlzLmlucHV0Qml0cz9uOnRoaXMuaW5wdXRCdWY8PGUtdGhpcy5pbnB1dEJpdHMmNjU1MzU+PjE2LWU7dGhpcy5pbnB1dEJ1Zj10aGlzLmlucHV0QnVmPDw4fHQ7dGhpcy5pbnB1dEJpdHMrPTh9cmV0dXJuIHRoaXMuaW5wdXRCdWY+PnRoaXMuaW5wdXRCaXRzLWUmNjU1MzU+PjE2LWV9X2VhdEJpdHMoZSl7KHRoaXMuaW5wdXRCaXRzLT1lKTwwJiYodGhpcy5pbnB1dEJpdHM9MCl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkZsYXRlU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE4KSxuPWEoMik7Y29uc3QgaT1uZXcgSW50MzJBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLHM9bmV3IEludDMyQXJyYXkoWzMsNCw1LDYsNyw4LDksMTAsNjU1NDcsNjU1NDksNjU1NTEsNjU1NTMsMTMxMDkxLDEzMTA5NSwxMzEwOTksMTMxMTAzLDE5NjY0MywxOTY2NTEsMTk2NjU5LDE5NjY2NywyNjIyMTEsMjYyMjI3LDI2MjI0MywyNjIyNTksMzI3ODExLDMyNzg0MywzMjc4NzUsMzI3OTA3LDI1OCwyNTgsMjU4XSksbz1uZXcgSW50MzJBcnJheShbMSwyLDMsNCw2NTU0MSw2NTU0MywxMzEwODEsMTMxMDg1LDE5NjYyNSwxOTY2MzMsMjYyMTc3LDI2MjE5MywzMjc3NDUsMzI3Nzc3LDM5MzM0NSwzOTM0MDksNDU5MDA5LDQ1OTEzNyw1MjQ4MDEsNTI1MDU3LDU5MDg0OSw1OTEzNjEsNjU3NDA5LDY1ODQzMyw3MjQ5OTMsNzI3MDQxLDc5NDYyNSw3OTg3MjEsODY4MzUzLDg3NjU0NV0pLGM9W25ldyBJbnQzMkFycmF5KFs0NTkwMDgsNTI0MzY4LDUyNDMwNCw1MjQ1NjgsNDU5MDI0LDUyNDQwMCw1MjQzMzYsNTkwMDE2LDQ1OTAxNiw1MjQzODQsNTI0MzIwLDU4OTk4NCw1MjQyODgsNTI0NDE2LDUyNDM1Miw1OTAwNDgsNDU5MDEyLDUyNDM3Niw1MjQzMTIsNTg5OTY4LDQ1OTAyOCw1MjQ0MDgsNTI0MzQ0LDU5MDAzMiw0NTkwMjAsNTI0MzkyLDUyNDMyOCw1OWU0LDUyNDI5Niw1MjQ0MjQsNTI0MzYwLDU5MDA2NCw0NTkwMTAsNTI0MzcyLDUyNDMwOCw1MjQ1NzIsNDU5MDI2LDUyNDQwNCw1MjQzNDAsNTkwMDI0LDQ1OTAxOCw1MjQzODgsNTI0MzI0LDU4OTk5Miw1MjQyOTIsNTI0NDIwLDUyNDM1Niw1OTAwNTYsNDU5MDE0LDUyNDM4MCw1MjQzMTYsNTg5OTc2LDQ1OTAzMCw1MjQ0MTIsNTI0MzQ4LDU5MDA0MCw0NTkwMjIsNTI0Mzk2LDUyNDMzMiw1OTAwMDgsNTI0MzAwLDUyNDQyOCw1MjQzNjQsNTkwMDcyLDQ1OTAwOSw1MjQzNzAsNTI0MzA2LDUyNDU3MCw0NTkwMjUsNTI0NDAyLDUyNDMzOCw1OTAwMjAsNDU5MDE3LDUyNDM4Niw1MjQzMjIsNTg5OTg4LDUyNDI5MCw1MjQ0MTgsNTI0MzU0LDU5MDA1Miw0NTkwMTMsNTI0Mzc4LDUyNDMxNCw1ODk5NzIsNDU5MDI5LDUyNDQxMCw1MjQzNDYsNTkwMDM2LDQ1OTAyMSw1MjQzOTQsNTI0MzMwLDU5MDAwNCw1MjQyOTgsNTI0NDI2LDUyNDM2Miw1OTAwNjgsNDU5MDExLDUyNDM3NCw1MjQzMTAsNTI0NTc0LDQ1OTAyNyw1MjQ0MDYsNTI0MzQyLDU5MDAyOCw0NTkwMTksNTI0MzkwLDUyNDMyNiw1ODk5OTYsNTI0Mjk0LDUyNDQyMiw1MjQzNTgsNTkwMDYwLDQ1OTAxNSw1MjQzODIsNTI0MzE4LDU4OTk4MCw0NTkwMzEsNTI0NDE0LDUyNDM1MCw1OTAwNDQsNDU5MDIzLDUyNDM5OCw1MjQzMzQsNTkwMDEyLDUyNDMwMiw1MjQ0MzAsNTI0MzY2LDU5MDA3Niw0NTkwMDgsNTI0MzY5LDUyNDMwNSw1MjQ1NjksNDU5MDI0LDUyNDQwMSw1MjQzMzcsNTkwMDE4LDQ1OTAxNiw1MjQzODUsNTI0MzIxLDU4OTk4Niw1MjQyODksNTI0NDE3LDUyNDM1Myw1OTAwNTAsNDU5MDEyLDUyNDM3Nyw1MjQzMTMsNTg5OTcwLDQ1OTAyOCw1MjQ0MDksNTI0MzQ1LDU5MDAzNCw0NTkwMjAsNTI0MzkzLDUyNDMyOSw1OTAwMDIsNTI0Mjk3LDUyNDQyNSw1MjQzNjEsNTkwMDY2LDQ1OTAxMCw1MjQzNzMsNTI0MzA5LDUyNDU3Myw0NTkwMjYsNTI0NDA1LDUyNDM0MSw1OTAwMjYsNDU5MDE4LDUyNDM4OSw1MjQzMjUsNTg5OTk0LDUyNDI5Myw1MjQ0MjEsNTI0MzU3LDU5MDA1OCw0NTkwMTQsNTI0MzgxLDUyNDMxNyw1ODk5NzgsNDU5MDMwLDUyNDQxMyw1MjQzNDksNTkwMDQyLDQ1OTAyMiw1MjQzOTcsNTI0MzMzLDU5MDAxMCw1MjQzMDEsNTI0NDI5LDUyNDM2NSw1OTAwNzQsNDU5MDA5LDUyNDM3MSw1MjQzMDcsNTI0NTcxLDQ1OTAyNSw1MjQ0MDMsNTI0MzM5LDU5MDAyMiw0NTkwMTcsNTI0Mzg3LDUyNDMyMyw1ODk5OTAsNTI0MjkxLDUyNDQxOSw1MjQzNTUsNTkwMDU0LDQ1OTAxMyw1MjQzNzksNTI0MzE1LDU4OTk3NCw0NTkwMjksNTI0NDExLDUyNDM0Nyw1OTAwMzgsNDU5MDIxLDUyNDM5NSw1MjQzMzEsNTkwMDA2LDUyNDI5OSw1MjQ0MjcsNTI0MzYzLDU5MDA3MCw0NTkwMTEsNTI0Mzc1LDUyNDMxMSw1MjQ1NzUsNDU5MDI3LDUyNDQwNyw1MjQzNDMsNTkwMDMwLDQ1OTAxOSw1MjQzOTEsNTI0MzI3LDU4OTk5OCw1MjQyOTUsNTI0NDIzLDUyNDM1OSw1OTAwNjIsNDU5MDE1LDUyNDM4Myw1MjQzMTksNTg5OTgyLDQ1OTAzMSw1MjQ0MTUsNTI0MzUxLDU5MDA0Niw0NTkwMjMsNTI0Mzk5LDUyNDMzNSw1OTAwMTQsNTI0MzAzLDUyNDQzMSw1MjQzNjcsNTkwMDc4LDQ1OTAwOCw1MjQzNjgsNTI0MzA0LDUyNDU2OCw0NTkwMjQsNTI0NDAwLDUyNDMzNiw1OTAwMTcsNDU5MDE2LDUyNDM4NCw1MjQzMjAsNTg5OTg1LDUyNDI4OCw1MjQ0MTYsNTI0MzUyLDU5MDA0OSw0NTkwMTIsNTI0Mzc2LDUyNDMxMiw1ODk5NjksNDU5MDI4LDUyNDQwOCw1MjQzNDQsNTkwMDMzLDQ1OTAyMCw1MjQzOTIsNTI0MzI4LDU5MDAwMSw1MjQyOTYsNTI0NDI0LDUyNDM2MCw1OTAwNjUsNDU5MDEwLDUyNDM3Miw1MjQzMDgsNTI0NTcyLDQ1OTAyNiw1MjQ0MDQsNTI0MzQwLDU5MDAyNSw0NTkwMTgsNTI0Mzg4LDUyNDMyNCw1ODk5OTMsNTI0MjkyLDUyNDQyMCw1MjQzNTYsNTkwMDU3LDQ1OTAxNCw1MjQzODAsNTI0MzE2LDU4OTk3Nyw0NTkwMzAsNTI0NDEyLDUyNDM0OCw1OTAwNDEsNDU5MDIyLDUyNDM5Niw1MjQzMzIsNTkwMDA5LDUyNDMwMCw1MjQ0MjgsNTI0MzY0LDU5MDA3Myw0NTkwMDksNTI0MzcwLDUyNDMwNiw1MjQ1NzAsNDU5MDI1LDUyNDQwMiw1MjQzMzgsNTkwMDIxLDQ1OTAxNyw1MjQzODYsNTI0MzIyLDU4OTk4OSw1MjQyOTAsNTI0NDE4LDUyNDM1NCw1OTAwNTMsNDU5MDEzLDUyNDM3OCw1MjQzMTQsNTg5OTczLDQ1OTAyOSw1MjQ0MTAsNTI0MzQ2LDU5MDAzNyw0NTkwMjEsNTI0Mzk0LDUyNDMzMCw1OTAwMDUsNTI0Mjk4LDUyNDQyNiw1MjQzNjIsNTkwMDY5LDQ1OTAxMSw1MjQzNzQsNTI0MzEwLDUyNDU3NCw0NTkwMjcsNTI0NDA2LDUyNDM0Miw1OTAwMjksNDU5MDE5LDUyNDM5MCw1MjQzMjYsNTg5OTk3LDUyNDI5NCw1MjQ0MjIsNTI0MzU4LDU5MDA2MSw0NTkwMTUsNTI0MzgyLDUyNDMxOCw1ODk5ODEsNDU5MDMxLDUyNDQxNCw1MjQzNTAsNTkwMDQ1LDQ1OTAyMyw1MjQzOTgsNTI0MzM0LDU5MDAxMyw1MjQzMDIsNTI0NDMwLDUyNDM2Niw1OTAwNzcsNDU5MDA4LDUyNDM2OSw1MjQzMDUsNTI0NTY5LDQ1OTAyNCw1MjQ0MDEsNTI0MzM3LDU5MDAxOSw0NTkwMTYsNTI0Mzg1LDUyNDMyMSw1ODk5ODcsNTI0Mjg5LDUyNDQxNyw1MjQzNTMsNTkwMDUxLDQ1OTAxMiw1MjQzNzcsNTI0MzEzLDU4OTk3MSw0NTkwMjgsNTI0NDA5LDUyNDM0NSw1OTAwMzUsNDU5MDIwLDUyNDM5Myw1MjQzMjksNTkwMDAzLDUyNDI5Nyw1MjQ0MjUsNTI0MzYxLDU5MDA2Nyw0NTkwMTAsNTI0MzczLDUyNDMwOSw1MjQ1NzMsNDU5MDI2LDUyNDQwNSw1MjQzNDEsNTkwMDI3LDQ1OTAxOCw1MjQzODksNTI0MzI1LDU4OTk5NSw1MjQyOTMsNTI0NDIxLDUyNDM1Nyw1OTAwNTksNDU5MDE0LDUyNDM4MSw1MjQzMTcsNTg5OTc5LDQ1OTAzMCw1MjQ0MTMsNTI0MzQ5LDU5MDA0Myw0NTkwMjIsNTI0Mzk3LDUyNDMzMyw1OTAwMTEsNTI0MzAxLDUyNDQyOSw1MjQzNjUsNTkwMDc1LDQ1OTAwOSw1MjQzNzEsNTI0MzA3LDUyNDU3MSw0NTkwMjUsNTI0NDAzLDUyNDMzOSw1OTAwMjMsNDU5MDE3LDUyNDM4Nyw1MjQzMjMsNTg5OTkxLDUyNDI5MSw1MjQ0MTksNTI0MzU1LDU5MDA1NSw0NTkwMTMsNTI0Mzc5LDUyNDMxNSw1ODk5NzUsNDU5MDI5LDUyNDQxMSw1MjQzNDcsNTkwMDM5LDQ1OTAyMSw1MjQzOTUsNTI0MzMxLDU5MDAwNyw1MjQyOTksNTI0NDI3LDUyNDM2Myw1OTAwNzEsNDU5MDExLDUyNDM3NSw1MjQzMTEsNTI0NTc1LDQ1OTAyNyw1MjQ0MDcsNTI0MzQzLDU5MDAzMSw0NTkwMTksNTI0MzkxLDUyNDMyNyw1ODk5OTksNTI0Mjk1LDUyNDQyMyw1MjQzNTksNTkwMDYzLDQ1OTAxNSw1MjQzODMsNTI0MzE5LDU4OTk4Myw0NTkwMzEsNTI0NDE1LDUyNDM1MSw1OTAwNDcsNDU5MDIzLDUyNDM5OSw1MjQzMzUsNTkwMDE1LDUyNDMwMyw1MjQ0MzEsNTI0MzY3LDU5MDA3OV0pLDldLGw9W25ldyBJbnQzMkFycmF5KFszMjc2ODAsMzI3Njk2LDMyNzY4OCwzMjc3MDQsMzI3Njg0LDMyNzcwMCwzMjc2OTIsMzI3NzA4LDMyNzY4MiwzMjc2OTgsMzI3NjkwLDMyNzcwNiwzMjc2ODYsMzI3NzAyLDMyNzY5NCwwLDMyNzY4MSwzMjc2OTcsMzI3Njg5LDMyNzcwNSwzMjc2ODUsMzI3NzAxLDMyNzY5MywzMjc3MDksMzI3NjgzLDMyNzY5OSwzMjc2OTEsMzI3NzA3LDMyNzY4NywzMjc3MDMsMzI3Njk1LDBdKSw1XTtjbGFzcyBGbGF0ZVN0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodCk7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0O2NvbnN0IGE9ZS5nZXRCeXRlKCkscj1lLmdldEJ5dGUoKTtpZigtMT09PWF8fC0xPT09cil0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcihgSW52YWxpZCBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtOiAke2F9LCAke3J9YCk7aWYoOCE9KDE1JmEpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKGBVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCBpbiBmbGF0ZSBzdHJlYW06ICR7YX0sICR7cn1gKTtpZigoKGE8PDgpK3IpJTMxIT0wKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKGBCYWQgRkNIRUNLIGluIGZsYXRlIHN0cmVhbTogJHthfSwgJHtyfWApO2lmKDMyJnIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYEZESUNUIGJpdCBzZXQgaW4gZmxhdGUgc3RyZWFtOiAke2F9LCAke3J9YCk7dGhpcy5jb2RlU2l6ZT0wO3RoaXMuY29kZUJ1Zj0wfWdldEJpdHMoZSl7Y29uc3QgdD10aGlzLnN0cjtsZXQgYSxyPXRoaXMuY29kZVNpemUsaT10aGlzLmNvZGVCdWY7Zm9yKDtyPGU7KXtpZigtMT09PShhPXQuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO2l8PWE8PHI7cis9OH1hPWkmKDE8PGUpLTE7dGhpcy5jb2RlQnVmPWk+PmU7dGhpcy5jb2RlU2l6ZT1yLT1lO3JldHVybiBhfWdldENvZGUoZSl7Y29uc3QgdD10aGlzLnN0cixhPWVbMF0scj1lWzFdO2xldCBpLHM9dGhpcy5jb2RlU2l6ZSxvPXRoaXMuY29kZUJ1Zjtmb3IoO3M8ciYmLTEhPT0oaT10LmdldEJ5dGUoKSk7KXtvfD1pPDxzO3MrPTh9Y29uc3QgYz1hW28mKDE8PHIpLTFdLGw9Yz4+MTYsaD02NTUzNSZjO2lmKGw8MXx8czxsKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgZW5jb2RpbmcgaW4gZmxhdGUgc3RyZWFtIik7dGhpcy5jb2RlQnVmPW8+Pmw7dGhpcy5jb2RlU2l6ZT1zLWw7cmV0dXJuIGh9Z2VuZXJhdGVIdWZmbWFuVGFibGUoZSl7Y29uc3QgdD1lLmxlbmd0aDtsZXQgYSxyPTA7Zm9yKGE9MDthPHQ7KythKWVbYV0+ciYmKHI9ZVthXSk7Y29uc3Qgbj0xPDxyLGk9bmV3IEludDMyQXJyYXkobik7Zm9yKGxldCBzPTEsbz0wLGM9MjtzPD1yOysrcyxvPDw9MSxjPDw9MSlmb3IobGV0IHI9MDtyPHQ7KytyKWlmKGVbcl09PT1zKXtsZXQgZT0wLHQ9bztmb3IoYT0wO2E8czsrK2Epe2U9ZTw8MXwxJnQ7dD4+PTF9Zm9yKGE9ZTthPG47YSs9YylpW2FdPXM8PDE2fHI7KytvfXJldHVybltpLHJdfXJlYWRCbG9jaygpe2xldCBlLHQ7Y29uc3QgYT10aGlzLnN0cjtsZXQgcixoLHU9dGhpcy5nZXRCaXRzKDMpOzEmdSYmKHRoaXMuZW9mPSEwKTt1Pj49MTtpZigwPT09dSl7bGV0IHQ7aWYoLTE9PT0odD1hLmdldEJ5dGUoKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7bGV0IHI9dDtpZigtMT09PSh0PWEuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtyfD10PDw4O2lmKC0xPT09KHQ9YS5nZXRCeXRlKCkpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO2xldCBpPXQ7aWYoLTE9PT0odD1hLmdldEJ5dGUoKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7aXw9dDw8ODtpZihpIT09KDY1NTM1Jn5yKSYmKDAhPT1yfHwwIT09aSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCB1bmNvbXByZXNzZWQgYmxvY2sgbGVuZ3RoIGluIGZsYXRlIHN0cmVhbSIpO3RoaXMuY29kZUJ1Zj0wO3RoaXMuY29kZVNpemU9MDtjb25zdCBzPXRoaXMuYnVmZmVyTGVuZ3RoLG89cytyO2U9dGhpcy5lbnN1cmVCdWZmZXIobyk7dGhpcy5idWZmZXJMZW5ndGg9bztpZigwPT09ciktMT09PWEucGVla0J5dGUoKSYmKHRoaXMuZW9mPSEwKTtlbHNle2NvbnN0IHQ9YS5nZXRCeXRlcyhyKTtlLnNldCh0LHMpO3QubGVuZ3RoPHImJih0aGlzLmVvZj0hMCl9cmV0dXJufWlmKDE9PT11KXtyPWM7aD1sfWVsc2V7aWYoMiE9PXUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gYmxvY2sgdHlwZSBpbiBmbGF0ZSBzdHJlYW0iKTt7Y29uc3QgZT10aGlzLmdldEJpdHMoNSkrMjU3LGE9dGhpcy5nZXRCaXRzKDUpKzEsbj10aGlzLmdldEJpdHMoNCkrNCxzPW5ldyBVaW50OEFycmF5KGkubGVuZ3RoKTtsZXQgbztmb3Iobz0wO288bjsrK28pc1tpW29dXT10aGlzLmdldEJpdHMoMyk7Y29uc3QgYz10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKHMpO3Q9MDtvPTA7Y29uc3QgbD1lK2EsdT1uZXcgVWludDhBcnJheShsKTtsZXQgZCxmLGc7Zm9yKDtvPGw7KXtjb25zdCBlPXRoaXMuZ2V0Q29kZShjKTtpZigxNj09PWUpe2Q9MjtmPTM7Zz10fWVsc2UgaWYoMTc9PT1lKXtkPTM7Zj0zO2c9dD0wfWVsc2V7aWYoMTghPT1lKXt1W28rK109dD1lO2NvbnRpbnVlfWQ9NztmPTExO2c9dD0wfWxldCBhPXRoaXMuZ2V0Qml0cyhkKStmO2Zvcig7YS0tID4wOyl1W28rK109Z31yPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUodS5zdWJhcnJheSgwLGUpKTtoPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUodS5zdWJhcnJheShlLGwpKX19ZT10aGlzLmJ1ZmZlcjtsZXQgZD1lP2UubGVuZ3RoOjAsZj10aGlzLmJ1ZmZlckxlbmd0aDtmb3IoOzspe2xldCBhPXRoaXMuZ2V0Q29kZShyKTtpZihhPDI1Nil7aWYoZisxPj1kKXtlPXRoaXMuZW5zdXJlQnVmZmVyKGYrMSk7ZD1lLmxlbmd0aH1lW2YrK109YTtjb250aW51ZX1pZigyNTY9PT1hKXt0aGlzLmJ1ZmZlckxlbmd0aD1mO3JldHVybn1hLT0yNTc7YT1zW2FdO2xldCBuPWE+PjE2O24+MCYmKG49dGhpcy5nZXRCaXRzKG4pKTt0PSg2NTUzNSZhKStuO2E9dGhpcy5nZXRDb2RlKGgpO2E9b1thXTtuPWE+PjE2O24+MCYmKG49dGhpcy5nZXRCaXRzKG4pKTtjb25zdCBpPSg2NTUzNSZhKStuO2lmKGYrdD49ZCl7ZT10aGlzLmVuc3VyZUJ1ZmZlcihmK3QpO2Q9ZS5sZW5ndGh9Zm9yKGxldCBhPTA7YTx0OysrYSwrK2YpZVtmXT1lW2YtaV19fX10LkZsYXRlU3RyZWFtPUZsYXRlU3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSmJpZzJTdHJlYW09dm9pZCAwO3ZhciByPWEoNSksbj1hKDE4KSxpPWEoNCkscz1hKDI0KSxvPWEoMik7Y2xhc3MgSmJpZzJTdHJlYW0gZXh0ZW5kcyBuLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7dGhpcy5zdHJlYW09ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMubWF5YmVMZW5ndGg9dDt0aGlzLnBhcmFtcz1hfWdldCBieXRlcygpe3JldHVybigwLG8uc2hhZG93KSh0aGlzLCJieXRlcyIsdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpfWVuc3VyZUJ1ZmZlcihlKXt9cmVhZEJsb2NrKCl7aWYodGhpcy5lb2YpcmV0dXJuO2NvbnN0IGU9bmV3IHMuSmJpZzJJbWFnZSx0PVtdO2lmKHRoaXMucGFyYW1zIGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBlPXRoaXMucGFyYW1zLmdldCgiSkJJRzJHbG9iYWxzIik7aWYoZSBpbnN0YW5jZW9mIHIuQmFzZVN0cmVhbSl7Y29uc3QgYT1lLmdldEJ5dGVzKCk7dC5wdXNoKHtkYXRhOmEsc3RhcnQ6MCxlbmQ6YS5sZW5ndGh9KX19dC5wdXNoKHtkYXRhOnRoaXMuYnl0ZXMsc3RhcnQ6MCxlbmQ6dGhpcy5ieXRlcy5sZW5ndGh9KTtjb25zdCBhPWUucGFyc2VDaHVua3ModCksbj1hLmxlbmd0aDtmb3IobGV0IGU9MDtlPG47ZSsrKWFbZV1ePTI1NTt0aGlzLmJ1ZmZlcj1hO3RoaXMuYnVmZmVyTGVuZ3RoPW47dGhpcy5lb2Y9ITB9fXQuSmJpZzJTdHJlYW09SmJpZzJTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5KYmlnMkltYWdlPXZvaWQgMDt2YXIgcj1hKDIpLG49YSgzKSxpPWEoMjUpLHM9YSgyMSk7Y2xhc3MgSmJpZzJFcnJvciBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihgSkJJRzIgZXJyb3I6ICR7ZX1gLCJKYmlnMkVycm9yIil9fWNsYXNzIENvbnRleHRDYWNoZXtnZXRDb250ZXh0cyhlKXtyZXR1cm4gZSBpbiB0aGlzP3RoaXNbZV06dGhpc1tlXT1uZXcgSW50OEFycmF5KDY1NTM2KX19Y2xhc3MgRGVjb2RpbmdDb250ZXh0e2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmRhdGE9ZTt0aGlzLnN0YXJ0PXQ7dGhpcy5lbmQ9YX1nZXQgZGVjb2Rlcigpe2NvbnN0IGU9bmV3IGkuQXJpdGhtZXRpY0RlY29kZXIodGhpcy5kYXRhLHRoaXMuc3RhcnQsdGhpcy5lbmQpO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJkZWNvZGVyIixlKX1nZXQgY29udGV4dENhY2hlKCl7Y29uc3QgZT1uZXcgQ29udGV4dENhY2hlO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJjb250ZXh0Q2FjaGUiLGUpfX1jb25zdCBvPTIqKjMxLTEsYz0tKDIqKjMxKTtmdW5jdGlvbiBkZWNvZGVJbnRlZ2VyKGUsdCxhKXtjb25zdCByPWUuZ2V0Q29udGV4dHModCk7bGV0IG49MTtmdW5jdGlvbiByZWFkQml0cyhlKXtsZXQgdD0wO2ZvcihsZXQgaT0wO2k8ZTtpKyspe2NvbnN0IGU9YS5yZWFkQml0KHIsbik7bj1uPDI1Nj9uPDwxfGU6NTExJihuPDwxfGUpfDI1Njt0PXQ8PDF8ZX1yZXR1cm4gdD4+PjB9Y29uc3QgaT1yZWFkQml0cygxKSxzPXJlYWRCaXRzKDEpP3JlYWRCaXRzKDEpP3JlYWRCaXRzKDEpP3JlYWRCaXRzKDEpP3JlYWRCaXRzKDEpP3JlYWRCaXRzKDMyKSs0NDM2OnJlYWRCaXRzKDEyKSszNDA6cmVhZEJpdHMoOCkrODQ6cmVhZEJpdHMoNikrMjA6cmVhZEJpdHMoNCkrNDpyZWFkQml0cygyKTtsZXQgbDswPT09aT9sPXM6cz4wJiYobD0tcyk7cmV0dXJuIGw+PWMmJmw8PW8/bDpudWxsfWZ1bmN0aW9uIGRlY29kZUlBSUQoZSx0LGEpe2NvbnN0IHI9ZS5nZXRDb250ZXh0cygiSUFJRCIpO2xldCBuPTE7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7bj1uPDwxfHQucmVhZEJpdChyLG4pfXJldHVybiBhPDMxP24mKDE8PGEpLTE6MjE0NzQ4MzY0NyZufWNvbnN0IGw9WyJTeW1ib2xEaWN0aW9uYXJ5IixudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlVGV4dFJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlVGV4dFJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJQYXR0ZXJuRGljdGlvbmFyeSIsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZUhhbGZ0b25lUmVnaW9uIixudWxsLCJJbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb24iLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVHZW5lcmljUmVnaW9uIixudWxsLCJJbW1lZGlhdGVHZW5lcmljUmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVnaW9uIiwiSW50ZXJtZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLG51bGwsIkltbWVkaWF0ZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCwiUGFnZUluZm9ybWF0aW9uIiwiRW5kT2ZQYWdlIiwiRW5kT2ZTdHJpcGUiLCJFbmRPZkZpbGUiLCJQcm9maWxlcyIsIlRhYmxlcyIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJFeHRlbnNpb24iXSxoPVtbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDoyLHk6LTF9LHt4Oi00LHk6MH0se3g6LTMseTowfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6Mix5Oi0yfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6Mix5Oi0xfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTMseTotMX0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi00LHk6MH0se3g6LTMseTowfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dXSx1PVt7Y29kaW5nOlt7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfV0scmVmZXJlbmNlOlt7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfSx7eDowLHk6MH0se3g6MSx5OjB9LHt4Oi0xLHk6MX0se3g6MCx5OjF9LHt4OjEseToxfV19LHtjb2Rpbmc6W3t4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6LTEseTowfSx7eDowLHk6MH0se3g6MSx5OjB9LHt4OjAseToxfSx7eDoxLHk6MX1dfV0sZD1bMzk3MTcsMTk0MSwyMjksNDA1XSxmPVszMiw4XTtmdW5jdGlvbiBkZWNvZGVCaXRtYXAoZSx0LGEscixuLGkscyxvKXtpZihlKXtyZXR1cm4gZGVjb2RlTU1SQml0bWFwKG5ldyBSZWFkZXIoby5kYXRhLG8uc3RhcnQsby5lbmQpLHQsYSwhMSl9aWYoMD09PXImJiFpJiYhbiYmND09PXMubGVuZ3RoJiYzPT09c1swXS54JiYtMT09PXNbMF0ueSYmLTM9PT1zWzFdLngmJi0xPT09c1sxXS55JiYyPT09c1syXS54JiYtMj09PXNbMl0ueSYmLTI9PT1zWzNdLngmJi0yPT09c1szXS55KXJldHVybiBmdW5jdGlvbiBkZWNvZGVCaXRtYXBUZW1wbGF0ZTAoZSx0LGEpe2NvbnN0IHI9YS5kZWNvZGVyLG49YS5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoIkdCIiksaT1bXTtsZXQgcyxvLGMsbCxoLHUsZDtmb3Iobz0wO288dDtvKyspe2g9aVtvXT1uZXcgVWludDhBcnJheShlKTt1PW88MT9oOmlbby0xXTtkPW88Mj9oOmlbby0yXTtzPWRbMF08PDEzfGRbMV08PDEyfGRbMl08PDExfHVbMF08PDd8dVsxXTw8Nnx1WzJdPDw1fHVbM108PDQ7Zm9yKGM9MDtjPGU7YysrKXtoW2NdPWw9ci5yZWFkQml0KG4scyk7cz0oMzE3MzUmcyk8PDF8KGMrMzxlP2RbYyszXTw8MTE6MCl8KGMrNDxlP3VbYys0XTw8NDowKXxsfX1yZXR1cm4gaX0odCxhLG8pO2NvbnN0IGM9ISFpLGw9aFtyXS5jb25jYXQocyk7bC5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLnktdC55fHxlLngtdC54fSkpO2NvbnN0IHU9bC5sZW5ndGgsZj1uZXcgSW50OEFycmF5KHUpLGc9bmV3IEludDhBcnJheSh1KSxwPVtdO2xldCBtLGIseT0wLHc9MCxTPTAseD0wO2ZvcihiPTA7Yjx1O2IrKyl7ZltiXT1sW2JdLng7Z1tiXT1sW2JdLnk7dz1NYXRoLm1pbih3LGxbYl0ueCk7Uz1NYXRoLm1heChTLGxbYl0ueCk7eD1NYXRoLm1pbih4LGxbYl0ueSk7Yjx1LTEmJmxbYl0ueT09PWxbYisxXS55JiZsW2JdLng9PT1sW2IrMV0ueC0xP3l8PTE8PHUtMS1iOnAucHVzaChiKX1jb25zdCBDPXAubGVuZ3RoLGs9bmV3IEludDhBcnJheShDKSx2PW5ldyBJbnQ4QXJyYXkoQyksRj1uZXcgVWludDE2QXJyYXkoQyk7Zm9yKG09MDttPEM7bSsrKXtiPXBbbV07a1ttXT1sW2JdLng7dlttXT1sW2JdLnk7RlttXT0xPDx1LTEtYn1jb25zdCBPPS13LFQ9LXgsTT10LVMsRD1kW3JdO2xldCBFPW5ldyBVaW50OEFycmF5KHQpO2NvbnN0IE49W10sUj1vLmRlY29kZXIsTD1vLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR0IiKTtsZXQgJCxfLGosVSxYLEg9MCxxPTA7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7aWYobil7SF49Ui5yZWFkQml0KEwsRCk7aWYoSCl7Ti5wdXNoKEUpO2NvbnRpbnVlfX1FPW5ldyBVaW50OEFycmF5KEUpO04ucHVzaChFKTtmb3IoJD0wOyQ8dDskKyspe2lmKGMmJmlbZV1bJF0pe0VbJF09MDtjb250aW51ZX1pZigkPj1PJiYkPE0mJmU+PVQpe3E9cTw8MSZ5O2ZvcihiPTA7YjxDO2IrKyl7Xz1lK3ZbYl07aj0kK2tbYl07VT1OW19dW2pdO2lmKFUpe1U9RltiXTtxfD1VfX19ZWxzZXtxPTA7WD11LTE7Zm9yKGI9MDtiPHU7YisrLFgtLSl7aj0kK2ZbYl07aWYoaj49MCYmajx0KXtfPWUrZ1tiXTtpZihfPj0wKXtVPU5bX11bal07VSYmKHF8PVU8PFgpfX19fWNvbnN0IGE9Ui5yZWFkQml0KEwscSk7RVskXT1hfX1yZXR1cm4gTn1mdW5jdGlvbiBkZWNvZGVSZWZpbmVtZW50KGUsdCxhLHIsbixpLHMsbyxjKXtsZXQgbD11W2FdLmNvZGluZzswPT09YSYmKGw9bC5jb25jYXQoW29bMF1dKSk7Y29uc3QgaD1sLmxlbmd0aCxkPW5ldyBJbnQzMkFycmF5KGgpLGc9bmV3IEludDMyQXJyYXkoaCk7bGV0IHA7Zm9yKHA9MDtwPGg7cCsrKXtkW3BdPWxbcF0ueDtnW3BdPWxbcF0ueX1sZXQgbT11W2FdLnJlZmVyZW5jZTswPT09YSYmKG09bS5jb25jYXQoW29bMV1dKSk7Y29uc3QgYj1tLmxlbmd0aCx5PW5ldyBJbnQzMkFycmF5KGIpLHc9bmV3IEludDMyQXJyYXkoYik7Zm9yKHA9MDtwPGI7cCsrKXt5W3BdPW1bcF0ueDt3W3BdPW1bcF0ueX1jb25zdCBTPXJbMF0ubGVuZ3RoLHg9ci5sZW5ndGgsQz1mW2FdLGs9W10sdj1jLmRlY29kZXIsRj1jLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR1IiKTtsZXQgTz0wO2ZvcihsZXQgYT0wO2E8dDthKyspe2lmKHMpe09ePXYucmVhZEJpdChGLEMpO2lmKE8pdGhyb3cgbmV3IEpiaWcyRXJyb3IoInByZWRpY3Rpb24gaXMgbm90IHN1cHBvcnRlZCIpfWNvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoZSk7ay5wdXNoKHQpO2ZvcihsZXQgcz0wO3M8ZTtzKyspe2xldCBvLGMsbD0wO2ZvcihwPTA7cDxoO3ArKyl7bz1hK2dbcF07Yz1zK2RbcF07bzwwfHxjPDB8fGM+PWU/bDw8PTE6bD1sPDwxfGtbb11bY119Zm9yKHA9MDtwPGI7cCsrKXtvPWErd1twXS1pO2M9cyt5W3BdLW47bzwwfHxvPj14fHxjPDB8fGM+PVM/bDw8PTE6bD1sPDwxfHJbb11bY119Y29uc3QgdT12LnJlYWRCaXQoRixsKTt0W3NdPXV9fXJldHVybiBrfWZ1bmN0aW9uIGRlY29kZVRleHRSZWdpb24oZSx0LGEscixuLGkscyxvLGMsbCxoLHUsZCxmLGcscCxtLGIseSl7aWYoZSYmdCl0aHJvdyBuZXcgSmJpZzJFcnJvcigicmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO2NvbnN0IHc9W107bGV0IFMseDtmb3IoUz0wO1M8cjtTKyspe3g9bmV3IFVpbnQ4QXJyYXkoYSk7aWYobilmb3IobGV0IGU9MDtlPGE7ZSsrKXhbZV09bjt3LnB1c2goeCl9Y29uc3QgQz1tLmRlY29kZXIsaz1tLmNvbnRleHRDYWNoZTtsZXQgdj1lPy1mLnRhYmxlRGVsdGFULmRlY29kZSh5KTotZGVjb2RlSW50ZWdlcihrLCJJQURUIixDKSxGPTA7Uz0wO2Zvcig7UzxpOyl7dis9ZT9mLnRhYmxlRGVsdGFULmRlY29kZSh5KTpkZWNvZGVJbnRlZ2VyKGssIklBRFQiLEMpO0YrPWU/Zi50YWJsZUZpcnN0Uy5kZWNvZGUoeSk6ZGVjb2RlSW50ZWdlcihrLCJJQUZTIixDKTtsZXQgcj1GO2Zvcig7Oyl7bGV0IG49MDtzPjEmJihuPWU/eS5yZWFkQml0cyhiKTpkZWNvZGVJbnRlZ2VyKGssIklBSVQiLEMpKTtjb25zdCBpPXMqdituLEY9ZT9mLnN5bWJvbElEVGFibGUuZGVjb2RlKHkpOmRlY29kZUlBSUQoayxDLGMpLE89dCYmKGU/eS5yZWFkQml0KCk6ZGVjb2RlSW50ZWdlcihrLCJJQVJJIixDKSk7bGV0IFQ9b1tGXSxNPVRbMF0ubGVuZ3RoLEQ9VC5sZW5ndGg7aWYoTyl7Y29uc3QgZT1kZWNvZGVJbnRlZ2VyKGssIklBUkRXIixDKSx0PWRlY29kZUludGVnZXIoaywiSUFSREgiLEMpO00rPWU7RCs9dDtUPWRlY29kZVJlZmluZW1lbnQoTSxELGcsVCwoZT4+MSkrZGVjb2RlSW50ZWdlcihrLCJJQVJEWCIsQyksKHQ+PjEpK2RlY29kZUludGVnZXIoaywiSUFSRFkiLEMpLCExLHAsbSl9Y29uc3QgRT1pLSgxJnU/MDpELTEpLE49ci0oMiZ1P00tMTowKTtsZXQgUixMLCQ7aWYobCl7Zm9yKFI9MDtSPEQ7UisrKXt4PXdbTitSXTtpZigheCljb250aW51ZTskPVRbUl07Y29uc3QgZT1NYXRoLm1pbihhLUUsTSk7c3dpdGNoKGQpe2Nhc2UgMDpmb3IoTD0wO0w8ZTtMKyspeFtFK0xdfD0kW0xdO2JyZWFrO2Nhc2UgMjpmb3IoTD0wO0w8ZTtMKyspeFtFK0xdXj0kW0xdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7ZH0gaXMgbm90IHN1cHBvcnRlZGApfX1yKz1ELTF9ZWxzZXtmb3IoTD0wO0w8RDtMKyspe3g9d1tFK0xdO2lmKHgpeyQ9VFtMXTtzd2l0Y2goZCl7Y2FzZSAwOmZvcihSPTA7UjxNO1IrKyl4W04rUl18PSRbUl07YnJlYWs7Y2FzZSAyOmZvcihSPTA7UjxNO1IrKyl4W04rUl1ePSRbUl07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgJHtkfSBpcyBub3Qgc3VwcG9ydGVkYCl9fX1yKz1NLTF9UysrO2NvbnN0IF89ZT9mLnRhYmxlRGVsdGFTLmRlY29kZSh5KTpkZWNvZGVJbnRlZ2VyKGssIklBRFMiLEMpO2lmKG51bGw9PT1fKWJyZWFrO3IrPV8raH19cmV0dXJuIHd9ZnVuY3Rpb24gcmVhZFNlZ21lbnRIZWFkZXIoZSx0KXtjb25zdCBhPXt9O2EubnVtYmVyPSgwLG4ucmVhZFVpbnQzMikoZSx0KTtjb25zdCByPWVbdCs0XSxpPTYzJnI7aWYoIWxbaV0pdGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgc2VnbWVudCB0eXBlOiAiK2kpO2EudHlwZT1pO2EudHlwZU5hbWU9bFtpXTthLmRlZmVycmVkTm9uUmV0YWluPSEhKDEyOCZyKTtjb25zdCBzPSEhKDY0JnIpLG89ZVt0KzVdO2xldCBjPW8+PjUmNztjb25zdCBoPVszMSZvXTtsZXQgdT10KzY7aWYoNz09PW8pe2M9NTM2ODcwOTExJigwLG4ucmVhZFVpbnQzMikoZSx1LTEpO3UrPTM7bGV0IHQ9Yys3Pj4zO2hbMF09ZVt1KytdO2Zvcig7LS10PjA7KWgucHVzaChlW3UrK10pfWVsc2UgaWYoNT09PW98fDY9PT1vKXRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIHJlZmVycmVkLXRvIGZsYWdzIik7YS5yZXRhaW5CaXRzPWg7bGV0IGQ9NDthLm51bWJlcjw9MjU2P2Q9MTphLm51bWJlcjw9NjU1MzYmJihkPTIpO2NvbnN0IGY9W107bGV0IHAsbTtmb3IocD0wO3A8YztwKyspe2xldCB0O3Q9MT09PWQ/ZVt1XToyPT09ZD8oMCxuLnJlYWRVaW50MTYpKGUsdSk6KDAsbi5yZWFkVWludDMyKShlLHUpO2YucHVzaCh0KTt1Kz1kfWEucmVmZXJyZWRUbz1mO2lmKHMpe2EucGFnZUFzc29jaWF0aW9uPSgwLG4ucmVhZFVpbnQzMikoZSx1KTt1Kz00fWVsc2UgYS5wYWdlQXNzb2NpYXRpb249ZVt1KytdO2EubGVuZ3RoPSgwLG4ucmVhZFVpbnQzMikoZSx1KTt1Kz00O2lmKDQyOTQ5NjcyOTU9PT1hLmxlbmd0aCl7aWYoMzghPT1pKXRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIHVua25vd24gc2VnbWVudCBsZW5ndGgiKTt7Y29uc3QgdD1yZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGUsdSkscj0hISgxJmVbdStnXSksbj02LGk9bmV3IFVpbnQ4QXJyYXkobik7aWYoIXIpe2lbMF09MjU1O2lbMV09MTcyfWlbMl09dC5oZWlnaHQ+Pj4yNCYyNTU7aVszXT10LmhlaWdodD4+MTYmMjU1O2lbNF09dC5oZWlnaHQ+PjgmMjU1O2lbNV09MjU1JnQuaGVpZ2h0O2ZvcihwPXUsbT1lLmxlbmd0aDtwPG07cCsrKXtsZXQgdD0wO2Zvcig7dDxuJiZpW3RdPT09ZVtwK3RdOyl0Kys7aWYodD09PW4pe2EubGVuZ3RoPXArbjticmVha319aWYoNDI5NDk2NzI5NT09PWEubGVuZ3RoKXRocm93IG5ldyBKYmlnMkVycm9yKCJzZWdtZW50IGVuZCB3YXMgbm90IGZvdW5kIil9fWEuaGVhZGVyRW5kPXU7cmV0dXJuIGF9ZnVuY3Rpb24gcmVhZFNlZ21lbnRzKGUsdCxhLHIpe2NvbnN0IG49W107bGV0IGk9YTtmb3IoO2k8cjspe2NvbnN0IGE9cmVhZFNlZ21lbnRIZWFkZXIodCxpKTtpPWEuaGVhZGVyRW5kO2NvbnN0IHI9e2hlYWRlcjphLGRhdGE6dH07aWYoIWUucmFuZG9tQWNjZXNzKXtyLnN0YXJ0PWk7aSs9YS5sZW5ndGg7ci5lbmQ9aX1uLnB1c2gocik7aWYoNTE9PT1hLnR5cGUpYnJlYWt9aWYoZS5yYW5kb21BY2Nlc3MpZm9yKGxldCBlPTAsdD1uLmxlbmd0aDtlPHQ7ZSsrKXtuW2VdLnN0YXJ0PWk7aSs9bltlXS5oZWFkZXIubGVuZ3RoO25bZV0uZW5kPWl9cmV0dXJuIG59ZnVuY3Rpb24gcmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihlLHQpe3JldHVybnt3aWR0aDooMCxuLnJlYWRVaW50MzIpKGUsdCksaGVpZ2h0OigwLG4ucmVhZFVpbnQzMikoZSx0KzQpLHg6KDAsbi5yZWFkVWludDMyKShlLHQrOCkseTooMCxuLnJlYWRVaW50MzIpKGUsdCsxMiksY29tYmluYXRpb25PcGVyYXRvcjo3JmVbdCsxNl19fWNvbnN0IGc9MTc7ZnVuY3Rpb24gcHJvY2Vzc1NlZ21lbnQoZSx0KXtjb25zdCBhPWUuaGVhZGVyLHI9ZS5kYXRhLGk9ZS5lbmQ7bGV0IHMsbyxjLGwsaD1lLnN0YXJ0O3N3aXRjaChhLnR5cGUpe2Nhc2UgMDpjb25zdCBlPXt9LHQ9KDAsbi5yZWFkVWludDE2KShyLGgpO2UuaHVmZm1hbj0hISgxJnQpO2UucmVmaW5lbWVudD0hISgyJnQpO2UuaHVmZm1hbkRIU2VsZWN0b3I9dD4+MiYzO2UuaHVmZm1hbkRXU2VsZWN0b3I9dD4+NCYzO2UuYml0bWFwU2l6ZVNlbGVjdG9yPXQ+PjYmMTtlLmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3I9dD4+NyYxO2UuYml0bWFwQ29kaW5nQ29udGV4dFVzZWQ9ISEoMjU2JnQpO2UuYml0bWFwQ29kaW5nQ29udGV4dFJldGFpbmVkPSEhKDUxMiZ0KTtlLnRlbXBsYXRlPXQ+PjEwJjM7ZS5yZWZpbmVtZW50VGVtcGxhdGU9dD4+MTImMTtoKz0yO2lmKCFlLmh1ZmZtYW4pe2w9MD09PWUudGVtcGxhdGU/NDoxO289W107Zm9yKGM9MDtjPGw7YysrKXtvLnB1c2goe3g6KDAsbi5yZWFkSW50OCkocixoKSx5OigwLG4ucmVhZEludDgpKHIsaCsxKX0pO2grPTJ9ZS5hdD1vfWlmKGUucmVmaW5lbWVudCYmIWUucmVmaW5lbWVudFRlbXBsYXRlKXtvPVtdO2ZvcihjPTA7YzwyO2MrKyl7by5wdXNoKHt4OigwLG4ucmVhZEludDgpKHIsaCkseTooMCxuLnJlYWRJbnQ4KShyLGgrMSl9KTtoKz0yfWUucmVmaW5lbWVudEF0PW99ZS5udW1iZXJPZkV4cG9ydGVkU3ltYm9scz0oMCxuLnJlYWRVaW50MzIpKHIsaCk7aCs9NDtlLm51bWJlck9mTmV3U3ltYm9scz0oMCxuLnJlYWRVaW50MzIpKHIsaCk7aCs9NDtzPVtlLGEubnVtYmVyLGEucmVmZXJyZWRUbyxyLGgsaV07YnJlYWs7Y2FzZSA2OmNhc2UgNzpjb25zdCB1PXt9O3UuaW5mbz1yZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKHIsaCk7aCs9Zztjb25zdCBkPSgwLG4ucmVhZFVpbnQxNikocixoKTtoKz0yO3UuaHVmZm1hbj0hISgxJmQpO3UucmVmaW5lbWVudD0hISgyJmQpO3UubG9nU3RyaXBTaXplPWQ+PjImMzt1LnN0cmlwU2l6ZT0xPDx1LmxvZ1N0cmlwU2l6ZTt1LnJlZmVyZW5jZUNvcm5lcj1kPj40JjM7dS50cmFuc3Bvc2VkPSEhKDY0JmQpO3UuY29tYmluYXRpb25PcGVyYXRvcj1kPj43JjM7dS5kZWZhdWx0UGl4ZWxWYWx1ZT1kPj45JjE7dS5kc09mZnNldD1kPDwxNz4+Mjc7dS5yZWZpbmVtZW50VGVtcGxhdGU9ZD4+MTUmMTtpZih1Lmh1ZmZtYW4pe2NvbnN0IGU9KDAsbi5yZWFkVWludDE2KShyLGgpO2grPTI7dS5odWZmbWFuRlM9MyZlO3UuaHVmZm1hbkRTPWU+PjImMzt1Lmh1ZmZtYW5EVD1lPj40JjM7dS5odWZmbWFuUmVmaW5lbWVudERXPWU+PjYmMzt1Lmh1ZmZtYW5SZWZpbmVtZW50REg9ZT4+OCYzO3UuaHVmZm1hblJlZmluZW1lbnREWD1lPj4xMCYzO3UuaHVmZm1hblJlZmluZW1lbnREWT1lPj4xMiYzO3UuaHVmZm1hblJlZmluZW1lbnRTaXplU2VsZWN0b3I9ISEoMTYzODQmZSl9aWYodS5yZWZpbmVtZW50JiYhdS5yZWZpbmVtZW50VGVtcGxhdGUpe289W107Zm9yKGM9MDtjPDI7YysrKXtvLnB1c2goe3g6KDAsbi5yZWFkSW50OCkocixoKSx5OigwLG4ucmVhZEludDgpKHIsaCsxKX0pO2grPTJ9dS5yZWZpbmVtZW50QXQ9b311Lm51bWJlck9mU3ltYm9sSW5zdGFuY2VzPSgwLG4ucmVhZFVpbnQzMikocixoKTtoKz00O3M9W3UsYS5yZWZlcnJlZFRvLHIsaCxpXTticmVhaztjYXNlIDE2OmNvbnN0IGY9e30scD1yW2grK107Zi5tbXI9ISEoMSZwKTtmLnRlbXBsYXRlPXA+PjEmMztmLnBhdHRlcm5XaWR0aD1yW2grK107Zi5wYXR0ZXJuSGVpZ2h0PXJbaCsrXTtmLm1heFBhdHRlcm5JbmRleD0oMCxuLnJlYWRVaW50MzIpKHIsaCk7aCs9NDtzPVtmLGEubnVtYmVyLHIsaCxpXTticmVhaztjYXNlIDIyOmNhc2UgMjM6Y29uc3QgbT17fTttLmluZm89cmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihyLGgpO2grPWc7Y29uc3QgYj1yW2grK107bS5tbXI9ISEoMSZiKTttLnRlbXBsYXRlPWI+PjEmMzttLmVuYWJsZVNraXA9ISEoOCZiKTttLmNvbWJpbmF0aW9uT3BlcmF0b3I9Yj4+NCY3O20uZGVmYXVsdFBpeGVsVmFsdWU9Yj4+NyYxO20uZ3JpZFdpZHRoPSgwLG4ucmVhZFVpbnQzMikocixoKTtoKz00O20uZ3JpZEhlaWdodD0oMCxuLnJlYWRVaW50MzIpKHIsaCk7aCs9NDttLmdyaWRPZmZzZXRYPTQyOTQ5NjcyOTUmKDAsbi5yZWFkVWludDMyKShyLGgpO2grPTQ7bS5ncmlkT2Zmc2V0WT00Mjk0OTY3Mjk1JigwLG4ucmVhZFVpbnQzMikocixoKTtoKz00O20uZ3JpZFZlY3Rvclg9KDAsbi5yZWFkVWludDE2KShyLGgpO2grPTI7bS5ncmlkVmVjdG9yWT0oMCxuLnJlYWRVaW50MTYpKHIsaCk7aCs9MjtzPVttLGEucmVmZXJyZWRUbyxyLGgsaV07YnJlYWs7Y2FzZSAzODpjYXNlIDM5OmNvbnN0IHk9e307eS5pbmZvPXJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24ocixoKTtoKz1nO2NvbnN0IHc9cltoKytdO3kubW1yPSEhKDEmdyk7eS50ZW1wbGF0ZT13Pj4xJjM7eS5wcmVkaWN0aW9uPSEhKDgmdyk7aWYoIXkubW1yKXtsPTA9PT15LnRlbXBsYXRlPzQ6MTtvPVtdO2ZvcihjPTA7YzxsO2MrKyl7by5wdXNoKHt4OigwLG4ucmVhZEludDgpKHIsaCkseTooMCxuLnJlYWRJbnQ4KShyLGgrMSl9KTtoKz0yfXkuYXQ9b31zPVt5LHIsaCxpXTticmVhaztjYXNlIDQ4OmNvbnN0IFM9e3dpZHRoOigwLG4ucmVhZFVpbnQzMikocixoKSxoZWlnaHQ6KDAsbi5yZWFkVWludDMyKShyLGgrNCkscmVzb2x1dGlvblg6KDAsbi5yZWFkVWludDMyKShyLGgrOCkscmVzb2x1dGlvblk6KDAsbi5yZWFkVWludDMyKShyLGgrMTIpfTs0Mjk0OTY3Mjk1PT09Uy5oZWlnaHQmJmRlbGV0ZSBTLmhlaWdodDtjb25zdCB4PXJbaCsxNl07KDAsbi5yZWFkVWludDE2KShyLGgrMTcpO1MubG9zc2xlc3M9ISEoMSZ4KTtTLnJlZmluZW1lbnQ9ISEoMiZ4KTtTLmRlZmF1bHRQaXhlbFZhbHVlPXg+PjImMTtTLmNvbWJpbmF0aW9uT3BlcmF0b3I9eD4+MyYzO1MucmVxdWlyZXNCdWZmZXI9ISEoMzImeCk7Uy5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGU9ISEoNjQmeCk7cz1bU107YnJlYWs7Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA2MjpicmVhaztjYXNlIDUzOnM9W2EubnVtYmVyLHIsaCxpXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKGBzZWdtZW50IHR5cGUgJHthLnR5cGVOYW1lfSgke2EudHlwZX0pIGlzIG5vdCBpbXBsZW1lbnRlZGApfWNvbnN0IHU9Im9uIithLnR5cGVOYW1lO3UgaW4gdCYmdFt1XS5hcHBseSh0LHMpfWZ1bmN0aW9uIHByb2Nlc3NTZWdtZW50cyhlLHQpe2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKylwcm9jZXNzU2VnbWVudChlW2FdLHQpfWNsYXNzIFNpbXBsZVNlZ21lbnRWaXNpdG9ye29uUGFnZUluZm9ybWF0aW9uKGUpe3RoaXMuY3VycmVudFBhZ2VJbmZvPWU7Y29uc3QgdD1lLndpZHRoKzc+PjMsYT1uZXcgVWludDhDbGFtcGVkQXJyYXkodCplLmhlaWdodCk7ZS5kZWZhdWx0UGl4ZWxWYWx1ZSYmYS5maWxsKDI1NSk7dGhpcy5idWZmZXI9YX1kcmF3Qml0bWFwKGUsdCl7Y29uc3QgYT10aGlzLmN1cnJlbnRQYWdlSW5mbyxyPWUud2lkdGgsbj1lLmhlaWdodCxpPWEud2lkdGgrNz4+MyxzPWEuY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlP2UuY29tYmluYXRpb25PcGVyYXRvcjphLmNvbWJpbmF0aW9uT3BlcmF0b3Isbz10aGlzLmJ1ZmZlcixjPTEyOD4+KDcmZS54KTtsZXQgbCxoLHUsZCxmPWUueSppKyhlLng+PjMpO3N3aXRjaChzKXtjYXNlIDA6Zm9yKGw9MDtsPG47bCsrKXt1PWM7ZD1mO2ZvcihoPTA7aDxyO2grKyl7dFtsXVtoXSYmKG9bZF18PXUpO3U+Pj0xO2lmKCF1KXt1PTEyODtkKyt9fWYrPWl9YnJlYWs7Y2FzZSAyOmZvcihsPTA7bDxuO2wrKyl7dT1jO2Q9Zjtmb3IoaD0wO2g8cjtoKyspe3RbbF1baF0mJihvW2RdXj11KTt1Pj49MTtpZighdSl7dT0xMjg7ZCsrfX1mKz1pfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7c30gaXMgbm90IHN1cHBvcnRlZGApfX1vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24oZSx0LGEscil7Y29uc3Qgbj1lLmluZm8saT1uZXcgRGVjb2RpbmdDb250ZXh0KHQsYSxyKSxzPWRlY29kZUJpdG1hcChlLm1tcixuLndpZHRoLG4uaGVpZ2h0LGUudGVtcGxhdGUsZS5wcmVkaWN0aW9uLG51bGwsZS5hdCxpKTt0aGlzLmRyYXdCaXRtYXAobixzKX1vbkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvbigpe3RoaXMub25JbW1lZGlhdGVHZW5lcmljUmVnaW9uKC4uLmFyZ3VtZW50cyl9b25TeW1ib2xEaWN0aW9uYXJ5KGUsdCxhLHIsaSxzKXtsZXQgbyxjO2lmKGUuaHVmZm1hbil7bz1mdW5jdGlvbiBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhlLHQsYSl7bGV0IHIsbixpLHMsbz0wO3N3aXRjaChlLmh1ZmZtYW5ESFNlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOnI9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5ESFNlbGVjdG9yKzQpO2JyZWFrO2Nhc2UgMzpyPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsYSk7bysrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBESCBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EV1NlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOm49Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5EV1NlbGVjdG9yKzIpO2JyZWFrO2Nhc2UgMzpuPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsYSk7bysrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBEVyBzZWxlY3RvciIpfWlmKGUuYml0bWFwU2l6ZVNlbGVjdG9yKXtpPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsYSk7bysrfWVsc2UgaT1nZXRTdGFuZGFyZFRhYmxlKDEpO3M9ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yP2dldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsYSk6Z2V0U3RhbmRhcmRUYWJsZSgxKTtyZXR1cm57dGFibGVEZWx0YUhlaWdodDpyLHRhYmxlRGVsdGFXaWR0aDpuLHRhYmxlQml0bWFwU2l6ZTppLHRhYmxlQWdncmVnYXRlSW5zdGFuY2VzOnN9fShlLGEsdGhpcy5jdXN0b21UYWJsZXMpO2M9bmV3IFJlYWRlcihyLGkscyl9bGV0IGw9dGhpcy5zeW1ib2xzO2x8fCh0aGlzLnN5bWJvbHM9bD17fSk7Y29uc3QgaD1bXTtmb3IoY29uc3QgZSBvZiBhKXtjb25zdCB0PWxbZV07dCYmaC5wdXNoKC4uLnQpfWNvbnN0IHU9bmV3IERlY29kaW5nQ29udGV4dChyLGkscyk7bFt0XT1mdW5jdGlvbiBkZWNvZGVTeW1ib2xEaWN0aW9uYXJ5KGUsdCxhLHIsaSxzLG8sYyxsLGgsdSxkKXtpZihlJiZ0KXRocm93IG5ldyBKYmlnMkVycm9yKCJzeW1ib2wgcmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO2NvbnN0IGY9W107bGV0IGc9MCxwPSgwLG4ubG9nMikoYS5sZW5ndGgrcik7Y29uc3QgbT11LmRlY29kZXIsYj11LmNvbnRleHRDYWNoZTtsZXQgeSx3O2lmKGUpe3k9Z2V0U3RhbmRhcmRUYWJsZSgxKTt3PVtdO3A9TWF0aC5tYXgocCwxKX1mb3IoO2YubGVuZ3RoPHI7KXtnKz1lP3MudGFibGVEZWx0YUhlaWdodC5kZWNvZGUoZCk6ZGVjb2RlSW50ZWdlcihiLCJJQURIIixtKTtsZXQgcj0wLG49MDtjb25zdCBpPWU/dy5sZW5ndGg6MDtmb3IoOzspe2NvbnN0IGk9ZT9zLnRhYmxlRGVsdGFXaWR0aC5kZWNvZGUoZCk6ZGVjb2RlSW50ZWdlcihiLCJJQURXIixtKTtpZihudWxsPT09aSlicmVhaztyKz1pO24rPXI7bGV0IHk7aWYodCl7Y29uc3Qgbj1kZWNvZGVJbnRlZ2VyKGIsIklBQUkiLG0pO2lmKG4+MSl5PWRlY29kZVRleHRSZWdpb24oZSx0LHIsZywwLG4sMSxhLmNvbmNhdChmKSxwLDAsMCwxLDAscyxsLGgsdSwwLGQpO2Vsc2V7Y29uc3QgZT1kZWNvZGVJQUlEKGIsbSxwKSx0PWRlY29kZUludGVnZXIoYiwiSUFSRFgiLG0pLG49ZGVjb2RlSW50ZWdlcihiLCJJQVJEWSIsbSk7eT1kZWNvZGVSZWZpbmVtZW50KHIsZyxsLGU8YS5sZW5ndGg/YVtlXTpmW2UtYS5sZW5ndGhdLHQsbiwhMSxoLHUpfWYucHVzaCh5KX1lbHNlIGlmKGUpdy5wdXNoKHIpO2Vsc2V7eT1kZWNvZGVCaXRtYXAoITEscixnLG8sITEsbnVsbCxjLHUpO2YucHVzaCh5KX19aWYoZSYmIXQpe2NvbnN0IGU9cy50YWJsZUJpdG1hcFNpemUuZGVjb2RlKGQpO2QuYnl0ZUFsaWduKCk7bGV0IHQ7aWYoMD09PWUpdD1yZWFkVW5jb21wcmVzc2VkQml0bWFwKGQsbixnKTtlbHNle2NvbnN0IGE9ZC5lbmQscj1kLnBvc2l0aW9uK2U7ZC5lbmQ9cjt0PWRlY29kZU1NUkJpdG1hcChkLG4sZywhMSk7ZC5lbmQ9YTtkLnBvc2l0aW9uPXJ9Y29uc3QgYT13Lmxlbmd0aDtpZihpPT09YS0xKWYucHVzaCh0KTtlbHNle2xldCBlLHIsbixzLG8sYz0wO2ZvcihlPWk7ZTxhO2UrKyl7cz13W2VdO249YytzO289W107Zm9yKHI9MDtyPGc7cisrKW8ucHVzaCh0W3JdLnN1YmFycmF5KGMsbikpO2YucHVzaChvKTtjPW59fX19Y29uc3QgUz1bXSx4PVtdO2xldCBDLGssdj0hMTtjb25zdCBGPWEubGVuZ3RoK3I7Zm9yKDt4Lmxlbmd0aDxGOyl7bGV0IHQ9ZT95LmRlY29kZShkKTpkZWNvZGVJbnRlZ2VyKGIsIklBRVgiLG0pO2Zvcig7dC0tOyl4LnB1c2godik7dj0hdn1mb3IoQz0wLGs9YS5sZW5ndGg7QzxrO0MrKyl4W0NdJiZTLnB1c2goYVtDXSk7Zm9yKGxldCBlPTA7ZTxyO0MrKyxlKyspeFtDXSYmUy5wdXNoKGZbZV0pO3JldHVybiBTfShlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LGgsZS5udW1iZXJPZk5ld1N5bWJvbHMsZS5udW1iZXJPZkV4cG9ydGVkU3ltYm9scyxvLGUudGVtcGxhdGUsZS5hdCxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCx1LGMpfW9uSW1tZWRpYXRlVGV4dFJlZ2lvbihlLHQsYSxyLGkpe2NvbnN0IHM9ZS5pbmZvO2xldCBvLGM7Y29uc3QgbD10aGlzLnN5bWJvbHMsaD1bXTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PWxbZV07dCYmaC5wdXNoKC4uLnQpfWNvbnN0IHU9KDAsbi5sb2cyKShoLmxlbmd0aCk7aWYoZS5odWZmbWFuKXtjPW5ldyBSZWFkZXIoYSxyLGkpO289ZnVuY3Rpb24gZ2V0VGV4dFJlZ2lvbkh1ZmZtYW5UYWJsZXMoZSx0LGEscixuKXtjb25zdCBpPVtdO2ZvcihsZXQgZT0wO2U8PTM0O2UrKyl7Y29uc3QgdD1uLnJlYWRCaXRzKDQpO2kucHVzaChuZXcgSHVmZm1hbkxpbmUoW2UsdCwwLDBdKSl9Y29uc3Qgcz1uZXcgSHVmZm1hblRhYmxlKGksITEpO2kubGVuZ3RoPTA7Zm9yKGxldCBlPTA7ZTxyOyl7Y29uc3QgdD1zLmRlY29kZShuKTtpZih0Pj0zMil7bGV0IGEscixzO3N3aXRjaCh0KXtjYXNlIDMyOmlmKDA9PT1lKXRocm93IG5ldyBKYmlnMkVycm9yKCJubyBwcmV2aW91cyB2YWx1ZSBpbiBzeW1ib2wgSUQgdGFibGUiKTtyPW4ucmVhZEJpdHMoMikrMzthPWlbZS0xXS5wcmVmaXhMZW5ndGg7YnJlYWs7Y2FzZSAzMzpyPW4ucmVhZEJpdHMoMykrMzthPTA7YnJlYWs7Y2FzZSAzNDpyPW4ucmVhZEJpdHMoNykrMTE7YT0wO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgY29kZSBsZW5ndGggaW4gc3ltYm9sIElEIHRhYmxlIil9Zm9yKHM9MDtzPHI7cysrKXtpLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtlLGEsMCwwXSkpO2UrK319ZWxzZXtpLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtlLHQsMCwwXSkpO2UrK319bi5ieXRlQWxpZ24oKTtjb25zdCBvPW5ldyBIdWZmbWFuVGFibGUoaSwhMSk7bGV0IGMsbCxoLHU9MDtzd2l0Y2goZS5odWZmbWFuRlMpe2Nhc2UgMDpjYXNlIDE6Yz1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkZTKzYpO2JyZWFrO2Nhc2UgMzpjPWdldEN1c3RvbUh1ZmZtYW5UYWJsZSh1LHQsYSk7dSsrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBGUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EUyl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6bD1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkRTKzgpO2JyZWFrO2Nhc2UgMzpsPWdldEN1c3RvbUh1ZmZtYW5UYWJsZSh1LHQsYSk7dSsrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBEUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EVCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6aD1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkRUKzExKTticmVhaztjYXNlIDM6aD1nZXRDdXN0b21IdWZmbWFuVGFibGUodSx0LGEpO3UrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gRFQgc2VsZWN0b3IiKX1pZihlLnJlZmluZW1lbnQpdGhyb3cgbmV3IEpiaWcyRXJyb3IoInJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm57c3ltYm9sSURUYWJsZTpvLHRhYmxlRmlyc3RTOmMsdGFibGVEZWx0YVM6bCx0YWJsZURlbHRhVDpofX0oZSx0LHRoaXMuY3VzdG9tVGFibGVzLGgubGVuZ3RoLGMpfWNvbnN0IGQ9bmV3IERlY29kaW5nQ29udGV4dChhLHIsaSksZj1kZWNvZGVUZXh0UmVnaW9uKGUuaHVmZm1hbixlLnJlZmluZW1lbnQscy53aWR0aCxzLmhlaWdodCxlLmRlZmF1bHRQaXhlbFZhbHVlLGUubnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMsZS5zdHJpcFNpemUsaCx1LGUudHJhbnNwb3NlZCxlLmRzT2Zmc2V0LGUucmVmZXJlbmNlQ29ybmVyLGUuY29tYmluYXRpb25PcGVyYXRvcixvLGUucmVmaW5lbWVudFRlbXBsYXRlLGUucmVmaW5lbWVudEF0LGQsZS5sb2dTdHJpcFNpemUsYyk7dGhpcy5kcmF3Qml0bWFwKHMsZil9b25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24oKXt0aGlzLm9uSW1tZWRpYXRlVGV4dFJlZ2lvbiguLi5hcmd1bWVudHMpfW9uUGF0dGVybkRpY3Rpb25hcnkoZSx0LGEscixuKXtsZXQgaT10aGlzLnBhdHRlcm5zO2l8fCh0aGlzLnBhdHRlcm5zPWk9e30pO2NvbnN0IHM9bmV3IERlY29kaW5nQ29udGV4dChhLHIsbik7aVt0XT1mdW5jdGlvbiBkZWNvZGVQYXR0ZXJuRGljdGlvbmFyeShlLHQsYSxyLG4saSl7Y29uc3Qgcz1bXTtpZighZSl7cy5wdXNoKHt4Oi10LHk6MH0pOzA9PT1uJiZzLnB1c2goe3g6LTMseTotMX0se3g6Mix5Oi0yfSx7eDotMix5Oi0yfSl9Y29uc3Qgbz1kZWNvZGVCaXRtYXAoZSwocisxKSp0LGEsbiwhMSxudWxsLHMsaSksYz1bXTtmb3IobGV0IGU9MDtlPD1yO2UrKyl7Y29uc3Qgcj1bXSxuPXQqZSxpPW4rdDtmb3IobGV0IGU9MDtlPGE7ZSsrKXIucHVzaChvW2VdLnN1YmFycmF5KG4saSkpO2MucHVzaChyKX1yZXR1cm4gY30oZS5tbXIsZS5wYXR0ZXJuV2lkdGgsZS5wYXR0ZXJuSGVpZ2h0LGUubWF4UGF0dGVybkluZGV4LGUudGVtcGxhdGUscyl9b25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbihlLHQsYSxyLGkpe2NvbnN0IHM9dGhpcy5wYXR0ZXJuc1t0WzBdXSxvPWUuaW5mbyxjPW5ldyBEZWNvZGluZ0NvbnRleHQoYSxyLGkpLGw9ZnVuY3Rpb24gZGVjb2RlSGFsZnRvbmVSZWdpb24oZSx0LGEscixpLHMsbyxjLGwsaCx1LGQsZixnLHApe2lmKG8pdGhyb3cgbmV3IEpiaWcyRXJyb3IoInNraXAgaXMgbm90IHN1cHBvcnRlZCIpO2lmKDAhPT1jKXRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAiJHtjfSIgaXMgbm90IHN1cHBvcnRlZCBpbiBoYWxmdG9uZSByZWdpb25gKTtjb25zdCBtPVtdO2xldCBiLHksdztmb3IoYj0wO2I8aTtiKyspe3c9bmV3IFVpbnQ4QXJyYXkocik7aWYocylmb3IoeT0wO3k8cjt5Kyspd1t5XT1zO20ucHVzaCh3KX1jb25zdCBTPXQubGVuZ3RoLHg9dFswXSxDPXhbMF0ubGVuZ3RoLGs9eC5sZW5ndGgsdj0oMCxuLmxvZzIpKFMpLEY9W107aWYoIWUpe0YucHVzaCh7eDphPD0xPzM6Mix5Oi0xfSk7MD09PWEmJkYucHVzaCh7eDotMyx5Oi0xfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTJ9KX1jb25zdCBPPVtdO2xldCBULE0sRCxFLE4sUixMLCQsXyxqLFU7ZSYmKFQ9bmV3IFJlYWRlcihwLmRhdGEscC5zdGFydCxwLmVuZCkpO2ZvcihiPXYtMTtiPj0wO2ItLSl7TT1lP2RlY29kZU1NUkJpdG1hcChULGwsaCwhMCk6ZGVjb2RlQml0bWFwKCExLGwsaCxhLCExLG51bGwsRixwKTtPW2JdPU19Zm9yKEQ9MDtEPGg7RCsrKWZvcihFPTA7RTxsO0UrKyl7Tj0wO1I9MDtmb3IoeT12LTE7eT49MDt5LS0pe05ePU9beV1bRF1bRV07Unw9Tjw8eX1MPXRbUl07JD11K0QqZytFKmY+Pjg7Xz1kK0QqZi1FKmc+Pjg7aWYoJD49MCYmJCtDPD1yJiZfPj0wJiZfK2s8PWkpZm9yKGI9MDtiPGs7YisrKXtVPW1bXytiXTtqPUxbYl07Zm9yKHk9MDt5PEM7eSsrKVVbJCt5XXw9alt5XX1lbHNle2xldCBlLHQ7Zm9yKGI9MDtiPGs7YisrKXt0PV8rYjtpZighKHQ8MHx8dD49aSkpe1U9bVt0XTtqPUxbYl07Zm9yKHk9MDt5PEM7eSsrKXtlPSQreTtlPj0wJiZlPHImJihVW2VdfD1qW3ldKX19fX19cmV0dXJuIG19KGUubW1yLHMsZS50ZW1wbGF0ZSxvLndpZHRoLG8uaGVpZ2h0LGUuZGVmYXVsdFBpeGVsVmFsdWUsZS5lbmFibGVTa2lwLGUuY29tYmluYXRpb25PcGVyYXRvcixlLmdyaWRXaWR0aCxlLmdyaWRIZWlnaHQsZS5ncmlkT2Zmc2V0WCxlLmdyaWRPZmZzZXRZLGUuZ3JpZFZlY3RvclgsZS5ncmlkVmVjdG9yWSxjKTt0aGlzLmRyYXdCaXRtYXAobyxsKX1vbkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb24oKXt0aGlzLm9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24oLi4uYXJndW1lbnRzKX1vblRhYmxlcyhlLHQsYSxyKXtsZXQgaT10aGlzLmN1c3RvbVRhYmxlcztpfHwodGhpcy5jdXN0b21UYWJsZXM9aT17fSk7aVtlXT1mdW5jdGlvbiBkZWNvZGVUYWJsZXNTZWdtZW50KGUsdCxhKXtjb25zdCByPWVbdF0saT00Mjk0OTY3Mjk1JigwLG4ucmVhZFVpbnQzMikoZSx0KzEpLHM9NDI5NDk2NzI5NSYoMCxuLnJlYWRVaW50MzIpKGUsdCs1KSxvPW5ldyBSZWFkZXIoZSx0KzksYSksYz0xKyhyPj4xJjcpLGw9MSsocj4+NCY3KSxoPVtdO2xldCB1LGQsZj1pO2Rve3U9by5yZWFkQml0cyhjKTtkPW8ucmVhZEJpdHMobCk7aC5wdXNoKG5ldyBIdWZmbWFuTGluZShbZix1LGQsMF0pKTtmKz0xPDxkfXdoaWxlKGY8cyk7dT1vLnJlYWRCaXRzKGMpO2gucHVzaChuZXcgSHVmZm1hbkxpbmUoW2ktMSx1LDMyLDAsImxvd2VyIl0pKTt1PW8ucmVhZEJpdHMoYyk7aC5wdXNoKG5ldyBIdWZmbWFuTGluZShbcyx1LDMyLDBdKSk7aWYoMSZyKXt1PW8ucmVhZEJpdHMoYyk7aC5wdXNoKG5ldyBIdWZmbWFuTGluZShbdSwwXSkpfXJldHVybiBuZXcgSHVmZm1hblRhYmxlKGgsITEpfSh0LGEscil9fWNsYXNzIEh1ZmZtYW5MaW5le2NvbnN0cnVjdG9yKGUpe2lmKDI9PT1lLmxlbmd0aCl7dGhpcy5pc09PQj0hMDt0aGlzLnJhbmdlTG93PTA7dGhpcy5wcmVmaXhMZW5ndGg9ZVswXTt0aGlzLnJhbmdlTGVuZ3RoPTA7dGhpcy5wcmVmaXhDb2RlPWVbMV07dGhpcy5pc0xvd2VyUmFuZ2U9ITF9ZWxzZXt0aGlzLmlzT09CPSExO3RoaXMucmFuZ2VMb3c9ZVswXTt0aGlzLnByZWZpeExlbmd0aD1lWzFdO3RoaXMucmFuZ2VMZW5ndGg9ZVsyXTt0aGlzLnByZWZpeENvZGU9ZVszXTt0aGlzLmlzTG93ZXJSYW5nZT0ibG93ZXIiPT09ZVs0XX19fWNsYXNzIEh1ZmZtYW5UcmVlTm9kZXtjb25zdHJ1Y3RvcihlKXt0aGlzLmNoaWxkcmVuPVtdO2lmKGUpe3RoaXMuaXNMZWFmPSEwO3RoaXMucmFuZ2VMZW5ndGg9ZS5yYW5nZUxlbmd0aDt0aGlzLnJhbmdlTG93PWUucmFuZ2VMb3c7dGhpcy5pc0xvd2VyUmFuZ2U9ZS5pc0xvd2VyUmFuZ2U7dGhpcy5pc09PQj1lLmlzT09CfWVsc2UgdGhpcy5pc0xlYWY9ITF9YnVpbGRUcmVlKGUsdCl7Y29uc3QgYT1lLnByZWZpeENvZGU+PnQmMTtpZih0PD0wKXRoaXMuY2hpbGRyZW5bYV09bmV3IEh1ZmZtYW5UcmVlTm9kZShlKTtlbHNle2xldCByPXRoaXMuY2hpbGRyZW5bYV07cnx8KHRoaXMuY2hpbGRyZW5bYV09cj1uZXcgSHVmZm1hblRyZWVOb2RlKG51bGwpKTtyLmJ1aWxkVHJlZShlLHQtMSl9fWRlY29kZU5vZGUoZSl7aWYodGhpcy5pc0xlYWYpe2lmKHRoaXMuaXNPT0IpcmV0dXJuIG51bGw7Y29uc3QgdD1lLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO3JldHVybiB0aGlzLnJhbmdlTG93Kyh0aGlzLmlzTG93ZXJSYW5nZT8tdDp0KX1jb25zdCB0PXRoaXMuY2hpbGRyZW5bZS5yZWFkQml0KCldO2lmKCF0KXRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gZGF0YSIpO3JldHVybiB0LmRlY29kZU5vZGUoZSl9fWNsYXNzIEh1ZmZtYW5UYWJsZXtjb25zdHJ1Y3RvcihlLHQpe3R8fHRoaXMuYXNzaWduUHJlZml4Q29kZXMoZSk7dGhpcy5yb290Tm9kZT1uZXcgSHVmZm1hblRyZWVOb2RlKG51bGwpO2ZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrKyl7Y29uc3QgYT1lW3RdO2EucHJlZml4TGVuZ3RoPjAmJnRoaXMucm9vdE5vZGUuYnVpbGRUcmVlKGEsYS5wcmVmaXhMZW5ndGgtMSl9fWRlY29kZShlKXtyZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKGUpfWFzc2lnblByZWZpeENvZGVzKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGE9MDtmb3IobGV0IHI9MDtyPHQ7cisrKWE9TWF0aC5tYXgoYSxlW3JdLnByZWZpeExlbmd0aCk7Y29uc3Qgcj1uZXcgVWludDMyQXJyYXkoYSsxKTtmb3IobGV0IGE9MDthPHQ7YSsrKXJbZVthXS5wcmVmaXhMZW5ndGhdKys7bGV0IG4saSxzLG89MSxjPTA7clswXT0wO2Zvcig7bzw9YTspe2M9YytyW28tMV08PDE7bj1jO2k9MDtmb3IoO2k8dDspe3M9ZVtpXTtpZihzLnByZWZpeExlbmd0aD09PW8pe3MucHJlZml4Q29kZT1uO24rK31pKyt9bysrfX19Y29uc3QgcD17fTtmdW5jdGlvbiBnZXRTdGFuZGFyZFRhYmxlKGUpe2xldCB0LGE9cFtlXTtpZihhKXJldHVybiBhO3N3aXRjaChlKXtjYXNlIDE6dD1bWzAsMSw0LDBdLFsxNiwyLDgsMl0sWzI3MiwzLDE2LDZdLFs2NTgwOCwzLDMyLDddXTticmVhaztjYXNlIDI6dD1bWzAsMSwwLDBdLFsxLDIsMCwyXSxbMiwzLDAsNl0sWzMsNCwzLDE0XSxbMTEsNSw2LDMwXSxbNzUsNiwzMiw2Ml0sWzYsNjNdXTticmVhaztjYXNlIDM6dD1bWy0yNTYsOCw4LDI1NF0sWzAsMSwwLDBdLFsxLDIsMCwyXSxbMiwzLDAsNl0sWzMsNCwzLDE0XSxbMTEsNSw2LDMwXSxbLTI1Nyw4LDMyLDI1NSwibG93ZXIiXSxbNzUsNywzMiwxMjZdLFs2LDYyXV07YnJlYWs7Y2FzZSA0OnQ9W1sxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywwLDZdLFs0LDQsMywxNF0sWzEyLDUsNiwzMF0sWzc2LDUsMzIsMzFdXTticmVhaztjYXNlIDU6dD1bWy0yNTUsNyw4LDEyNl0sWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDAsNl0sWzQsNCwzLDE0XSxbMTIsNSw2LDMwXSxbLTI1Niw3LDMyLDEyNywibG93ZXIiXSxbNzYsNiwzMiw2Ml1dO2JyZWFrO2Nhc2UgNjp0PVtbLTIwNDgsNSwxMCwyOF0sWy0xMDI0LDQsOSw4XSxbLTUxMiw0LDgsOV0sWy0yNTYsNCw3LDEwXSxbLTEyOCw1LDYsMjldLFstNjQsNSw1LDMwXSxbLTMyLDQsNSwxMV0sWzAsMiw3LDBdLFsxMjgsMyw3LDJdLFsyNTYsMyw4LDNdLFs1MTIsNCw5LDEyXSxbMTAyNCw0LDEwLDEzXSxbLTIwNDksNiwzMiw2MiwibG93ZXIiXSxbMjA0OCw2LDMyLDYzXV07YnJlYWs7Y2FzZSA3OnQ9W1stMTAyNCw0LDksOF0sWy01MTIsMyw4LDBdLFstMjU2LDQsNyw5XSxbLTEyOCw1LDYsMjZdLFstNjQsNSw1LDI3XSxbLTMyLDQsNSwxMF0sWzAsNCw1LDExXSxbMzIsNSw1LDI4XSxbNjQsNSw2LDI5XSxbMTI4LDQsNywxMl0sWzI1NiwzLDgsMV0sWzUxMiwzLDksMl0sWzEwMjQsMywxMCwzXSxbLTEwMjUsNSwzMiwzMCwibG93ZXIiXSxbMjA0OCw1LDMyLDMxXV07YnJlYWs7Y2FzZSA4OnQ9W1stMTUsOCwzLDI1Ml0sWy03LDksMSw1MDhdLFstNSw4LDEsMjUzXSxbLTMsOSwwLDUwOV0sWy0yLDcsMCwxMjRdLFstMSw0LDAsMTBdLFswLDIsMSwwXSxbMiw1LDAsMjZdLFszLDYsMCw1OF0sWzQsMyw0LDRdLFsyMCw2LDEsNTldLFsyMiw0LDQsMTFdLFszOCw0LDUsMTJdLFs3MCw1LDYsMjddLFsxMzQsNSw3LDI4XSxbMjYyLDYsNyw2MF0sWzM5MCw3LDgsMTI1XSxbNjQ2LDYsMTAsNjFdLFstMTYsOSwzMiw1MTAsImxvd2VyIl0sWzE2NzAsOSwzMiw1MTFdLFsyLDFdXTticmVhaztjYXNlIDk6dD1bWy0zMSw4LDQsMjUyXSxbLTE1LDksMiw1MDhdLFstMTEsOCwyLDI1M10sWy03LDksMSw1MDldLFstNSw3LDEsMTI0XSxbLTMsNCwxLDEwXSxbLTEsMywxLDJdLFsxLDMsMSwzXSxbMyw1LDEsMjZdLFs1LDYsMSw1OF0sWzcsMyw1LDRdLFszOSw2LDIsNTldLFs0Myw0LDUsMTFdLFs3NSw0LDYsMTJdLFsxMzksNSw3LDI3XSxbMjY3LDUsOCwyOF0sWzUyMyw2LDgsNjBdLFs3NzksNyw5LDEyNV0sWzEyOTEsNiwxMSw2MV0sWy0zMiw5LDMyLDUxMCwibG93ZXIiXSxbMzMzOSw5LDMyLDUxMV0sWzIsMF1dO2JyZWFrO2Nhc2UgMTA6dD1bWy0yMSw3LDQsMTIyXSxbLTUsOCwwLDI1Ml0sWy00LDcsMCwxMjNdLFstMyw1LDAsMjRdLFstMiwyLDIsMF0sWzIsNSwwLDI1XSxbMyw2LDAsNTRdLFs0LDcsMCwxMjRdLFs1LDgsMCwyNTNdLFs2LDIsNiwxXSxbNzAsNSw1LDI2XSxbMTAyLDYsNSw1NV0sWzEzNCw2LDYsNTZdLFsxOTgsNiw3LDU3XSxbMzI2LDYsOCw1OF0sWzU4Miw2LDksNTldLFsxMDk0LDYsMTAsNjBdLFsyMTE4LDcsMTEsMTI1XSxbLTIyLDgsMzIsMjU0LCJsb3dlciJdLFs0MTY2LDgsMzIsMjU1XSxbMiwyXV07YnJlYWs7Y2FzZSAxMTp0PVtbMSwxLDAsMF0sWzIsMiwxLDJdLFs0LDQsMCwxMl0sWzUsNCwxLDEzXSxbNyw1LDEsMjhdLFs5LDUsMiwyOV0sWzEzLDYsMiw2MF0sWzE3LDcsMiwxMjJdLFsyMSw3LDMsMTIzXSxbMjksNyw0LDEyNF0sWzQ1LDcsNSwxMjVdLFs3Nyw3LDYsMTI2XSxbMTQxLDcsMzIsMTI3XV07YnJlYWs7Y2FzZSAxMjp0PVtbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMSw2XSxbNSw1LDAsMjhdLFs2LDUsMSwyOV0sWzgsNiwxLDYwXSxbMTAsNywwLDEyMl0sWzExLDcsMSwxMjNdLFsxMyw3LDIsMTI0XSxbMTcsNywzLDEyNV0sWzI1LDcsNCwxMjZdLFs0MSw4LDUsMjU0XSxbNzMsOCwzMiwyNTVdXTticmVhaztjYXNlIDEzOnQ9W1sxLDEsMCwwXSxbMiwzLDAsNF0sWzMsNCwwLDEyXSxbNCw1LDAsMjhdLFs1LDQsMSwxM10sWzcsMywzLDVdLFsxNSw2LDEsNThdLFsxNyw2LDIsNTldLFsyMSw2LDMsNjBdLFsyOSw2LDQsNjFdLFs0NSw2LDUsNjJdLFs3Nyw3LDYsMTI2XSxbMTQxLDcsMzIsMTI3XV07YnJlYWs7Y2FzZSAxNDp0PVtbLTIsMywwLDRdLFstMSwzLDAsNV0sWzAsMSwwLDBdLFsxLDMsMCw2XSxbMiwzLDAsN11dO2JyZWFrO2Nhc2UgMTU6dD1bWy0yNCw3LDQsMTI0XSxbLTgsNiwyLDYwXSxbLTQsNSwxLDI4XSxbLTIsNCwwLDEyXSxbLTEsMywwLDRdLFswLDEsMCwwXSxbMSwzLDAsNV0sWzIsNCwwLDEzXSxbMyw1LDEsMjldLFs1LDYsMiw2MV0sWzksNyw0LDEyNV0sWy0yNSw3LDMyLDEyNiwibG93ZXIiXSxbMjUsNywzMiwxMjddXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKGBzdGFuZGFyZCB0YWJsZSBCLiR7ZX0gZG9lcyBub3QgZXhpc3RgKX1mb3IobGV0IGU9MCxhPXQubGVuZ3RoO2U8YTtlKyspdFtlXT1uZXcgSHVmZm1hbkxpbmUodFtlXSk7YT1uZXcgSHVmZm1hblRhYmxlKHQsITApO3BbZV09YTtyZXR1cm4gYX1jbGFzcyBSZWFkZXJ7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuZGF0YT1lO3RoaXMuc3RhcnQ9dDt0aGlzLmVuZD1hO3RoaXMucG9zaXRpb249dDt0aGlzLnNoaWZ0PS0xO3RoaXMuY3VycmVudEJ5dGU9MH1yZWFkQml0KCl7aWYodGhpcy5zaGlmdDwwKXtpZih0aGlzLnBvc2l0aW9uPj10aGlzLmVuZCl0aHJvdyBuZXcgSmJpZzJFcnJvcigiZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBiaXQiKTt0aGlzLmN1cnJlbnRCeXRlPXRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdO3RoaXMuc2hpZnQ9N31jb25zdCBlPXRoaXMuY3VycmVudEJ5dGU+PnRoaXMuc2hpZnQmMTt0aGlzLnNoaWZ0LS07cmV0dXJuIGV9cmVhZEJpdHMoZSl7bGV0IHQsYT0wO2Zvcih0PWUtMTt0Pj0wO3QtLSlhfD10aGlzLnJlYWRCaXQoKTw8dDtyZXR1cm4gYX1ieXRlQWxpZ24oKXt0aGlzLnNoaWZ0PS0xfW5leHQoKXtyZXR1cm4gdGhpcy5wb3NpdGlvbj49dGhpcy5lbmQ/LTE6dGhpcy5kYXRhW3RoaXMucG9zaXRpb24rK119fWZ1bmN0aW9uIGdldEN1c3RvbUh1ZmZtYW5UYWJsZShlLHQsYSl7bGV0IHI9MDtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9YVt0W25dXTtpZihpKXtpZihlPT09cilyZXR1cm4gaTtyKyt9fXRocm93IG5ldyBKYmlnMkVycm9yKCJjYW4ndCBmaW5kIGN1c3RvbSBIdWZmbWFuIHRhYmxlIil9ZnVuY3Rpb24gcmVhZFVuY29tcHJlc3NlZEJpdG1hcChlLHQsYSl7Y29uc3Qgcj1bXTtmb3IobGV0IG49MDtuPGE7bisrKXtjb25zdCBhPW5ldyBVaW50OEFycmF5KHQpO3IucHVzaChhKTtmb3IobGV0IHI9MDtyPHQ7cisrKWFbcl09ZS5yZWFkQml0KCk7ZS5ieXRlQWxpZ24oKX1yZXR1cm4gcn1mdW5jdGlvbiBkZWNvZGVNTVJCaXRtYXAoZSx0LGEscil7Y29uc3Qgbj17SzotMSxDb2x1bW5zOnQsUm93czphLEJsYWNrSXMxOiEwLEVuZE9mQmxvY2s6cn0saT1uZXcgcy5DQ0lUVEZheERlY29kZXIoZSxuKSxvPVtdO2xldCBjLGw9ITE7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7Y29uc3QgZT1uZXcgVWludDhBcnJheSh0KTtvLnB1c2goZSk7bGV0IGE9LTE7Zm9yKGxldCByPTA7cjx0O3IrKyl7aWYoYTwwKXtjPWkucmVhZE5leHRDaGFyKCk7aWYoLTE9PT1jKXtjPTA7bD0hMH1hPTd9ZVtyXT1jPj5hJjE7YS0tfX1pZihyJiYhbCl7Y29uc3QgZT01O2ZvcihsZXQgdD0wO3Q8ZSYmLTEhPT1pLnJlYWROZXh0Q2hhcigpO3QrKyk7fXJldHVybiBvfXQuSmJpZzJJbWFnZT1jbGFzcyBKYmlnMkltYWdle3BhcnNlQ2h1bmtzKGUpe3JldHVybiBmdW5jdGlvbiBwYXJzZUpiaWcyQ2h1bmtzKGUpe2NvbnN0IHQ9bmV3IFNpbXBsZVNlZ21lbnRWaXNpdG9yO2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKyl7Y29uc3Qgcj1lW2FdO3Byb2Nlc3NTZWdtZW50cyhyZWFkU2VnbWVudHMoe30sci5kYXRhLHIuc3RhcnQsci5lbmQpLHQpfXJldHVybiB0LmJ1ZmZlcn0oZSl9cGFyc2UoZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQ6IEpiaWcySW1hZ2UucGFyc2UiKX19fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkFyaXRobWV0aWNEZWNvZGVyPXZvaWQgMDtjb25zdCBhPVt7cWU6MjIwMTcsbm1wczoxLG5scHM6MSxzd2l0Y2hGbGFnOjF9LHtxZToxMzMxMyxubXBzOjIsbmxwczo2LHN3aXRjaEZsYWc6MH0se3FlOjYxNDUsbm1wczozLG5scHM6OSxzd2l0Y2hGbGFnOjB9LHtxZToyNzUzLG5tcHM6NCxubHBzOjEyLHN3aXRjaEZsYWc6MH0se3FlOjEzMTMsbm1wczo1LG5scHM6Mjksc3dpdGNoRmxhZzowfSx7cWU6NTQ1LG5tcHM6MzgsbmxwczozMyxzd2l0Y2hGbGFnOjB9LHtxZToyMjAxNyxubXBzOjcsbmxwczo2LHN3aXRjaEZsYWc6MX0se3FlOjIxNTA1LG5tcHM6OCxubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjE4NDMzLG5tcHM6OSxubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjE0MzM3LG5tcHM6MTAsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxMjI4OSxubXBzOjExLG5scHM6MTcsc3dpdGNoRmxhZzowfSx7cWU6OTIxNyxubXBzOjEyLG5scHM6MTgsc3dpdGNoRmxhZzowfSx7cWU6NzE2OSxubXBzOjEzLG5scHM6MjAsc3dpdGNoRmxhZzowfSx7cWU6NTYzMyxubXBzOjI5LG5scHM6MjEsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczoxNSxubHBzOjE0LHN3aXRjaEZsYWc6MX0se3FlOjIxNTA1LG5tcHM6MTYsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToyMDczNyxubXBzOjE3LG5scHM6MTUsc3dpdGNoRmxhZzowfSx7cWU6MTg0MzMsbm1wczoxOCxubHBzOjE2LHN3aXRjaEZsYWc6MH0se3FlOjE0MzM3LG5tcHM6MTksbmxwczoxNyxzd2l0Y2hGbGFnOjB9LHtxZToxMzMxMyxubXBzOjIwLG5scHM6MTgsc3dpdGNoRmxhZzowfSx7cWU6MTIyODksbm1wczoyMSxubHBzOjE5LHN3aXRjaEZsYWc6MH0se3FlOjEwMjQxLG5tcHM6MjIsbmxwczoxOSxzd2l0Y2hGbGFnOjB9LHtxZTo5MjE3LG5tcHM6MjMsbmxwczoyMCxzd2l0Y2hGbGFnOjB9LHtxZTo4NzA1LG5tcHM6MjQsbmxwczoyMSxzd2l0Y2hGbGFnOjB9LHtxZTo3MTY5LG5tcHM6MjUsbmxwczoyMixzd2l0Y2hGbGFnOjB9LHtxZTo2MTQ1LG5tcHM6MjYsbmxwczoyMyxzd2l0Y2hGbGFnOjB9LHtxZTo1NjMzLG5tcHM6MjcsbmxwczoyNCxzd2l0Y2hGbGFnOjB9LHtxZTo1MTIxLG5tcHM6MjgsbmxwczoyNSxzd2l0Y2hGbGFnOjB9LHtxZTo0NjA5LG5tcHM6MjksbmxwczoyNixzd2l0Y2hGbGFnOjB9LHtxZTo0MzUzLG5tcHM6MzAsbmxwczoyNyxzd2l0Y2hGbGFnOjB9LHtxZToyNzUzLG5tcHM6MzEsbmxwczoyOCxzd2l0Y2hGbGFnOjB9LHtxZToyNDk3LG5tcHM6MzIsbmxwczoyOSxzd2l0Y2hGbGFnOjB9LHtxZToyMjA5LG5tcHM6MzMsbmxwczozMCxzd2l0Y2hGbGFnOjB9LHtxZToxMzEzLG5tcHM6MzQsbmxwczozMSxzd2l0Y2hGbGFnOjB9LHtxZToxMDg5LG5tcHM6MzUsbmxwczozMixzd2l0Y2hGbGFnOjB9LHtxZTo2NzMsbm1wczozNixubHBzOjMzLHN3aXRjaEZsYWc6MH0se3FlOjU0NSxubXBzOjM3LG5scHM6MzQsc3dpdGNoRmxhZzowfSx7cWU6MzIxLG5tcHM6MzgsbmxwczozNSxzd2l0Y2hGbGFnOjB9LHtxZToyNzMsbm1wczozOSxubHBzOjM2LHN3aXRjaEZsYWc6MH0se3FlOjEzMyxubXBzOjQwLG5scHM6Mzcsc3dpdGNoRmxhZzowfSx7cWU6NzMsbm1wczo0MSxubHBzOjM4LHN3aXRjaEZsYWc6MH0se3FlOjM3LG5tcHM6NDIsbmxwczozOSxzd2l0Y2hGbGFnOjB9LHtxZToyMSxubXBzOjQzLG5scHM6NDAsc3dpdGNoRmxhZzowfSx7cWU6OSxubXBzOjQ0LG5scHM6NDEsc3dpdGNoRmxhZzowfSx7cWU6NSxubXBzOjQ1LG5scHM6NDIsc3dpdGNoRmxhZzowfSx7cWU6MSxubXBzOjQ1LG5scHM6NDMsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczo0NixubHBzOjQ2LHN3aXRjaEZsYWc6MH1dO3QuQXJpdGhtZXRpY0RlY29kZXI9Y2xhc3MgQXJpdGhtZXRpY0RlY29kZXJ7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuZGF0YT1lO3RoaXMuYnA9dDt0aGlzLmRhdGFFbmQ9YTt0aGlzLmNoaWdoPWVbdF07dGhpcy5jbG93PTA7dGhpcy5ieXRlSW4oKTt0aGlzLmNoaWdoPXRoaXMuY2hpZ2g8PDcmNjU1MzV8dGhpcy5jbG93Pj45JjEyNzt0aGlzLmNsb3c9dGhpcy5jbG93PDw3JjY1NTM1O3RoaXMuY3QtPTc7dGhpcy5hPTMyNzY4fWJ5dGVJbigpe2NvbnN0IGU9dGhpcy5kYXRhO2xldCB0PXRoaXMuYnA7aWYoMjU1PT09ZVt0XSlpZihlW3QrMV0+MTQzKXt0aGlzLmNsb3crPTY1MjgwO3RoaXMuY3Q9OH1lbHNle3QrKzt0aGlzLmNsb3crPWVbdF08PDk7dGhpcy5jdD03O3RoaXMuYnA9dH1lbHNle3QrKzt0aGlzLmNsb3crPXQ8dGhpcy5kYXRhRW5kP2VbdF08PDg6NjUyODA7dGhpcy5jdD04O3RoaXMuYnA9dH1pZih0aGlzLmNsb3c+NjU1MzUpe3RoaXMuY2hpZ2grPXRoaXMuY2xvdz4+MTY7dGhpcy5jbG93Jj02NTUzNX19cmVhZEJpdChlLHQpe2xldCByPWVbdF0+PjEsbj0xJmVbdF07Y29uc3QgaT1hW3JdLHM9aS5xZTtsZXQgbyxjPXRoaXMuYS1zO2lmKHRoaXMuY2hpZ2g8cylpZihjPHMpe2M9cztvPW47cj1pLm5tcHN9ZWxzZXtjPXM7bz0xXm47MT09PWkuc3dpdGNoRmxhZyYmKG49byk7cj1pLm5scHN9ZWxzZXt0aGlzLmNoaWdoLT1zO2lmKDAhPSgzMjc2OCZjKSl7dGhpcy5hPWM7cmV0dXJuIG59aWYoYzxzKXtvPTFebjsxPT09aS5zd2l0Y2hGbGFnJiYobj1vKTtyPWkubmxwc31lbHNle289bjtyPWkubm1wc319ZG97MD09PXRoaXMuY3QmJnRoaXMuYnl0ZUluKCk7Yzw8PTE7dGhpcy5jaGlnaD10aGlzLmNoaWdoPDwxJjY1NTM1fHRoaXMuY2xvdz4+MTUmMTt0aGlzLmNsb3c9dGhpcy5jbG93PDwxJjY1NTM1O3RoaXMuY3QtLX13aGlsZSgwPT0oMzI3NjgmYykpO3RoaXMuYT1jO2VbdF09cjw8MXxuO3JldHVybiBvfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5KcGVnU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE4KSxuPWEoNCksaT1hKDI3KSxzPWEoMik7Y2xhc3MgSnBlZ1N0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxhKXtsZXQgcjtmb3IoOy0xIT09KHI9ZS5nZXRCeXRlKCkpOylpZigyNTU9PT1yKXtlLnNraXAoLTEpO2JyZWFrfXN1cGVyKHQpO3RoaXMuc3RyZWFtPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLm1heWJlTGVuZ3RoPXQ7dGhpcy5wYXJhbXM9YX1nZXQgYnl0ZXMoKXtyZXR1cm4oMCxzLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jaygpe2lmKHRoaXMuZW9mKXJldHVybjtjb25zdCBlPXtkZWNvZGVUcmFuc2Zvcm06dm9pZCAwLGNvbG9yVHJhbnNmb3JtOnZvaWQgMH0sdD10aGlzLmRpY3QuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZigodGhpcy5mb3JjZVJHQkF8fHRoaXMuZm9yY2VSR0IpJiZBcnJheS5pc0FycmF5KHQpKXtjb25zdCBhPXRoaXMuZGljdC5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKXx8OCxyPXQubGVuZ3RoLG49bmV3IEludDMyQXJyYXkocik7bGV0IGk9ITE7Y29uc3Qgcz0oMTw8YSktMTtmb3IobGV0IGU9MDtlPHI7ZSs9Mil7bltlXT0yNTYqKHRbZSsxXS10W2VdKXwwO25bZSsxXT10W2VdKnN8MDsyNTY9PT1uW2VdJiYwPT09bltlKzFdfHwoaT0hMCl9aSYmKGUuZGVjb2RlVHJhbnNmb3JtPW4pfWlmKHRoaXMucGFyYW1zIGluc3RhbmNlb2Ygbi5EaWN0KXtjb25zdCB0PXRoaXMucGFyYW1zLmdldCgiQ29sb3JUcmFuc2Zvcm0iKTtOdW1iZXIuaXNJbnRlZ2VyKHQpJiYoZS5jb2xvclRyYW5zZm9ybT10KX1jb25zdCBhPW5ldyBpLkpwZWdJbWFnZShlKTthLnBhcnNlKHRoaXMuYnl0ZXMpO2NvbnN0IHI9YS5nZXREYXRhKHt3aWR0aDp0aGlzLmRyYXdXaWR0aCxoZWlnaHQ6dGhpcy5kcmF3SGVpZ2h0LGZvcmNlUkdCQTp0aGlzLmZvcmNlUkdCQSxmb3JjZVJHQjp0aGlzLmZvcmNlUkdCLGlzU291cmNlUERGOiEwfSk7dGhpcy5idWZmZXI9cjt0aGlzLmJ1ZmZlckxlbmd0aD1yLmxlbmd0aDt0aGlzLmVvZj0hMH19dC5KcGVnU3RyZWFtPUpwZWdTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5KcGVnSW1hZ2U9dm9pZCAwO3ZhciByPWEoMiksbj1hKDI4KSxpPWEoMyk7Y2xhc3MgSnBlZ0Vycm9yIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBKUEVHIGVycm9yOiAke2V9YCwiSnBlZ0Vycm9yIil9fWNsYXNzIEROTE1hcmtlckVycm9yIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiRE5MTWFya2VyRXJyb3IiKTt0aGlzLnNjYW5MaW5lcz10fX1jbGFzcyBFT0lNYXJrZXJFcnJvciBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJFT0lNYXJrZXJFcnJvciIpfX1jb25zdCBzPW5ldyBVaW50OEFycmF5KFswLDEsOCwxNiw5LDIsMywxMCwxNywyNCwzMiwyNSwxOCwxMSw0LDUsMTIsMTksMjYsMzMsNDAsNDgsNDEsMzQsMjcsMjAsMTMsNiw3LDE0LDIxLDI4LDM1LDQyLDQ5LDU2LDU3LDUwLDQzLDM2LDI5LDIyLDE1LDIzLDMwLDM3LDQ0LDUxLDU4LDU5LDUyLDQ1LDM4LDMxLDM5LDQ2LDUzLDYwLDYxLDU0LDQ3LDU1LDYyLDYzXSksbz00MDE3LGM9Nzk5LGw9MzQwNixoPTIyNzYsdT0xNTY3LGQ9Mzc4NCxmPTU3OTMsZz0yODk2O2Z1bmN0aW9uIGJ1aWxkSHVmZm1hblRhYmxlKGUsdCl7bGV0IGEscixuPTAsaT0xNjtmb3IoO2k+MCYmIWVbaS0xXTspaS0tO2NvbnN0IHM9W3tjaGlsZHJlbjpbXSxpbmRleDowfV07bGV0IG8sYz1zWzBdO2ZvcihhPTA7YTxpO2ErKyl7Zm9yKHI9MDtyPGVbYV07cisrKXtjPXMucG9wKCk7Yy5jaGlsZHJlbltjLmluZGV4XT10W25dO2Zvcig7Yy5pbmRleD4wOyljPXMucG9wKCk7Yy5pbmRleCsrO3MucHVzaChjKTtmb3IoO3MubGVuZ3RoPD1hOyl7cy5wdXNoKG89e2NoaWxkcmVuOltdLGluZGV4OjB9KTtjLmNoaWxkcmVuW2MuaW5kZXhdPW8uY2hpbGRyZW47Yz1vfW4rK31pZihhKzE8aSl7cy5wdXNoKG89e2NoaWxkcmVuOltdLGluZGV4OjB9KTtjLmNoaWxkcmVuW2MuaW5kZXhdPW8uY2hpbGRyZW47Yz1vfX1yZXR1cm4gc1swXS5jaGlsZHJlbn1mdW5jdGlvbiBnZXRCbG9ja0J1ZmZlck9mZnNldChlLHQsYSl7cmV0dXJuIDY0KigoZS5ibG9ja3NQZXJMaW5lKzEpKnQrYSl9ZnVuY3Rpb24gZGVjb2RlU2NhbihlLHQsYSxuLG8sYyxsLGgsdSxkPSExKXtjb25zdCBmPWEubWN1c1BlckxpbmUsZz1hLnByb2dyZXNzaXZlLHA9dDtsZXQgbT0wLGI9MDtmdW5jdGlvbiByZWFkQml0KCl7aWYoYj4wKXtiLS07cmV0dXJuIG0+PmImMX1tPWVbdCsrXTtpZigyNTU9PT1tKXtjb25zdCByPWVbdCsrXTtpZihyKXtpZigyMjA9PT1yJiZkKXt0Kz0yO2NvbnN0IHI9KDAsaS5yZWFkVWludDE2KShlLHQpO3QrPTI7aWYocj4wJiZyIT09YS5zY2FuTGluZXMpdGhyb3cgbmV3IEROTE1hcmtlckVycm9yKCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIixyKX1lbHNlIGlmKDIxNz09PXIpe2lmKGQpe2NvbnN0IGU9eCooOD09PWEucHJlY2lzaW9uPzg6MCk7aWYoZT4wJiZNYXRoLnJvdW5kKGEuc2NhbkxpbmVzL2UpPj01KXRocm93IG5ldyBETkxNYXJrZXJFcnJvcigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSwgcG9zc2libHkgY2F1c2VkIGJ5IGluY29ycmVjdCBgc2NhbkxpbmVzYCBwYXJhbWV0ZXIiLGUpfXRocm93IG5ldyBFT0lNYXJrZXJFcnJvcigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSIpfXRocm93IG5ldyBKcGVnRXJyb3IoYHVuZXhwZWN0ZWQgbWFya2VyICR7KG08PDh8cikudG9TdHJpbmcoMTYpfWApfX1iPTc7cmV0dXJuIG0+Pj43fWZ1bmN0aW9uIGRlY29kZUh1ZmZtYW4oZSl7bGV0IHQ9ZTtmb3IoOzspe3Q9dFtyZWFkQml0KCldO3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJudW1iZXIiOnJldHVybiB0O2Nhc2Uib2JqZWN0Ijpjb250aW51ZX10aHJvdyBuZXcgSnBlZ0Vycm9yKCJpbnZhbGlkIGh1ZmZtYW4gc2VxdWVuY2UiKX19ZnVuY3Rpb24gcmVjZWl2ZShlKXtsZXQgdD0wO2Zvcig7ZT4wOyl7dD10PDwxfHJlYWRCaXQoKTtlLS19cmV0dXJuIHR9ZnVuY3Rpb24gcmVjZWl2ZUFuZEV4dGVuZChlKXtpZigxPT09ZSlyZXR1cm4gMT09PXJlYWRCaXQoKT8xOi0xO2NvbnN0IHQ9cmVjZWl2ZShlKTtyZXR1cm4gdD49MTw8ZS0xP3Q6dCsoLTE8PGUpKzF9bGV0IHk9MDtsZXQgdyxTPTA7bGV0IHg9MDtmdW5jdGlvbiBkZWNvZGVNY3UoZSx0LGEscixuKXtjb25zdCBpPWElZjt4PShhL2Z8MCkqZS52K3I7Y29uc3Qgcz1pKmUuaCtuO3QoZSxnZXRCbG9ja0J1ZmZlck9mZnNldChlLHgscykpfWZ1bmN0aW9uIGRlY29kZUJsb2NrKGUsdCxhKXt4PWEvZS5ibG9ja3NQZXJMaW5lfDA7Y29uc3Qgcj1hJWUuYmxvY2tzUGVyTGluZTt0KGUsZ2V0QmxvY2tCdWZmZXJPZmZzZXQoZSx4LHIpKX1jb25zdCBDPW4ubGVuZ3RoO2xldCBrLHYsRixPLFQsTTtNPWc/MD09PWM/MD09PWg/ZnVuY3Rpb24gZGVjb2RlRENGaXJzdChlLHQpe2NvbnN0IGE9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZURDKSxyPTA9PT1hPzA6cmVjZWl2ZUFuZEV4dGVuZChhKTw8dTtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPXJ9OmZ1bmN0aW9uIGRlY29kZURDU3VjY2Vzc2l2ZShlLHQpe2UuYmxvY2tEYXRhW3RdfD1yZWFkQml0KCk8PHV9OjA9PT1oP2Z1bmN0aW9uIGRlY29kZUFDRmlyc3QoZSx0KXtpZih5PjApe3ktLTtyZXR1cm59bGV0IGE9Yztjb25zdCByPWw7Zm9yKDthPD1yOyl7Y29uc3Qgcj1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlQUMpLG49MTUmcixpPXI+PjQ7aWYoMD09PW4pe2lmKGk8MTUpe3k9cmVjZWl2ZShpKSsoMTw8aSktMTticmVha31hKz0xNjtjb250aW51ZX1hKz1pO2NvbnN0IG89c1thXTtlLmJsb2NrRGF0YVt0K29dPXJlY2VpdmVBbmRFeHRlbmQobikqKDE8PHUpO2ErK319OmZ1bmN0aW9uIGRlY29kZUFDU3VjY2Vzc2l2ZShlLHQpe2xldCBhPWM7Y29uc3Qgcj1sO2xldCBuLGksbz0wO2Zvcig7YTw9cjspe2NvbnN0IHI9dCtzW2FdLGM9ZS5ibG9ja0RhdGFbcl08MD8tMToxO3N3aXRjaChTKXtjYXNlIDA6aT1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlQUMpO249MTUmaTtvPWk+PjQ7aWYoMD09PW4paWYobzwxNSl7eT1yZWNlaXZlKG8pKygxPDxvKTtTPTR9ZWxzZXtvPTE2O1M9MX1lbHNle2lmKDEhPT1uKXRocm93IG5ldyBKcGVnRXJyb3IoImludmFsaWQgQUNuIGVuY29kaW5nIik7dz1yZWNlaXZlQW5kRXh0ZW5kKG4pO1M9bz8yOjN9Y29udGludWU7Y2FzZSAxOmNhc2UgMjppZihlLmJsb2NrRGF0YVtyXSllLmJsb2NrRGF0YVtyXSs9YyoocmVhZEJpdCgpPDx1KTtlbHNle28tLTswPT09byYmKFM9Mj09PVM/MzowKX1icmVhaztjYXNlIDM6aWYoZS5ibG9ja0RhdGFbcl0pZS5ibG9ja0RhdGFbcl0rPWMqKHJlYWRCaXQoKTw8dSk7ZWxzZXtlLmJsb2NrRGF0YVtyXT13PDx1O1M9MH1icmVhaztjYXNlIDQ6ZS5ibG9ja0RhdGFbcl0mJihlLmJsb2NrRGF0YVtyXSs9YyoocmVhZEJpdCgpPDx1KSl9YSsrfWlmKDQ9PT1TKXt5LS07MD09PXkmJihTPTApfX06ZnVuY3Rpb24gZGVjb2RlQmFzZWxpbmUoZSx0KXtjb25zdCBhPWRlY29kZUh1ZmZtYW4oZS5odWZmbWFuVGFibGVEQykscj0wPT09YT8wOnJlY2VpdmVBbmRFeHRlbmQoYSk7ZS5ibG9ja0RhdGFbdF09ZS5wcmVkKz1yO2xldCBuPTE7Zm9yKDtuPDY0Oyl7Y29uc3QgYT1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlQUMpLHI9MTUmYSxpPWE+PjQ7aWYoMD09PXIpe2lmKGk8MTUpYnJlYWs7bis9MTY7Y29udGludWV9bis9aTtjb25zdCBvPXNbbl07ZS5ibG9ja0RhdGFbdCtvXT1yZWNlaXZlQW5kRXh0ZW5kKHIpO24rK319O2xldCBELEU9MDtjb25zdCBOPTE9PT1DP25bMF0uYmxvY2tzUGVyTGluZSpuWzBdLmJsb2Nrc1BlckNvbHVtbjpmKmEubWN1c1BlckNvbHVtbjtsZXQgUixMO2Zvcig7RTw9Tjspe2NvbnN0IGE9bz9NYXRoLm1pbihOLUUsbyk6TjtpZihhPjApe2Zvcih2PTA7djxDO3YrKyluW3ZdLnByZWQ9MDt5PTA7aWYoMT09PUMpe2s9blswXTtmb3IoVD0wO1Q8YTtUKyspe2RlY29kZUJsb2NrKGssTSxFKTtFKyt9fWVsc2UgZm9yKFQ9MDtUPGE7VCsrKXtmb3Iodj0wO3Y8Qzt2Kyspe2s9blt2XTtSPWsuaDtMPWsudjtmb3IoRj0wO0Y8TDtGKyspZm9yKE89MDtPPFI7TysrKWRlY29kZU1jdShrLE0sRSxGLE8pfUUrK319Yj0wO0Q9ZmluZE5leHRGaWxlTWFya2VyKGUsdCk7aWYoIUQpYnJlYWs7aWYoRC5pbnZhbGlkKXtjb25zdCBlPWE+MD8idW5leHBlY3RlZCI6ImV4Y2Vzc2l2ZSI7KDAsci53YXJuKShgZGVjb2RlU2NhbiAtICR7ZX0gTUNVIGRhdGEsIGN1cnJlbnQgbWFya2VyIGlzOiAke0QuaW52YWxpZH1gKTt0PUQub2Zmc2V0fWlmKCEoRC5tYXJrZXI+PTY1NDg4JiZELm1hcmtlcjw9NjU0OTUpKWJyZWFrO3QrPTJ9cmV0dXJuIHQtcH1mdW5jdGlvbiBxdWFudGl6ZUFuZEludmVyc2UoZSx0LGEpe2NvbnN0IHI9ZS5xdWFudGl6YXRpb25UYWJsZSxuPWUuYmxvY2tEYXRhO2xldCBpLHMscCxtLGIseSx3LFMseCxDLGssdixGLE8sVCxNLEQ7aWYoIXIpdGhyb3cgbmV3IEpwZWdFcnJvcigibWlzc2luZyByZXF1aXJlZCBRdWFudGl6YXRpb24gVGFibGUuIik7Zm9yKGxldCBlPTA7ZTw2NDtlKz04KXt4PW5bdCtlXTtDPW5bdCtlKzFdO2s9blt0K2UrMl07dj1uW3QrZSszXTtGPW5bdCtlKzRdO089blt0K2UrNV07VD1uW3QrZSs2XTtNPW5bdCtlKzddO3gqPXJbZV07aWYoMCE9KEN8a3x2fEZ8T3xUfE0pKXtDKj1yW2UrMV07ayo9cltlKzJdO3YqPXJbZSszXTtGKj1yW2UrNF07Tyo9cltlKzVdO1QqPXJbZSs2XTtNKj1yW2UrN107aT1mKngrMTI4Pj44O3M9ZipGKzEyOD4+ODtwPWs7bT1UO2I9ZyooQy1NKSsxMjg+Pjg7Uz1nKihDK00pKzEyOD4+ODt5PXY8PDQ7dz1PPDw0O2k9aStzKzE+PjE7cz1pLXM7RD1wKmQrbSp1KzEyOD4+ODtwPXAqdS1tKmQrMTI4Pj44O209RDtiPWIrdysxPj4xO3c9Yi13O1M9Uyt5KzE+PjE7eT1TLXk7aT1pK20rMT4+MTttPWktbTtzPXMrcCsxPj4xO3A9cy1wO0Q9YipoK1MqbCsyMDQ4Pj4xMjtiPWIqbC1TKmgrMjA0OD4+MTI7Uz1EO0Q9eSpjK3cqbysyMDQ4Pj4xMjt5PXkqby13KmMrMjA0OD4+MTI7dz1EO2FbZV09aStTO2FbZSs3XT1pLVM7YVtlKzFdPXMrdzthW2UrNl09cy13O2FbZSsyXT1wK3k7YVtlKzVdPXAteTthW2UrM109bStiO2FbZSs0XT1tLWJ9ZWxzZXtEPWYqeCs1MTI+PjEwO2FbZV09RDthW2UrMV09RDthW2UrMl09RDthW2UrM109RDthW2UrNF09RDthW2UrNV09RDthW2UrNl09RDthW2UrN109RH19Zm9yKGxldCBlPTA7ZTw4OysrZSl7eD1hW2VdO0M9YVtlKzhdO2s9YVtlKzE2XTt2PWFbZSsyNF07Rj1hW2UrMzJdO089YVtlKzQwXTtUPWFbZSs0OF07TT1hW2UrNTZdO2lmKDAhPShDfGt8dnxGfE98VHxNKSl7aT1mKngrMjA0OD4+MTI7cz1mKkYrMjA0OD4+MTI7cD1rO209VDtiPWcqKEMtTSkrMjA0OD4+MTI7Uz1nKihDK00pKzIwNDg+PjEyO3k9djt3PU87aT00MTEyKyhpK3MrMT4+MSk7cz1pLXM7RD1wKmQrbSp1KzIwNDg+PjEyO3A9cCp1LW0qZCsyMDQ4Pj4xMjttPUQ7Yj1iK3crMT4+MTt3PWItdztTPVMreSsxPj4xO3k9Uy15O2k9aSttKzE+PjE7bT1pLW07cz1zK3ArMT4+MTtwPXMtcDtEPWIqaCtTKmwrMjA0OD4+MTI7Yj1iKmwtUypoKzIwNDg+PjEyO1M9RDtEPXkqYyt3Km8rMjA0OD4+MTI7eT15Km8tdypjKzIwNDg+PjEyO3c9RDt4PWkrUztNPWktUztDPXMrdztUPXMtdztrPXAreTtPPXAteTt2PW0rYjtGPW0tYjt4PDE2P3g9MDp4Pj00MDgwP3g9MjU1Ong+Pj00O0M8MTY/Qz0wOkM+PTQwODA/Qz0yNTU6Qz4+PTQ7azwxNj9rPTA6az49NDA4MD9rPTI1NTprPj49NDt2PDE2P3Y9MDp2Pj00MDgwP3Y9MjU1OnY+Pj00O0Y8MTY/Rj0wOkY+PTQwODA/Rj0yNTU6Rj4+PTQ7TzwxNj9PPTA6Tz49NDA4MD9PPTI1NTpPPj49NDtUPDE2P1Q9MDpUPj00MDgwP1Q9MjU1OlQ+Pj00O008MTY/TT0wOk0+PTQwODA/TT0yNTU6TT4+PTQ7blt0K2VdPXg7blt0K2UrOF09QztuW3QrZSsxNl09aztuW3QrZSsyNF09djtuW3QrZSszMl09RjtuW3QrZSs0MF09TztuW3QrZSs0OF09VDtuW3QrZSs1Nl09TX1lbHNle0Q9Zip4KzgxOTI+PjE0O0Q9RDwtMjA0MD8wOkQ+PTIwMjQ/MjU1OkQrMjA1Nj4+NDtuW3QrZV09RDtuW3QrZSs4XT1EO25bdCtlKzE2XT1EO25bdCtlKzI0XT1EO25bdCtlKzMyXT1EO25bdCtlKzQwXT1EO25bdCtlKzQ4XT1EO25bdCtlKzU2XT1EfX19ZnVuY3Rpb24gYnVpbGRDb21wb25lbnREYXRhKGUsdCl7Y29uc3QgYT10LmJsb2Nrc1BlckxpbmUscj10LmJsb2Nrc1BlckNvbHVtbixuPW5ldyBJbnQxNkFycmF5KDY0KTtmb3IobGV0IGU9MDtlPHI7ZSsrKWZvcihsZXQgcj0wO3I8YTtyKyspe3F1YW50aXplQW5kSW52ZXJzZSh0LGdldEJsb2NrQnVmZmVyT2Zmc2V0KHQsZSxyKSxuKX1yZXR1cm4gdC5ibG9ja0RhdGF9ZnVuY3Rpb24gZmluZE5leHRGaWxlTWFya2VyKGUsdCxhPXQpe2NvbnN0IHI9ZS5sZW5ndGgtMTtsZXQgbj1hPHQ/YTp0O2lmKHQ+PXIpcmV0dXJuIG51bGw7Y29uc3Qgcz0oMCxpLnJlYWRVaW50MTYpKGUsdCk7aWYocz49NjU0NzImJnM8PTY1NTM0KXJldHVybntpbnZhbGlkOm51bGwsbWFya2VyOnMsb2Zmc2V0OnR9O2xldCBvPSgwLGkucmVhZFVpbnQxNikoZSxuKTtmb3IoOyEobz49NjU0NzImJm88PTY1NTM0KTspe2lmKCsrbj49cilyZXR1cm4gbnVsbDtvPSgwLGkucmVhZFVpbnQxNikoZSxuKX1yZXR1cm57aW52YWxpZDpzLnRvU3RyaW5nKDE2KSxtYXJrZXI6byxvZmZzZXQ6bn19dC5KcGVnSW1hZ2U9Y2xhc3MgSnBlZ0ltYWdle2NvbnN0cnVjdG9yKHtkZWNvZGVUcmFuc2Zvcm06ZT1udWxsLGNvbG9yVHJhbnNmb3JtOnQ9LTF9PXt9KXt0aGlzLl9kZWNvZGVUcmFuc2Zvcm09ZTt0aGlzLl9jb2xvclRyYW5zZm9ybT10fXBhcnNlKGUse2RubFNjYW5MaW5lczp0PW51bGx9PXt9KXtmdW5jdGlvbiByZWFkRGF0YUJsb2NrKCl7Y29uc3QgdD0oMCxpLnJlYWRVaW50MTYpKGUsbyk7bys9MjtsZXQgYT1vK3QtMjtjb25zdCBuPWZpbmROZXh0RmlsZU1hcmtlcihlLGEsbyk7aWYobj8uaW52YWxpZCl7KDAsci53YXJuKSgicmVhZERhdGFCbG9jayAtIGluY29ycmVjdCBsZW5ndGgsIGN1cnJlbnQgbWFya2VyIGlzOiAiK24uaW52YWxpZCk7YT1uLm9mZnNldH1jb25zdCBzPWUuc3ViYXJyYXkobyxhKTtvKz1zLmxlbmd0aDtyZXR1cm4gc31mdW5jdGlvbiBwcmVwYXJlQ29tcG9uZW50cyhlKXtjb25zdCB0PU1hdGguY2VpbChlLnNhbXBsZXNQZXJMaW5lLzgvZS5tYXhIKSxhPU1hdGguY2VpbChlLnNjYW5MaW5lcy84L2UubWF4Vik7Zm9yKGNvbnN0IHIgb2YgZS5jb21wb25lbnRzKXtjb25zdCBuPU1hdGguY2VpbChNYXRoLmNlaWwoZS5zYW1wbGVzUGVyTGluZS84KSpyLmgvZS5tYXhIKSxpPU1hdGguY2VpbChNYXRoLmNlaWwoZS5zY2FuTGluZXMvOCkqci52L2UubWF4Vikscz10KnIuaCxvPTY0KihhKnIudikqKHMrMSk7ci5ibG9ja0RhdGE9bmV3IEludDE2QXJyYXkobyk7ci5ibG9ja3NQZXJMaW5lPW47ci5ibG9ja3NQZXJDb2x1bW49aX1lLm1jdXNQZXJMaW5lPXQ7ZS5tY3VzUGVyQ29sdW1uPWF9bGV0IGEsbixvPTAsYz1udWxsLGw9bnVsbCxoPTA7Y29uc3QgdT1bXSxkPVtdLGY9W107bGV0IGc9KDAsaS5yZWFkVWludDE2KShlLG8pO28rPTI7aWYoNjU0OTYhPT1nKXRocm93IG5ldyBKcGVnRXJyb3IoIlNPSSBub3QgZm91bmQiKTtnPSgwLGkucmVhZFVpbnQxNikoZSxvKTtvKz0yO2U6Zm9yKDs2NTQ5NyE9PWc7KXtsZXQgcCxtLGI7c3dpdGNoKGcpe2Nhc2UgNjU1MDQ6Y2FzZSA2NTUwNTpjYXNlIDY1NTA2OmNhc2UgNjU1MDc6Y2FzZSA2NTUwODpjYXNlIDY1NTA5OmNhc2UgNjU1MTA6Y2FzZSA2NTUxMTpjYXNlIDY1NTEyOmNhc2UgNjU1MTM6Y2FzZSA2NTUxNDpjYXNlIDY1NTE1OmNhc2UgNjU1MTY6Y2FzZSA2NTUxNzpjYXNlIDY1NTE4OmNhc2UgNjU1MTk6Y2FzZSA2NTUzNDpjb25zdCB5PXJlYWREYXRhQmxvY2soKTs2NTUwND09PWcmJjc0PT09eVswXSYmNzA9PT15WzFdJiY3Mz09PXlbMl0mJjcwPT09eVszXSYmMD09PXlbNF0mJihjPXt2ZXJzaW9uOnttYWpvcjp5WzVdLG1pbm9yOnlbNl19LGRlbnNpdHlVbml0czp5WzddLHhEZW5zaXR5OnlbOF08PDh8eVs5XSx5RGVuc2l0eTp5WzEwXTw8OHx5WzExXSx0aHVtYldpZHRoOnlbMTJdLHRodW1iSGVpZ2h0OnlbMTNdLHRodW1iRGF0YTp5LnN1YmFycmF5KDE0LDE0KzMqeVsxMl0qeVsxM10pfSk7NjU1MTg9PT1nJiY2NT09PXlbMF0mJjEwMD09PXlbMV0mJjExMT09PXlbMl0mJjk4PT09eVszXSYmMTAxPT09eVs0XSYmKGw9e3ZlcnNpb246eVs1XTw8OHx5WzZdLGZsYWdzMDp5WzddPDw4fHlbOF0sZmxhZ3MxOnlbOV08PDh8eVsxMF0sdHJhbnNmb3JtQ29kZTp5WzExXX0pO2JyZWFrO2Nhc2UgNjU0OTk6Y29uc3Qgdz0oMCxpLnJlYWRVaW50MTYpKGUsbyk7bys9Mjtjb25zdCBTPXcrby0yO2xldCB4O2Zvcig7bzxTOyl7Y29uc3QgdD1lW28rK10sYT1uZXcgVWludDE2QXJyYXkoNjQpO2lmKHQ+PjQ9PTApZm9yKG09MDttPDY0O20rKyl7eD1zW21dO2FbeF09ZVtvKytdfWVsc2V7aWYodD4+NCE9MSl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJEUVQgLSBpbnZhbGlkIHRhYmxlIHNwZWMiKTtmb3IobT0wO208NjQ7bSsrKXt4PXNbbV07YVt4XT0oMCxpLnJlYWRVaW50MTYpKGUsbyk7bys9Mn19dVsxNSZ0XT1hfWJyZWFrO2Nhc2UgNjU0NzI6Y2FzZSA2NTQ3MzpjYXNlIDY1NDc0OmlmKGEpdGhyb3cgbmV3IEpwZWdFcnJvcigiT25seSBzaW5nbGUgZnJhbWUgSlBFR3Mgc3VwcG9ydGVkIik7bys9MjthPXt9O2EuZXh0ZW5kZWQ9NjU0NzM9PT1nO2EucHJvZ3Jlc3NpdmU9NjU0NzQ9PT1nO2EucHJlY2lzaW9uPWVbbysrXTtjb25zdCBDPSgwLGkucmVhZFVpbnQxNikoZSxvKTtvKz0yO2Euc2NhbkxpbmVzPXR8fEM7YS5zYW1wbGVzUGVyTGluZT0oMCxpLnJlYWRVaW50MTYpKGUsbyk7bys9MjthLmNvbXBvbmVudHM9W107YS5jb21wb25lbnRJZHM9e307Y29uc3Qgaz1lW28rK107bGV0IHY9MCxGPTA7Zm9yKHA9MDtwPGs7cCsrKXtjb25zdCB0PWVbb10scj1lW28rMV0+PjQsbj0xNSZlW28rMV07djxyJiYodj1yKTtGPG4mJihGPW4pO2NvbnN0IGk9ZVtvKzJdO2I9YS5jb21wb25lbnRzLnB1c2goe2g6cix2Om4scXVhbnRpemF0aW9uSWQ6aSxxdWFudGl6YXRpb25UYWJsZTpudWxsfSk7YS5jb21wb25lbnRJZHNbdF09Yi0xO28rPTN9YS5tYXhIPXY7YS5tYXhWPUY7cHJlcGFyZUNvbXBvbmVudHMoYSk7YnJlYWs7Y2FzZSA2NTQ3Njpjb25zdCBPPSgwLGkucmVhZFVpbnQxNikoZSxvKTtvKz0yO2ZvcihwPTI7cDxPOyl7Y29uc3QgdD1lW28rK10sYT1uZXcgVWludDhBcnJheSgxNik7bGV0IHI9MDtmb3IobT0wO208MTY7bSsrLG8rKylyKz1hW21dPWVbb107Y29uc3Qgbj1uZXcgVWludDhBcnJheShyKTtmb3IobT0wO208cjttKyssbysrKW5bbV09ZVtvXTtwKz0xNytyOyh0Pj40PT0wP2Y6ZClbMTUmdF09YnVpbGRIdWZmbWFuVGFibGUoYSxuKX1icmVhaztjYXNlIDY1NTAxOm8rPTI7bj0oMCxpLnJlYWRVaW50MTYpKGUsbyk7bys9MjticmVhaztjYXNlIDY1NDk4OmNvbnN0IFQ9MT09KytoJiYhdDtvKz0yO2NvbnN0IE09ZVtvKytdLEQ9W107Zm9yKHA9MDtwPE07cCsrKXtjb25zdCB0PWVbbysrXSxyPWEuY29tcG9uZW50SWRzW3RdLG49YS5jb21wb25lbnRzW3JdO24uaW5kZXg9dDtjb25zdCBpPWVbbysrXTtuLmh1ZmZtYW5UYWJsZURDPWZbaT4+NF07bi5odWZmbWFuVGFibGVBQz1kWzE1JmldO0QucHVzaChuKX1jb25zdCBFPWVbbysrXSxOPWVbbysrXSxSPWVbbysrXTt0cnl7Y29uc3QgdD1kZWNvZGVTY2FuKGUsbyxhLEQsbixFLE4sUj4+NCwxNSZSLFQpO28rPXR9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIEROTE1hcmtlckVycm9yKXsoMCxyLndhcm4pKGAke3QubWVzc2FnZX0gLS0gYXR0ZW1wdGluZyB0byByZS1wYXJzZSB0aGUgSlBFRyBpbWFnZS5gKTtyZXR1cm4gdGhpcy5wYXJzZShlLHtkbmxTY2FuTGluZXM6dC5zY2FuTGluZXN9KX1pZih0IGluc3RhbmNlb2YgRU9JTWFya2VyRXJyb3IpeygwLHIud2FybikoYCR7dC5tZXNzYWdlfSAtLSBpZ25vcmluZyB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UgZGF0YS5gKTticmVhayBlfXRocm93IHR9YnJlYWs7Y2FzZSA2NTUwMDpvKz00O2JyZWFrO2Nhc2UgNjU1MzU6MjU1IT09ZVtvXSYmby0tO2JyZWFrO2RlZmF1bHQ6Y29uc3QgTD1maW5kTmV4dEZpbGVNYXJrZXIoZSxvLTIsby0zKTtpZihMPy5pbnZhbGlkKXsoMCxyLndhcm4pKCJKcGVnSW1hZ2UucGFyc2UgLSB1bmV4cGVjdGVkIGRhdGEsIGN1cnJlbnQgbWFya2VyIGlzOiAiK0wuaW52YWxpZCk7bz1MLm9mZnNldDticmVha31pZighTHx8bz49ZS5sZW5ndGgtMSl7KDAsci53YXJuKSgiSnBlZ0ltYWdlLnBhcnNlIC0gcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpbWFnZSBkYXRhIHdpdGhvdXQgZmluZGluZyBhbiBFT0kgbWFya2VyICgweEZGRDkpLiIpO2JyZWFrIGV9dGhyb3cgbmV3IEpwZWdFcnJvcigiSnBlZ0ltYWdlLnBhcnNlIC0gdW5rbm93biBtYXJrZXI6ICIrZy50b1N0cmluZygxNikpfWc9KDAsaS5yZWFkVWludDE2KShlLG8pO28rPTJ9dGhpcy53aWR0aD1hLnNhbXBsZXNQZXJMaW5lO3RoaXMuaGVpZ2h0PWEuc2NhbkxpbmVzO3RoaXMuamZpZj1jO3RoaXMuYWRvYmU9bDt0aGlzLmNvbXBvbmVudHM9W107Zm9yKGNvbnN0IGUgb2YgYS5jb21wb25lbnRzKXtjb25zdCB0PXVbZS5xdWFudGl6YXRpb25JZF07dCYmKGUucXVhbnRpemF0aW9uVGFibGU9dCk7dGhpcy5jb21wb25lbnRzLnB1c2goe2luZGV4OmUuaW5kZXgsb3V0cHV0OmJ1aWxkQ29tcG9uZW50RGF0YSgwLGUpLHNjYWxlWDplLmgvYS5tYXhILHNjYWxlWTplLnYvYS5tYXhWLGJsb2Nrc1BlckxpbmU6ZS5ibG9ja3NQZXJMaW5lLGJsb2Nrc1BlckNvbHVtbjplLmJsb2Nrc1BlckNvbHVtbn0pfXRoaXMubnVtQ29tcG9uZW50cz10aGlzLmNvbXBvbmVudHMubGVuZ3RofV9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKGUsdCxhPSExKXtjb25zdCByPXRoaXMud2lkdGgvZSxuPXRoaXMuaGVpZ2h0L3Q7bGV0IGkscyxvLGMsbCxoLHUsZCxmLGcscCxtPTA7Y29uc3QgYj10aGlzLmNvbXBvbmVudHMubGVuZ3RoLHk9ZSp0KmIsdz1uZXcgVWludDhDbGFtcGVkQXJyYXkoeSksUz1uZXcgVWludDMyQXJyYXkoZSkseD00Mjk0OTY3Mjg4O2xldCBDO2Zvcih1PTA7dTxiO3UrKyl7aT10aGlzLmNvbXBvbmVudHNbdV07cz1pLnNjYWxlWCpyO289aS5zY2FsZVkqbjttPXU7cD1pLm91dHB1dDtjPWkuYmxvY2tzUGVyTGluZSsxPDwzO2lmKHMhPT1DKXtmb3IobD0wO2w8ZTtsKyspe2Q9MHxsKnM7U1tsXT0oZCZ4KTw8M3w3JmR9Qz1zfWZvcihoPTA7aDx0O2grKyl7ZD0wfGgqbztnPWMqKGQmeCl8KDcmZCk8PDM7Zm9yKGw9MDtsPGU7bCsrKXt3W21dPXBbZytTW2xdXTttKz1ifX19bGV0IGs9dGhpcy5fZGVjb2RlVHJhbnNmb3JtO2F8fDQhPT1ifHxrfHwoaz1uZXcgSW50MzJBcnJheShbLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTVdKSk7aWYoaylmb3IodT0wO3U8eTspZm9yKGQ9MCxmPTA7ZDxiO2QrKyx1KyssZis9Mil3W3VdPSh3W3VdKmtbZl0+PjgpK2tbZisxXTtyZXR1cm4gd31nZXQgX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKCl7cmV0dXJuIHRoaXMuYWRvYmU/ISF0aGlzLmFkb2JlLnRyYW5zZm9ybUNvZGU6Mz09PXRoaXMubnVtQ29tcG9uZW50cz8wIT09dGhpcy5fY29sb3JUcmFuc2Zvcm0mJig4MiE9PXRoaXMuY29tcG9uZW50c1swXS5pbmRleHx8NzEhPT10aGlzLmNvbXBvbmVudHNbMV0uaW5kZXh8fDY2IT09dGhpcy5jb21wb25lbnRzWzJdLmluZGV4KToxPT09dGhpcy5fY29sb3JUcmFuc2Zvcm19X2NvbnZlcnRZY2NUb1JnYihlKXtsZXQgdCxhLHI7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bis9Myl7dD1lW25dO2E9ZVtuKzFdO3I9ZVtuKzJdO2Vbbl09dC0xNzkuNDU2KzEuNDAyKnI7ZVtuKzFdPXQrMTM1LjQ1OS0uMzQ0KmEtLjcxNCpyO2VbbisyXT10LTIyNi44MTYrMS43NzIqYX1yZXR1cm4gZX1fY29udmVydFljY1RvUmdiYShlLHQpe2ZvcihsZXQgYT0wLHI9MCxuPWUubGVuZ3RoO2E8bjthKz0zLHIrPTQpe2NvbnN0IG49ZVthXSxpPWVbYSsxXSxzPWVbYSsyXTt0W3JdPW4tMTc5LjQ1NisxLjQwMipzO3RbcisxXT1uKzEzNS40NTktLjM0NCppLS43MTQqczt0W3IrMl09bi0yMjYuODE2KzEuNzcyKmk7dFtyKzNdPTI1NX1yZXR1cm4gdH1fY29udmVydFljY2tUb1JnYihlKXtsZXQgdCxhLHIsbixpPTA7Zm9yKGxldCBzPTAsbz1lLmxlbmd0aDtzPG87cys9NCl7dD1lW3NdO2E9ZVtzKzFdO3I9ZVtzKzJdO249ZVtzKzNdO2VbaSsrXT1hKigtNjYwNjM1NjY5NDIwMzY0ZS0xOSphKy4wMDA0MzcxMzA0NzU5MjYyMzIqci01NDA4MDYxMDA2NDU5OWUtMTgqdCsuMDAwNDg0NDk3OTcxMjAyODEqbi0uMTU0MzYyMTUxODcxMTI2KS0xMjIuNjcxOTU0MDY4OTQrciooLS4wMDA5NTc5NjQzNzg0NDU3NzMqcisuMDAwODE3MDc2OTExMzQ2NjI1KnQtLjAwNDc3MjcxNDA1NDA4NzQ3Km4rMS41MzM4MDI1MzIyMTczNCkrdCooLjAwMDk2MTI1MDE4NDEzMDY4OCp0LS4wMDI2NjI1NzMzMjI4MzkzMypuKy40ODM1NzA4ODQ1MTI2NSkrbiooLS4wMDAzMzYxOTcxNzc2MTgzOTQqbisuNDg0NzkxNTYxNDkwNzc2KTtlW2krK109MTA3LjI2ODAzOTM5NzcyNCthKigyMTk5MjcxMDQ1MjU3NDFlLTE5KmEtLjAwMDY0MDk5MjAxODI5Nzk0NSpyKy4wMDA2NTkzOTcwMDEyNDU1NzcqdCsuMDAwNDI2MTA1NjUyOTM4ODM3Km4tLjE3NjQ5MTc5MjQ2Mjg3NSkrciooLS4wMDA3NzgyNjk5NDE1MTM2ODMqcisuMDAxMzA4NzIyNjE0MDgyNzUqdCsuMDAwNzcwNDgyNjMxODAxMTMyKm4tLjE1MTA1MTQ5Mjc3NTU2MikrdCooLjAwMTI2OTM1MzY4MTE0ODQzKnQtLjAwMjY1MDkwMTg5MDEwODk4Km4rLjI1ODAyOTEwMjA2ODQ1KStuKigtLjAwMDMxODkxMzExNzU4ODMyOCpuLS4yMTM3NDI0MDAzMjM2NjUpO2VbaSsrXT1hKigtLjAwMDU3MDExNTE5Njk3MzY3NyphLTI2MzQwOTA1MTAwNDU4OWUtMTkqcisuMDAyMDc0MTA4ODExNTAxMip0LS4wMDI4ODI2MDIzNjg1MzQ0MipuKy44MTQyNzI5NjgzNTkyOTUpLTIwLjgxMDAxMjU0Njk0NytyKigtMTUzNDk2MDU3NDQwOTc1ZS0xOSpyLS4wMDAxMzI2ODkwNDM5NjE0NDYqdCsuMDAwNTYwODMzNjkxMjQyODEyKm4tLjE5NTE1MjAyNzUzNDA0OSkrdCooLjAwMTc0NDE4MTMyOTI3NTgyKnQtLjAwMjU1MjQzMzIxNDM5MzQ3Km4rLjExNjkzNTAyMDQ2NTE0NSkrbiooLS4wMDAzNDM1MzE5OTY1MTA1NTUqbisuMjQxNjUyNjAyMzI0MDcpfXJldHVybiBlLnN1YmFycmF5KDAsaSl9X2NvbnZlcnRZY2NrVG9SZ2JhKGUpe2ZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrPTQpe2NvbnN0IGE9ZVt0XSxyPWVbdCsxXSxuPWVbdCsyXSxpPWVbdCszXTtlW3RdPXIqKC02NjA2MzU2Njk0MjAzNjRlLTE5KnIrLjAwMDQzNzEzMDQ3NTkyNjIzMipuLTU0MDgwNjEwMDY0NTk5ZS0xOCphKy4wMDA0ODQ0OTc5NzEyMDI4MSppLS4xNTQzNjIxNTE4NzExMjYpLTEyMi42NzE5NTQwNjg5NCtuKigtLjAwMDk1Nzk2NDM3ODQ0NTc3MypuKy4wMDA4MTcwNzY5MTEzNDY2MjUqYS0uMDA0NzcyNzE0MDU0MDg3NDcqaSsxLjUzMzgwMjUzMjIxNzM0KSthKiguMDAwOTYxMjUwMTg0MTMwNjg4KmEtLjAwMjY2MjU3MzMyMjgzOTMzKmkrLjQ4MzU3MDg4NDUxMjY1KStpKigtLjAwMDMzNjE5NzE3NzYxODM5NCppKy40ODQ3OTE1NjE0OTA3NzYpO2VbdCsxXT0xMDcuMjY4MDM5Mzk3NzI0K3IqKDIxOTkyNzEwNDUyNTc0MWUtMTkqci0uMDAwNjQwOTkyMDE4Mjk3OTQ1Km4rLjAwMDY1OTM5NzAwMTI0NTU3NyphKy4wMDA0MjYxMDU2NTI5Mzg4MzcqaS0uMTc2NDkxNzkyNDYyODc1KStuKigtLjAwMDc3ODI2OTk0MTUxMzY4MypuKy4wMDEzMDg3MjI2MTQwODI3NSphKy4wMDA3NzA0ODI2MzE4MDExMzIqaS0uMTUxMDUxNDkyNzc1NTYyKSthKiguMDAxMjY5MzUzNjgxMTQ4NDMqYS0uMDAyNjUwOTAxODkwMTA4OTgqaSsuMjU4MDI5MTAyMDY4NDUpK2kqKC0uMDAwMzE4OTEzMTE3NTg4MzI4KmktLjIxMzc0MjQwMDMyMzY2NSk7ZVt0KzJdPXIqKC0uMDAwNTcwMTE1MTk2OTczNjc3KnItMjYzNDA5MDUxMDA0NTg5ZS0xOSpuKy4wMDIwNzQxMDg4MTE1MDEyKmEtLjAwMjg4MjYwMjM2ODUzNDQyKmkrLjgxNDI3Mjk2ODM1OTI5NSktMjAuODEwMDEyNTQ2OTQ3K24qKC0xNTM0OTYwNTc0NDA5NzVlLTE5Km4tLjAwMDEzMjY4OTA0Mzk2MTQ0NiphKy4wMDA1NjA4MzM2OTEyNDI4MTIqaS0uMTk1MTUyMDI3NTM0MDQ5KSthKiguMDAxNzQ0MTgxMzI5Mjc1ODIqYS0uMDAyNTUyNDMzMjE0MzkzNDcqaSsuMTE2OTM1MDIwNDY1MTQ1KStpKigtLjAwMDM0MzUzMTk5NjUxMDU1NSppKy4yNDE2NTI2MDIzMjQwNyk7ZVt0KzNdPTI1NX1yZXR1cm4gZX1fY29udmVydFljY2tUb0NteWsoZSl7bGV0IHQsYSxyO2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpO24rPTQpe3Q9ZVtuXTthPWVbbisxXTtyPWVbbisyXTtlW25dPTQzNC40NTYtdC0xLjQwMipyO2VbbisxXT0xMTkuNTQxLXQrLjM0NCphKy43MTQqcjtlW24rMl09NDgxLjgxNi10LTEuNzcyKmF9cmV0dXJuIGV9X2NvbnZlcnRDbXlrVG9SZ2IoZSl7bGV0IHQsYSxyLG4saT0wO2ZvcihsZXQgcz0wLG89ZS5sZW5ndGg7czxvO3MrPTQpe3Q9ZVtzXTthPWVbcysxXTtyPWVbcysyXTtuPWVbcyszXTtlW2krK109MjU1K3QqKC02NzQ3MTQ3MDczNjAyNDQxZS0yMCp0Ky4wMDA4Mzc5MjYyMTIxMDEzNzI3KmErLjAwMDI4OTQ3MTgxODg2NDMyOTQqcisuMDAzMjY0MjMxMDU3NTM3ODA2Km4tMS4xMTg1NjExODY3MjAzOTM3KSthKigyNjM3NDEwNzYxNjA4OTQwNWUtMjEqYS04NjI2OTQ5MTU4NjM4NTcyZS0yMCpyLS4wMDAyNzQ4NzY5MDY3NDk5NDkxKm4tLjAyMTU1Njg4Nzk0OTc4OTY3KStyKigtMzg3ODA5OTIxMjg2OTM2M2UtMjAqci0uMDAwMzI2NzgwODI3OTQ4NTI4NipuKy4wNjg2NzQyMjM4NTk1MzQ1KS1uKiguMDAwMzM2MTk3MTc3NjE4MzkzNypuKy43NDMwNjU5MTUxMzQyMjU0KTtlW2krK109MjU1K3QqKC4wMDAxMzU5NjM3MjgxMzU4ODg0OCp0Ky4wMDA5MjQ1MzcxMzI1NzM1ODUqYSsuMDAwMTA1NjczNTk2MTg2ODM1OTMqcisuMDAwNDc5MTg2NDY4NzQzNjUxMipuLS4zMTA5Njg5NTg3NTE1ODc1KSthKigtLjAwMDIzNTQ1MzQ2MTA4MzcwMzQ0KmErLjAwMDI3MDI4NDUyNTM1MzQ3MTQqcisuMDAyMDIwMDMwODk3NzMwNzE1NipuLS43NDg4MDUyMTY3MDE1NDk0KStyKig2ODM0ODE1OTk4MjM1NjYyZS0yMCpyKy4wMDAxNTE2ODQ1MjM2MzQ2MDk3MypuLS4wOTc1MTkyNzc3NDcyODkzMyktbiooLjAwMDMxODkxMzExNzU4ODMyODEqbisuNzM2NDg4MzgwNzczMzE2OCk7ZVtpKytdPTI1NSt0KigxMzU5ODY1MDQxMTM4NTMwN2UtMjEqdCsuMDAwMTI0MjM5NTYxNzU0OTA4NTEqYSsuMDAwNDc1MTk4NTA5NzU4MzU4OSpyLTM2NzI5MzE3NDc2NjMwNDIyZS0yMipuLS4wNTU2MjE4Njk4MDI2NDAzNCkrYSooLjAwMDE2MTQxMzgwNTk4NzI0Njc2KmErLjAwMDk2OTIyMzkxMzA3MjUxODYqcisuMDAwNzc4MjY5MjQ1MDAzNjI1MypuLS40NDAxNTIzMjM2NzUyNjQ2MykrciooNS4wNjg4ODI5MTQwNjg3NjllLTcqcisuMDAxNzc3ODM2OTAxMTM3NTA3MSpuLS43NTkxNDU0NjQ5NzQ5NjA5KS1uKiguMDAwMzQzNTMxOTk2NTEwNTU1MypuKy43MDYzNzcwMTg2MTYwMTQ0KX1yZXR1cm4gZS5zdWJhcnJheSgwLGkpfV9jb252ZXJ0Q215a1RvUmdiYShlKXtmb3IobGV0IHQ9MCxhPWUubGVuZ3RoO3Q8YTt0Kz00KXtjb25zdCBhPWVbdF0scj1lW3QrMV0sbj1lW3QrMl0saT1lW3QrM107ZVt0XT0yNTUrYSooLTY3NDcxNDcwNzM2MDI0NDFlLTIwKmErLjAwMDgzNzkyNjIxMjEwMTM3MjcqcisuMDAwMjg5NDcxODE4ODY0MzI5NCpuKy4wMDMyNjQyMzEwNTc1Mzc4MDYqaS0xLjExODU2MTE4NjcyMDM5MzcpK3IqKDI2Mzc0MTA3NjE2MDg5NDA1ZS0yMSpyLTg2MjY5NDkxNTg2Mzg1NzJlLTIwKm4tLjAwMDI3NDg3NjkwNjc0OTk0OTEqaS0uMDIxNTU2ODg3OTQ5Nzg5NjcpK24qKC0zODc4MDk5MjEyODY5MzYzZS0yMCpuLS4wMDAzMjY3ODA4Mjc5NDg1Mjg2KmkrLjA2ODY3NDIyMzg1OTUzNDUpLWkqKC4wMDAzMzYxOTcxNzc2MTgzOTM3KmkrLjc0MzA2NTkxNTEzNDIyNTQpO2VbdCsxXT0yNTUrYSooLjAwMDEzNTk2MzcyODEzNTg4ODQ4KmErLjAwMDkyNDUzNzEzMjU3MzU4NSpyKy4wMDAxMDU2NzM1OTYxODY4MzU5MypuKy4wMDA0NzkxODY0Njg3NDM2NTEyKmktLjMxMDk2ODk1ODc1MTU4NzUpK3IqKC0uMDAwMjM1NDUzNDYxMDgzNzAzNDQqcisuMDAwMjcwMjg0NTI1MzUzNDcxNCpuKy4wMDIwMjAwMzA4OTc3MzA3MTU2KmktLjc0ODgwNTIxNjcwMTU0OTQpK24qKDY4MzQ4MTU5OTgyMzU2NjJlLTIwKm4rLjAwMDE1MTY4NDUyMzYzNDYwOTczKmktLjA5NzUxOTI3Nzc0NzI4OTMzKS1pKiguMDAwMzE4OTEzMTE3NTg4MzI4MSppKy43MzY0ODgzODA3NzMzMTY4KTtlW3QrMl09MjU1K2EqKDEzNTk4NjUwNDExMzg1MzA3ZS0yMSphKy4wMDAxMjQyMzk1NjE3NTQ5MDg1MSpyKy4wMDA0NzUxOTg1MDk3NTgzNTg5Km4tMzY3MjkzMTc0NzY2MzA0MjJlLTIyKmktLjA1NTYyMTg2OTgwMjY0MDM0KStyKiguMDAwMTYxNDEzODA1OTg3MjQ2NzYqcisuMDAwOTY5MjIzOTEzMDcyNTE4NipuKy4wMDA3NzgyNjkyNDUwMDM2MjUzKmktLjQ0MDE1MjMyMzY3NTI2NDYzKStuKig1LjA2ODg4MjkxNDA2ODc2OWUtNypuKy4wMDE3Nzc4MzY5MDExMzc1MDcxKmktLjc1OTE0NTQ2NDk3NDk2MDkpLWkqKC4wMDAzNDM1MzE5OTY1MTA1NTUzKmkrLjcwNjM3NzAxODYxNjAxNDQpO2VbdCszXT0yNTV9cmV0dXJuIGV9Z2V0RGF0YSh7d2lkdGg6ZSxoZWlnaHQ6dCxmb3JjZVJHQkE6YT0hMSxmb3JjZVJHQjpyPSExLGlzU291cmNlUERGOmk9ITF9KXtpZih0aGlzLm51bUNvbXBvbmVudHM+NCl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJVbnN1cHBvcnRlZCBjb2xvciBtb2RlIik7Y29uc3Qgcz10aGlzLl9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKGUsdCxpKTtpZigxPT09dGhpcy5udW1Db21wb25lbnRzJiYoYXx8cikpe2NvbnN0IGU9cy5sZW5ndGgqKGE/NDozKSx0PW5ldyBVaW50OENsYW1wZWRBcnJheShlKTtsZXQgcj0wO2lmKGEpKDAsbi5ncmF5VG9SR0JBKShzLG5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlcikpO2Vsc2UgZm9yKGNvbnN0IGUgb2Ygcyl7dFtyKytdPWU7dFtyKytdPWU7dFtyKytdPWV9cmV0dXJuIHR9aWYoMz09PXRoaXMubnVtQ29tcG9uZW50cyYmdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpe2lmKGEpe2NvbnN0IGU9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHMubGVuZ3RoLzMqNCk7cmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYmEocyxlKX1yZXR1cm4gdGhpcy5fY29udmVydFljY1RvUmdiKHMpfWlmKDQ9PT10aGlzLm51bUNvbXBvbmVudHMpe2lmKHRoaXMuX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKXJldHVybiBhP3RoaXMuX2NvbnZlcnRZY2NrVG9SZ2JhKHMpOnI/dGhpcy5fY29udmVydFljY2tUb1JnYihzKTp0aGlzLl9jb252ZXJ0WWNja1RvQ215ayhzKTtpZihhKXJldHVybiB0aGlzLl9jb252ZXJ0Q215a1RvUmdiYShzKTtpZihyKXJldHVybiB0aGlzLl9jb252ZXJ0Q215a1RvUmdiKHMpfXJldHVybiBzfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5jb252ZXJ0QmxhY2tBbmRXaGl0ZVRvUkdCQT1jb252ZXJ0QmxhY2tBbmRXaGl0ZVRvUkdCQTt0LmNvbnZlcnRUb1JHQkE9ZnVuY3Rpb24gY29udmVydFRvUkdCQShlKXtzd2l0Y2goZS5raW5kKXtjYXNlIHIuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQOnJldHVybiBjb252ZXJ0QmxhY2tBbmRXaGl0ZVRvUkdCQShlKTtjYXNlIHIuSW1hZ2VLaW5kLlJHQl8yNEJQUDpyZXR1cm4gZnVuY3Rpb24gY29udmVydFJHQlRvUkdCQSh7c3JjOmUsc3JjUG9zOnQ9MCxkZXN0OmEsZGVzdFBvczpuPTAsd2lkdGg6aSxoZWlnaHQ6c30pe2xldCBvPTA7Y29uc3QgYz1lLmxlbmd0aD4+MixsPW5ldyBVaW50MzJBcnJheShlLmJ1ZmZlcix0LGMpO2lmKHIuRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4pe2Zvcig7bzxjLTI7bys9MyxuKz00KXtjb25zdCBlPWxbb10sdD1sW28rMV0scj1sW28rMl07YVtuXT00Mjc4MTkwMDgwfGU7YVtuKzFdPWU+Pj4yNHx0PDw4fDQyNzgxOTAwODA7YVtuKzJdPXQ+Pj4xNnxyPDwxNnw0Mjc4MTkwMDgwO2FbbiszXT1yPj4+OHw0Mjc4MTkwMDgwfWZvcihsZXQgdD00Km8scj1lLmxlbmd0aDt0PHI7dCs9MylhW24rK109ZVt0XXxlW3QrMV08PDh8ZVt0KzJdPDwxNnw0Mjc4MTkwMDgwfWVsc2V7Zm9yKDtvPGMtMjtvKz0zLG4rPTQpe2NvbnN0IGU9bFtvXSx0PWxbbysxXSxyPWxbbysyXTthW25dPTI1NXxlO2FbbisxXT1lPDwyNHx0Pj4+OHwyNTU7YVtuKzJdPXQ8PDE2fHI+Pj4xNnwyNTU7YVtuKzNdPXI8PDh8MjU1fWZvcihsZXQgdD00Km8scj1lLmxlbmd0aDt0PHI7dCs9MylhW24rK109ZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8MjU1fXJldHVybntzcmNQb3M6dCxkZXN0UG9zOm59fShlKX1yZXR1cm4gbnVsbH07dC5ncmF5VG9SR0JBPWZ1bmN0aW9uIGdyYXlUb1JHQkEoZSx0KXtpZihyLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuKWZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKyl0W2FdPTY1NzkzKmVbYV18NDI3ODE5MDA4MDtlbHNlIGZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKyl0W2FdPTE2ODQzMDA4KmVbYV18MjU1fTt2YXIgcj1hKDIpO2Z1bmN0aW9uIGNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKHtzcmM6ZSxzcmNQb3M6dD0wLGRlc3Q6YSx3aWR0aDpuLGhlaWdodDppLG5vbkJsYWNrQ29sb3I6cz00Mjk0OTY3Mjk1LGludmVyc2VEZWNvZGU6bz0hMX0pe2NvbnN0IGM9ci5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NSxbbCxoXT1vP1tzLGNdOltjLHNdLHU9bj4+MyxkPTcmbixmPWUubGVuZ3RoO2E9bmV3IFVpbnQzMkFycmF5KGEuYnVmZmVyKTtsZXQgZz0wO2ZvcihsZXQgcj0wO3I8aTtyKyspe2Zvcihjb25zdCByPXQrdTt0PHI7dCsrKXtjb25zdCByPXQ8Zj9lW3RdOjI1NTthW2crK109MTI4JnI/aDpsO2FbZysrXT02NCZyP2g6bDthW2crK109MzImcj9oOmw7YVtnKytdPTE2JnI/aDpsO2FbZysrXT04JnI/aDpsO2FbZysrXT00JnI/aDpsO2FbZysrXT0yJnI/aDpsO2FbZysrXT0xJnI/aDpsfWlmKDA9PT1kKWNvbnRpbnVlO2NvbnN0IHI9dDxmP2VbdCsrXToyNTU7Zm9yKGxldCBlPTA7ZTxkO2UrKylhW2crK109ciYxPDw3LWU/aDpsfXJldHVybntzcmNQb3M6dCxkZXN0UG9zOmd9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkpweFN0cmVhbT12b2lkIDA7dmFyIHI9YSgxOCksbj1hKDMwKSxpPWEoMik7Y2xhc3MgSnB4U3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyZWFtPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLm1heWJlTGVuZ3RoPXQ7dGhpcy5wYXJhbXM9YX1nZXQgYnl0ZXMoKXtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jaygpe2lmKHRoaXMuZW9mKXJldHVybjtjb25zdCBlPW5ldyBuLkpweEltYWdlO2UucGFyc2UodGhpcy5ieXRlcyk7Y29uc3QgdD1lLndpZHRoLGE9ZS5oZWlnaHQscj1lLmNvbXBvbmVudHNDb3VudCxpPWUudGlsZXMubGVuZ3RoO2lmKDE9PT1pKXRoaXMuYnVmZmVyPWUudGlsZXNbMF0uaXRlbXM7ZWxzZXtjb25zdCBuPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KmEqcik7Zm9yKGxldCBhPTA7YTxpO2ErKyl7Y29uc3QgaT1lLnRpbGVzW2FdLHM9aS53aWR0aCxvPWkuaGVpZ2h0LGM9aS5sZWZ0LGw9aS50b3AsaD1pLml0ZW1zO2xldCB1PTAsZD0odCpsK2MpKnI7Y29uc3QgZj10KnIsZz1zKnI7Zm9yKGxldCBlPTA7ZTxvO2UrKyl7Y29uc3QgZT1oLnN1YmFycmF5KHUsdStnKTtuLnNldChlLGQpO3UrPWc7ZCs9Zn19dGhpcy5idWZmZXI9bn10aGlzLmJ1ZmZlckxlbmd0aD10aGlzLmJ1ZmZlci5sZW5ndGg7dGhpcy5lb2Y9ITB9fXQuSnB4U3RyZWFtPUpweFN0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkpweEltYWdlPXZvaWQgMDt2YXIgcj1hKDIpLG49YSgzKSxpPWEoMjUpO2NsYXNzIEpweEVycm9yIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBKUFggZXJyb3I6ICR7ZX1gLCJKcHhFcnJvciIpfX1jb25zdCBzPXtMTDowLExIOjEsSEw6MSxISDoyfTt0LkpweEltYWdlPWNsYXNzIEpweEltYWdle2NvbnN0cnVjdG9yKCl7dGhpcy5mYWlsT25Db3JydXB0ZWRJbWFnZT0hMX1wYXJzZShlKXtpZig2NTM1OT09PSgwLG4ucmVhZFVpbnQxNikoZSwwKSl7dGhpcy5wYXJzZUNvZGVzdHJlYW0oZSwwLGUubGVuZ3RoKTtyZXR1cm59Y29uc3QgdD1lLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTx0Oyl7bGV0IGk9OCxzPSgwLG4ucmVhZFVpbnQzMikoZSxhKTtjb25zdCBvPSgwLG4ucmVhZFVpbnQzMikoZSxhKzQpO2ErPWk7aWYoMT09PXMpe3M9NDI5NDk2NzI5NiooMCxuLnJlYWRVaW50MzIpKGUsYSkrKDAsbi5yZWFkVWludDMyKShlLGErNCk7YSs9ODtpKz04fTA9PT1zJiYocz10LWEraSk7aWYoczxpKXRocm93IG5ldyBKcHhFcnJvcigiSW52YWxpZCBib3ggZmllbGQgc2l6ZSIpO2NvbnN0IGM9cy1pO2xldCBsPSEwO3N3aXRjaChvKXtjYXNlIDE3ODU3Mzc4MzI6bD0hMTticmVhaztjYXNlIDE2NjgyNDY2NDI6Y29uc3QgdD1lW2FdO2lmKDE9PT10KXtjb25zdCB0PSgwLG4ucmVhZFVpbnQzMikoZSxhKzMpO3N3aXRjaCh0KXtjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztkZWZhdWx0OigwLHIud2FybikoIlVua25vd24gY29sb3JzcGFjZSAiK3QpfX1lbHNlIDI9PT10JiYoMCxyLmluZm8pKCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkIik7YnJlYWs7Y2FzZSAxNzg1NzM3ODI3OnRoaXMucGFyc2VDb2Rlc3RyZWFtKGUsYSxhK2MpO2JyZWFrO2Nhc2UgMTc4MzYzNmUzOjIxODc5MzczOCE9PSgwLG4ucmVhZFVpbnQzMikoZSxhKSYmKDAsci53YXJuKSgiSW52YWxpZCBKUDIgc2lnbmF0dXJlIik7YnJlYWs7Y2FzZSAxNzgzNjM0NDU4OmNhc2UgMTcxODkwOTI5NjpjYXNlIDE5MjAwOTk2OTc6Y2FzZSAxOTE5MjUxMjMyOmNhc2UgMTc2ODQ0OTEzODpicmVhaztkZWZhdWx0OmNvbnN0IGk9U3RyaW5nLmZyb21DaGFyQ29kZShvPj4yNCYyNTUsbz4+MTYmMjU1LG8+PjgmMjU1LDI1NSZvKTsoMCxyLndhcm4pKGBVbnN1cHBvcnRlZCBoZWFkZXIgdHlwZSAke299ICgke2l9KS5gKX1sJiYoYSs9Yyl9fXBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGUpe2xldCB0PWUuZ2V0Qnl0ZSgpO2Zvcig7dD49MDspe2NvbnN0IGE9dDt0PWUuZ2V0Qnl0ZSgpO2lmKDY1MzYxPT09KGE8PDh8dCkpe2Uuc2tpcCg0KTtjb25zdCB0PWUuZ2V0SW50MzIoKT4+PjAsYT1lLmdldEludDMyKCk+Pj4wLHI9ZS5nZXRJbnQzMigpPj4+MCxuPWUuZ2V0SW50MzIoKT4+PjA7ZS5za2lwKDE2KTtjb25zdCBpPWUuZ2V0VWludDE2KCk7dGhpcy53aWR0aD10LXI7dGhpcy5oZWlnaHQ9YS1uO3RoaXMuY29tcG9uZW50c0NvdW50PWk7dGhpcy5iaXRzUGVyQ29tcG9uZW50PTg7cmV0dXJufX10aHJvdyBuZXcgSnB4RXJyb3IoIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW0iKX1wYXJzZUNvZGVzdHJlYW0oZSx0LGEpe2NvbnN0IGk9e307bGV0IHM9ITE7dHJ5e2xldCBvPXQ7Zm9yKDtvKzE8YTspe2NvbnN0IHQ9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7bGV0IGEsYyxsLGgsdSxkLGY9MDtzd2l0Y2godCl7Y2FzZSA2NTM1OTppLm1haW5IZWFkZXI9ITA7YnJlYWs7Y2FzZSA2NTQ5NzpicmVhaztjYXNlIDY1MzYxOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2NvbnN0IGc9e307Zy5Yc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzQpO2cuWXNpej0oMCxuLnJlYWRVaW50MzIpKGUsbys4KTtnLlhPc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzEyKTtnLllPc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzE2KTtnLlhUc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzIwKTtnLllUc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzI0KTtnLlhUT3Npej0oMCxuLnJlYWRVaW50MzIpKGUsbysyOCk7Zy5ZVE9zaXo9KDAsbi5yZWFkVWludDMyKShlLG8rMzIpO2NvbnN0IHA9KDAsbi5yZWFkVWludDE2KShlLG8rMzYpO2cuQ3Npej1wO2NvbnN0IG09W107YT1vKzM4O2ZvcihsZXQgdD0wO3Q8cDt0Kyspe2NvbnN0IHQ9e3ByZWNpc2lvbjoxKygxMjcmZVthXSksaXNTaWduZWQ6ISEoMTI4JmVbYV0pLFhSc2l6OmVbYSsxXSxZUnNpejplW2ErMl19O2ErPTM7Y2FsY3VsYXRlQ29tcG9uZW50RGltZW5zaW9ucyh0LGcpO20ucHVzaCh0KX1pLlNJWj1nO2kuY29tcG9uZW50cz1tO2NhbGN1bGF0ZVRpbGVHcmlkcyhpLG0pO2kuUUNDPVtdO2kuQ09DPVtdO2JyZWFrO2Nhc2UgNjUzNzI6Zj0oMCxuLnJlYWRVaW50MTYpKGUsbyk7Y29uc3QgYj17fTthPW8rMjtjPWVbYSsrXTtzd2l0Y2goMzEmYyl7Y2FzZSAwOmg9ODt1PSEwO2JyZWFrO2Nhc2UgMTpoPTE2O3U9ITE7YnJlYWs7Y2FzZSAyOmg9MTY7dT0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIrYyl9Yi5ub1F1YW50aXphdGlvbj04PT09aDtiLnNjYWxhckV4cG91bmRlZD11O2IuZ3VhcmRCaXRzPWM+PjU7bD1bXTtmb3IoO2E8ZitvOyl7Y29uc3QgdD17fTtpZig4PT09aCl7dC5lcHNpbG9uPWVbYSsrXT4+Mzt0Lm11PTB9ZWxzZXt0LmVwc2lsb249ZVthXT4+Mzt0Lm11PSg3JmVbYV0pPDw4fGVbYSsxXTthKz0yfWwucHVzaCh0KX1iLlNQcWNkcz1sO2lmKGkubWFpbkhlYWRlcilpLlFDRD1iO2Vsc2V7aS5jdXJyZW50VGlsZS5RQ0Q9YjtpLmN1cnJlbnRUaWxlLlFDQz1bXX1icmVhaztjYXNlIDY1MzczOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2NvbnN0IHk9e307YT1vKzI7bGV0IHc7aWYoaS5TSVouQ3NpejwyNTcpdz1lW2ErK107ZWxzZXt3PSgwLG4ucmVhZFVpbnQxNikoZSxhKTthKz0yfWM9ZVthKytdO3N3aXRjaCgzMSZjKXtjYXNlIDA6aD04O3U9ITA7YnJlYWs7Y2FzZSAxOmg9MTY7dT0hMTticmVhaztjYXNlIDI6aD0xNjt1PSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNRY2QgdmFsdWUgIitjKX15Lm5vUXVhbnRpemF0aW9uPTg9PT1oO3kuc2NhbGFyRXhwb3VuZGVkPXU7eS5ndWFyZEJpdHM9Yz4+NTtsPVtdO2Zvcig7YTxmK287KXtjb25zdCB0PXt9O2lmKDg9PT1oKXt0LmVwc2lsb249ZVthKytdPj4zO3QubXU9MH1lbHNle3QuZXBzaWxvbj1lW2FdPj4zO3QubXU9KDcmZVthXSk8PDh8ZVthKzFdO2ErPTJ9bC5wdXNoKHQpfXkuU1BxY2RzPWw7aS5tYWluSGVhZGVyP2kuUUNDW3ddPXk6aS5jdXJyZW50VGlsZS5RQ0Nbd109eTticmVhaztjYXNlIDY1MzYyOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2NvbnN0IFM9e307YT1vKzI7Y29uc3QgeD1lW2ErK107Uy5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzPSEhKDEmeCk7Uy5zb3BNYXJrZXJVc2VkPSEhKDImeCk7Uy5lcGhNYXJrZXJVc2VkPSEhKDQmeCk7Uy5wcm9ncmVzc2lvbk9yZGVyPWVbYSsrXTtTLmxheWVyc0NvdW50PSgwLG4ucmVhZFVpbnQxNikoZSxhKTthKz0yO1MubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm09ZVthKytdO1MuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50PWVbYSsrXTtTLnhjYj0yKygxNSZlW2ErK10pO1MueWNiPTIrKDE1JmVbYSsrXSk7Y29uc3QgQz1lW2ErK107Uy5zZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzPSEhKDEmQyk7Uy5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzPSEhKDImQyk7Uy50ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3M9ISEoNCZDKTtTLnZlcnRpY2FsbHlTdHJpcGU9ISEoOCZDKTtTLnByZWRpY3RhYmxlVGVybWluYXRpb249ISEoMTYmQyk7Uy5zZWdtZW50YXRpb25TeW1ib2xVc2VkPSEhKDMyJkMpO1MucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uPWVbYSsrXTtpZihTLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHMpe2NvbnN0IHQ9W107Zm9yKDthPGYrbzspe2NvbnN0IHI9ZVthKytdO3QucHVzaCh7UFB4OjE1JnIsUFB5OnI+PjR9KX1TLnByZWNpbmN0c1NpemVzPXR9Y29uc3Qgaz1bXTtTLnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MmJmsucHVzaCgic2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyIpO1MudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzJiZrLnB1c2goInRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyIpO1MudmVydGljYWxseVN0cmlwZSYmay5wdXNoKCJ2ZXJ0aWNhbGx5U3RyaXBlIik7Uy5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uJiZrLnB1c2goInByZWRpY3RhYmxlVGVybWluYXRpb24iKTtpZihrLmxlbmd0aD4wKXtzPSEwOygwLHIud2FybikoYEpQWDogVW5zdXBwb3J0ZWQgQ09EIG9wdGlvbnMgKCR7ay5qb2luKCIsICIpfSkuYCl9aWYoaS5tYWluSGVhZGVyKWkuQ09EPVM7ZWxzZXtpLmN1cnJlbnRUaWxlLkNPRD1TO2kuY3VycmVudFRpbGUuQ09DPVtdfWJyZWFrO2Nhc2UgNjU0MjQ6Zj0oMCxuLnJlYWRVaW50MTYpKGUsbyk7ZD17fTtkLmluZGV4PSgwLG4ucmVhZFVpbnQxNikoZSxvKzIpO2QubGVuZ3RoPSgwLG4ucmVhZFVpbnQzMikoZSxvKzQpO2QuZGF0YUVuZD1kLmxlbmd0aCtvLTI7ZC5wYXJ0SW5kZXg9ZVtvKzhdO2QucGFydHNDb3VudD1lW28rOV07aS5tYWluSGVhZGVyPSExO2lmKDA9PT1kLnBhcnRJbmRleCl7ZC5DT0Q9aS5DT0Q7ZC5DT0M9aS5DT0Muc2xpY2UoMCk7ZC5RQ0Q9aS5RQ0Q7ZC5RQ0M9aS5RQ0Muc2xpY2UoMCl9aS5jdXJyZW50VGlsZT1kO2JyZWFrO2Nhc2UgNjU0Mjc6ZD1pLmN1cnJlbnRUaWxlO2lmKDA9PT1kLnBhcnRJbmRleCl7aW5pdGlhbGl6ZVRpbGUoaSxkLmluZGV4KTtidWlsZFBhY2tldHMoaSl9Zj1kLmRhdGFFbmQtbztwYXJzZVRpbGVQYWNrZXRzKGksZSxvLGYpO2JyZWFrO2Nhc2UgNjUzNjM6KDAsci53YXJuKSgiSlBYOiBDb2Rlc3RyZWFtIGNvZGUgMHhGRjUzIChDT0MpIGlzIG5vdCBpbXBsZW1lbnRlZC4iKTtjYXNlIDY1MzY1OmNhc2UgNjUzNjc6Y2FzZSA2NTM2ODpjYXNlIDY1MzgwOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvZGVzdHJlYW0gY29kZTogIit0LnRvU3RyaW5nKDE2KSl9bys9Zn19Y2F0Y2goZSl7aWYoc3x8dGhpcy5mYWlsT25Db3JydXB0ZWRJbWFnZSl0aHJvdyBuZXcgSnB4RXJyb3IoZS5tZXNzYWdlKTsoMCxyLndhcm4pKGBKUFg6IFRyeWluZyB0byByZWNvdmVyIGZyb206ICIke2UubWVzc2FnZX0iLmApfXRoaXMudGlsZXM9ZnVuY3Rpb24gdHJhbnNmb3JtQ29tcG9uZW50cyhlKXtjb25zdCB0PWUuU0laLGE9ZS5jb21wb25lbnRzLHI9dC5Dc2l6LG49W107Zm9yKGxldCB0PTAsaT1lLnRpbGVzLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPWUudGlsZXNbdF0scz1bXTtmb3IobGV0IHQ9MDt0PHI7dCsrKXNbdF09dHJhbnNmb3JtVGlsZShlLGksdCk7Y29uc3Qgbz1zWzBdLGM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KG8uaXRlbXMubGVuZ3RoKnIpLGw9e2xlZnQ6by5sZWZ0LHRvcDpvLnRvcCx3aWR0aDpvLndpZHRoLGhlaWdodDpvLmhlaWdodCxpdGVtczpjfTtsZXQgaCx1LGQsZixnLHAsbSxiPTA7aWYoaS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtKXtjb25zdCBlPTQ9PT1yLHQ9c1swXS5pdGVtcyxuPXNbMV0uaXRlbXMsbz1zWzJdLml0ZW1zLGw9ZT9zWzNdLml0ZW1zOm51bGw7aD1hWzBdLnByZWNpc2lvbi04O3U9LjUrKDEyODw8aCk7Y29uc3QgeT1pLmNvbXBvbmVudHNbMF0sdz1yLTM7Zj10Lmxlbmd0aDtpZih5LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24pZm9yKGQ9MDtkPGY7ZCsrLGIrPXcpe2c9dFtkXSt1O3A9bltkXTttPW9bZF07Y29uc3QgZT1nLShtK3A+PjIpO2NbYisrXT1lK20+Pmg7Y1tiKytdPWU+Pmg7Y1tiKytdPWUrcD4+aH1lbHNlIGZvcihkPTA7ZDxmO2QrKyxiKz13KXtnPXRbZF0rdTtwPW5bZF07bT1vW2RdO2NbYisrXT1nKzEuNDAyKm0+Pmg7Y1tiKytdPWctLjM0NDEzKnAtLjcxNDE0Km0+Pmg7Y1tiKytdPWcrMS43NzIqcD4+aH1pZihlKWZvcihkPTAsYj0zO2Q8ZjtkKyssYis9NCljW2JdPWxbZF0rdT4+aH1lbHNlIGZvcihsZXQgZT0wO2U8cjtlKyspe2NvbnN0IHQ9c1tlXS5pdGVtcztoPWFbZV0ucHJlY2lzaW9uLTg7dT0uNSsoMTI4PDxoKTtmb3IoYj1lLGQ9MCxmPXQubGVuZ3RoO2Q8ZjtkKyspe2NbYl09dFtkXSt1Pj5oO2IrPXJ9fW4ucHVzaChsKX1yZXR1cm4gbn0oaSk7dGhpcy53aWR0aD1pLlNJWi5Yc2l6LWkuU0laLlhPc2l6O3RoaXMuaGVpZ2h0PWkuU0laLllzaXotaS5TSVouWU9zaXo7dGhpcy5jb21wb25lbnRzQ291bnQ9aS5TSVouQ3Npen19O2Z1bmN0aW9uIGNhbGN1bGF0ZUNvbXBvbmVudERpbWVuc2lvbnMoZSx0KXtlLngwPU1hdGguY2VpbCh0LlhPc2l6L2UuWFJzaXopO2UueDE9TWF0aC5jZWlsKHQuWHNpei9lLlhSc2l6KTtlLnkwPU1hdGguY2VpbCh0LllPc2l6L2UuWVJzaXopO2UueTE9TWF0aC5jZWlsKHQuWXNpei9lLllSc2l6KTtlLndpZHRoPWUueDEtZS54MDtlLmhlaWdodD1lLnkxLWUueTB9ZnVuY3Rpb24gY2FsY3VsYXRlVGlsZUdyaWRzKGUsdCl7Y29uc3QgYT1lLlNJWixyPVtdO2xldCBuO2NvbnN0IGk9TWF0aC5jZWlsKChhLlhzaXotYS5YVE9zaXopL2EuWFRzaXopLHM9TWF0aC5jZWlsKChhLllzaXotYS5ZVE9zaXopL2EuWVRzaXopO2ZvcihsZXQgZT0wO2U8cztlKyspZm9yKGxldCB0PTA7dDxpO3QrKyl7bj17fTtuLnR4MD1NYXRoLm1heChhLlhUT3Npeit0KmEuWFRzaXosYS5YT3Npeik7bi50eTA9TWF0aC5tYXgoYS5ZVE9zaXorZSphLllUc2l6LGEuWU9zaXopO24udHgxPU1hdGgubWluKGEuWFRPc2l6Kyh0KzEpKmEuWFRzaXosYS5Yc2l6KTtuLnR5MT1NYXRoLm1pbihhLllUT3NpeisoZSsxKSphLllUc2l6LGEuWXNpeik7bi53aWR0aD1uLnR4MS1uLnR4MDtuLmhlaWdodD1uLnR5MS1uLnR5MDtuLmNvbXBvbmVudHM9W107ci5wdXNoKG4pfWUudGlsZXM9cjtmb3IobGV0IGU9MCxpPWEuQ3NpejtlPGk7ZSsrKXtjb25zdCBhPXRbZV07Zm9yKGxldCB0PTAsaT1yLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPXt9O249clt0XTtpLnRjeDA9TWF0aC5jZWlsKG4udHgwL2EuWFJzaXopO2kudGN5MD1NYXRoLmNlaWwobi50eTAvYS5ZUnNpeik7aS50Y3gxPU1hdGguY2VpbChuLnR4MS9hLlhSc2l6KTtpLnRjeTE9TWF0aC5jZWlsKG4udHkxL2EuWVJzaXopO2kud2lkdGg9aS50Y3gxLWkudGN4MDtpLmhlaWdodD1pLnRjeTEtaS50Y3kwO24uY29tcG9uZW50c1tlXT1pfX19ZnVuY3Rpb24gZ2V0QmxvY2tzRGltZW5zaW9ucyhlLHQsYSl7Y29uc3Qgcj10LmNvZGluZ1N0eWxlUGFyYW1ldGVycyxuPXt9O2lmKHIuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cyl7bi5QUHg9ci5wcmVjaW5jdHNTaXplc1thXS5QUHg7bi5QUHk9ci5wcmVjaW5jdHNTaXplc1thXS5QUHl9ZWxzZXtuLlBQeD0xNTtuLlBQeT0xNX1uLnhjYl89YT4wP01hdGgubWluKHIueGNiLG4uUFB4LTEpOk1hdGgubWluKHIueGNiLG4uUFB4KTtuLnljYl89YT4wP01hdGgubWluKHIueWNiLG4uUFB5LTEpOk1hdGgubWluKHIueWNiLG4uUFB5KTtyZXR1cm4gbn1mdW5jdGlvbiBidWlsZFByZWNpbmN0cyhlLHQsYSl7Y29uc3Qgcj0xPDxhLlBQeCxuPTE8PGEuUFB5LGk9MD09PXQucmVzTGV2ZWwscz0xPDxhLlBQeCsoaT8wOi0xKSxvPTE8PGEuUFB5KyhpPzA6LTEpLGM9dC50cngxPnQudHJ4MD9NYXRoLmNlaWwodC50cngxL3IpLU1hdGguZmxvb3IodC50cngwL3IpOjAsbD10LnRyeTE+dC50cnkwP01hdGguY2VpbCh0LnRyeTEvbiktTWF0aC5mbG9vcih0LnRyeTAvbik6MCxoPWMqbDt0LnByZWNpbmN0UGFyYW1ldGVycz17cHJlY2luY3RXaWR0aDpyLHByZWNpbmN0SGVpZ2h0Om4sbnVtcHJlY2luY3Rzd2lkZTpjLG51bXByZWNpbmN0c2hpZ2g6bCxudW1wcmVjaW5jdHM6aCxwcmVjaW5jdFdpZHRoSW5TdWJiYW5kOnMscHJlY2luY3RIZWlnaHRJblN1YmJhbmQ6b319ZnVuY3Rpb24gYnVpbGRDb2RlYmxvY2tzKGUsdCxhKXtjb25zdCByPWEueGNiXyxuPWEueWNiXyxpPTE8PHIscz0xPDxuLG89dC50YngwPj5yLGM9dC50YnkwPj5uLGw9dC50YngxK2ktMT4+cixoPXQudGJ5MStzLTE+Pm4sdT10LnJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLGQ9W10sZj1bXTtsZXQgZyxwLG0sYjtmb3IocD1jO3A8aDtwKyspZm9yKGc9bztnPGw7ZysrKXttPXtjYng6ZyxjYnk6cCx0YngwOmkqZyx0YnkwOnMqcCx0YngxOmkqKGcrMSksdGJ5MTpzKihwKzEpfTttLnRieDBfPU1hdGgubWF4KHQudGJ4MCxtLnRieDApO20udGJ5MF89TWF0aC5tYXgodC50YnkwLG0udGJ5MCk7bS50YngxXz1NYXRoLm1pbih0LnRieDEsbS50YngxKTttLnRieTFfPU1hdGgubWluKHQudGJ5MSxtLnRieTEpO2I9TWF0aC5mbG9vcigobS50YngwXy10LnRieDApL3UucHJlY2luY3RXaWR0aEluU3ViYmFuZCkrTWF0aC5mbG9vcigobS50YnkwXy10LnRieTApL3UucHJlY2luY3RIZWlnaHRJblN1YmJhbmQpKnUubnVtcHJlY2luY3Rzd2lkZTttLnByZWNpbmN0TnVtYmVyPWI7bS5zdWJiYW5kVHlwZT10LnR5cGU7bS5MYmxvY2s9MztpZihtLnRieDFfPD1tLnRieDBffHxtLnRieTFfPD1tLnRieTBfKWNvbnRpbnVlO2QucHVzaChtKTtsZXQgZT1mW2JdO2lmKHZvaWQgMCE9PWUpe2c8ZS5jYnhNaW4/ZS5jYnhNaW49ZzpnPmUuY2J4TWF4JiYoZS5jYnhNYXg9Zyk7cDxlLmNieU1pbj9lLmNieE1pbj1wOnA+ZS5jYnlNYXgmJihlLmNieU1heD1wKX1lbHNlIGZbYl09ZT17Y2J4TWluOmcsY2J5TWluOnAsY2J4TWF4OmcsY2J5TWF4OnB9O20ucHJlY2luY3Q9ZX10LmNvZGVibG9ja1BhcmFtZXRlcnM9e2NvZGVibG9ja1dpZHRoOnIsY29kZWJsb2NrSGVpZ2h0Om4sbnVtY29kZWJsb2Nrd2lkZTpsLW8rMSxudW1jb2RlYmxvY2toaWdoOmgtYysxfTt0LmNvZGVibG9ja3M9ZDt0LnByZWNpbmN0cz1mfWZ1bmN0aW9uIGNyZWF0ZVBhY2tldChlLHQsYSl7Y29uc3Qgcj1bXSxuPWUuc3ViYmFuZHM7Zm9yKGxldCBlPTAsYT1uLmxlbmd0aDtlPGE7ZSsrKXtjb25zdCBhPW5bZV0uY29kZWJsb2Nrcztmb3IobGV0IGU9MCxuPWEubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49YVtlXTtuLnByZWNpbmN0TnVtYmVyPT09dCYmci5wdXNoKG4pfX1yZXR1cm57bGF5ZXJOdW1iZXI6YSxjb2RlYmxvY2tzOnJ9fWZ1bmN0aW9uIExheWVyUmVzb2x1dGlvbkNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6O2xldCBzPTA7Zm9yKGxldCBlPTA7ZTxpO2UrKylzPU1hdGgubWF4KHMsci5jb21wb25lbnRzW2VdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO2xldCBvPTAsYz0wLGw9MCxoPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKXtmb3IoO288bjtvKyspe2Zvcig7Yzw9cztjKyspe2Zvcig7bDxpO2wrKyl7Y29uc3QgZT1yLmNvbXBvbmVudHNbbF07aWYoYz5lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpY29udGludWU7Y29uc3QgdD1lLnJlc29sdXRpb25zW2NdLGE9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Zvcig7aDxhOyl7Y29uc3QgZT1jcmVhdGVQYWNrZXQodCxoLG8pO2grKztyZXR1cm4gZX1oPTB9bD0wfWM9MH10aHJvdyBuZXcgSnB4RXJyb3IoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIFJlc29sdXRpb25MYXllckNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6O2xldCBzPTA7Zm9yKGxldCBlPTA7ZTxpO2UrKylzPU1hdGgubWF4KHMsci5jb21wb25lbnRzW2VdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO2xldCBvPTAsYz0wLGw9MCxoPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKXtmb3IoO288PXM7bysrKXtmb3IoO2M8bjtjKyspe2Zvcig7bDxpO2wrKyl7Y29uc3QgZT1yLmNvbXBvbmVudHNbbF07aWYobz5lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpY29udGludWU7Y29uc3QgdD1lLnJlc29sdXRpb25zW29dLGE9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Zvcig7aDxhOyl7Y29uc3QgZT1jcmVhdGVQYWNrZXQodCxoLGMpO2grKztyZXR1cm4gZX1oPTB9bD0wfWM9MH10aHJvdyBuZXcgSnB4RXJyb3IoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIFJlc29sdXRpb25Qb3NpdGlvbkNvbXBvbmVudExheWVySXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6O2xldCBzLG8sYyxsLGg9MDtmb3IoYz0wO2M8aTtjKyspe2NvbnN0IGU9ci5jb21wb25lbnRzW2NdO2g9TWF0aC5tYXgoaCxlLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpfWNvbnN0IHU9bmV3IEludDMyQXJyYXkoaCsxKTtmb3Iobz0wO288PWg7KytvKXtsZXQgZT0wO2ZvcihjPTA7YzxpOysrYyl7Y29uc3QgdD1yLmNvbXBvbmVudHNbY10ucmVzb2x1dGlvbnM7bzx0Lmxlbmd0aCYmKGU9TWF0aC5tYXgoZSx0W29dLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHMpKX11W29dPWV9cz0wO289MDtjPTA7bD0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCl7Zm9yKDtvPD1oO28rKyl7Zm9yKDtsPHVbb107bCsrKXtmb3IoO2M8aTtjKyspe2NvbnN0IGU9ci5jb21wb25lbnRzW2NdO2lmKG8+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KWNvbnRpbnVlO2NvbnN0IHQ9ZS5yZXNvbHV0aW9uc1tvXSxhPXQucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztpZighKGw+PWEpKXtmb3IoO3M8bjspe2NvbnN0IGU9Y3JlYXRlUGFja2V0KHQsbCxzKTtzKys7cmV0dXJuIGV9cz0wfX1jPTB9bD0wfXRocm93IG5ldyBKcHhFcnJvcigiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gUG9zaXRpb25Db21wb25lbnRSZXNvbHV0aW9uTGF5ZXJJdGVyYXRvcihlKXtjb25zdCB0PWUuU0laLGE9ZS5jdXJyZW50VGlsZS5pbmRleCxyPWUudGlsZXNbYV0sbj1yLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsaT10LkNzaXoscz1nZXRQcmVjaW5jdFNpemVzSW5JbWFnZVNjYWxlKHIpLG89cztsZXQgYz0wLGw9MCxoPTAsdT0wLGQ9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpe2Zvcig7ZDxvLm1heE51bUhpZ2g7ZCsrKXtmb3IoO3U8by5tYXhOdW1XaWRlO3UrKyl7Zm9yKDtoPGk7aCsrKXtjb25zdCBlPXIuY29tcG9uZW50c1toXSx0PWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtmb3IoO2w8PXQ7bCsrKXtjb25zdCB0PWUucmVzb2x1dGlvbnNbbF0sYT1zLmNvbXBvbmVudHNbaF0ucmVzb2x1dGlvbnNbbF0scj1nZXRQcmVjaW5jdEluZGV4SWZFeGlzdCh1LGQsYSxvLHQpO2lmKG51bGwhPT1yKXtmb3IoO2M8bjspe2NvbnN0IGU9Y3JlYXRlUGFja2V0KHQscixjKTtjKys7cmV0dXJuIGV9Yz0wfX1sPTB9aD0wfXU9MH10aHJvdyBuZXcgSnB4RXJyb3IoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIENvbXBvbmVudFBvc2l0aW9uUmVzb2x1dGlvbkxheWVySXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LHM9Z2V0UHJlY2luY3RTaXplc0luSW1hZ2VTY2FsZShyKTtsZXQgbz0wLGM9MCxsPTAsaD0wLHU9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpe2Zvcig7bDxpOysrbCl7Y29uc3QgZT1yLmNvbXBvbmVudHNbbF0sdD1zLmNvbXBvbmVudHNbbF0sYT1lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7Zm9yKDt1PHQubWF4TnVtSGlnaDt1Kyspe2Zvcig7aDx0Lm1heE51bVdpZGU7aCsrKXtmb3IoO2M8PWE7YysrKXtjb25zdCBhPWUucmVzb2x1dGlvbnNbY10scj10LnJlc29sdXRpb25zW2NdLGk9Z2V0UHJlY2luY3RJbmRleElmRXhpc3QoaCx1LHIsdCxhKTtpZihudWxsIT09aSl7Zm9yKDtvPG47KXtjb25zdCBlPWNyZWF0ZVBhY2tldChhLGksbyk7bysrO3JldHVybiBlfW89MH19Yz0wfWg9MH11PTB9dGhyb3cgbmV3IEpweEVycm9yKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBnZXRQcmVjaW5jdEluZGV4SWZFeGlzdChlLHQsYSxyLG4pe2NvbnN0IGk9ZSpyLm1pbldpZHRoLHM9dCpyLm1pbkhlaWdodDtpZihpJWEud2lkdGghPTB8fHMlYS5oZWlnaHQhPTApcmV0dXJuIG51bGw7Y29uc3Qgbz1zL2Eud2lkdGgqbi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZTtyZXR1cm4gaS9hLmhlaWdodCtvfWZ1bmN0aW9uIGdldFByZWNpbmN0U2l6ZXNJbkltYWdlU2NhbGUoZSl7Y29uc3QgdD1lLmNvbXBvbmVudHMubGVuZ3RoO2xldCBhPU51bWJlci5NQVhfVkFMVUUscj1OdW1iZXIuTUFYX1ZBTFVFLG49MCxpPTA7Y29uc3Qgcz1uZXcgQXJyYXkodCk7Zm9yKGxldCBvPTA7bzx0O28rKyl7Y29uc3QgdD1lLmNvbXBvbmVudHNbb10sYz10LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsbD1uZXcgQXJyYXkoYysxKTtsZXQgaD1OdW1iZXIuTUFYX1ZBTFVFLHU9TnVtYmVyLk1BWF9WQUxVRSxkPTAsZj0wLGc9MTtmb3IobGV0IGU9YztlPj0wOy0tZSl7Y29uc3QgYT10LnJlc29sdXRpb25zW2VdLHI9ZyphLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdFdpZHRoLG49ZyphLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdEhlaWdodDtoPU1hdGgubWluKGgscik7dT1NYXRoLm1pbih1LG4pO2Q9TWF0aC5tYXgoZCxhLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlKTtmPU1hdGgubWF4KGYsYS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzaGlnaCk7bFtlXT17d2lkdGg6cixoZWlnaHQ6bn07Zzw8PTF9YT1NYXRoLm1pbihhLGgpO3I9TWF0aC5taW4ocix1KTtuPU1hdGgubWF4KG4sZCk7aT1NYXRoLm1heChpLGYpO3Nbb109e3Jlc29sdXRpb25zOmwsbWluV2lkdGg6aCxtaW5IZWlnaHQ6dSxtYXhOdW1XaWRlOmQsbWF4TnVtSGlnaDpmfX1yZXR1cm57Y29tcG9uZW50czpzLG1pbldpZHRoOmEsbWluSGVpZ2h0OnIsbWF4TnVtV2lkZTpuLG1heE51bUhpZ2g6aX19ZnVuY3Rpb24gYnVpbGRQYWNrZXRzKGUpe2NvbnN0IHQ9ZS5TSVosYT1lLmN1cnJlbnRUaWxlLmluZGV4LHI9ZS50aWxlc1thXSxuPXQuQ3Npejtmb3IobGV0IGU9MDtlPG47ZSsrKXtjb25zdCB0PXIuY29tcG9uZW50c1tlXSxhPXQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCxuPVtdLGk9W107Zm9yKGxldCBlPTA7ZTw9YTtlKyspe2NvbnN0IHI9Z2V0QmxvY2tzRGltZW5zaW9ucygwLHQsZSkscz17fSxvPTE8PGEtZTtzLnRyeDA9TWF0aC5jZWlsKHQudGN4MC9vKTtzLnRyeTA9TWF0aC5jZWlsKHQudGN5MC9vKTtzLnRyeDE9TWF0aC5jZWlsKHQudGN4MS9vKTtzLnRyeTE9TWF0aC5jZWlsKHQudGN5MS9vKTtzLnJlc0xldmVsPWU7YnVpbGRQcmVjaW5jdHMoMCxzLHIpO24ucHVzaChzKTtsZXQgYztpZigwPT09ZSl7Yz17fTtjLnR5cGU9IkxMIjtjLnRieDA9TWF0aC5jZWlsKHQudGN4MC9vKTtjLnRieTA9TWF0aC5jZWlsKHQudGN5MC9vKTtjLnRieDE9TWF0aC5jZWlsKHQudGN4MS9vKTtjLnRieTE9TWF0aC5jZWlsKHQudGN5MS9vKTtjLnJlc29sdXRpb249cztidWlsZENvZGVibG9ja3MoMCxjLHIpO2kucHVzaChjKTtzLnN1YmJhbmRzPVtjXX1lbHNle2NvbnN0IG49MTw8YS1lKzEsbz1bXTtjPXt9O2MudHlwZT0iSEwiO2MudGJ4MD1NYXRoLmNlaWwodC50Y3gwL24tLjUpO2MudGJ5MD1NYXRoLmNlaWwodC50Y3kwL24pO2MudGJ4MT1NYXRoLmNlaWwodC50Y3gxL24tLjUpO2MudGJ5MT1NYXRoLmNlaWwodC50Y3kxL24pO2MucmVzb2x1dGlvbj1zO2J1aWxkQ29kZWJsb2NrcygwLGMscik7aS5wdXNoKGMpO28ucHVzaChjKTtjPXt9O2MudHlwZT0iTEgiO2MudGJ4MD1NYXRoLmNlaWwodC50Y3gwL24pO2MudGJ5MD1NYXRoLmNlaWwodC50Y3kwL24tLjUpO2MudGJ4MT1NYXRoLmNlaWwodC50Y3gxL24pO2MudGJ5MT1NYXRoLmNlaWwodC50Y3kxL24tLjUpO2MucmVzb2x1dGlvbj1zO2J1aWxkQ29kZWJsb2NrcygwLGMscik7aS5wdXNoKGMpO28ucHVzaChjKTtjPXt9O2MudHlwZT0iSEgiO2MudGJ4MD1NYXRoLmNlaWwodC50Y3gwL24tLjUpO2MudGJ5MD1NYXRoLmNlaWwodC50Y3kwL24tLjUpO2MudGJ4MT1NYXRoLmNlaWwodC50Y3gxL24tLjUpO2MudGJ5MT1NYXRoLmNlaWwodC50Y3kxL24tLjUpO2MucmVzb2x1dGlvbj1zO2J1aWxkQ29kZWJsb2NrcygwLGMscik7aS5wdXNoKGMpO28ucHVzaChjKTtzLnN1YmJhbmRzPW99fXQucmVzb2x1dGlvbnM9bjt0LnN1YmJhbmRzPWl9Y29uc3QgaT1yLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMucHJvZ3Jlc3Npb25PcmRlcjtzd2l0Y2goaSl7Y2FzZSAwOnIucGFja2V0c0l0ZXJhdG9yPW5ldyBMYXllclJlc29sdXRpb25Db21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGUpO2JyZWFrO2Nhc2UgMTpyLnBhY2tldHNJdGVyYXRvcj1uZXcgUmVzb2x1dGlvbkxheWVyQ29tcG9uZW50UG9zaXRpb25JdGVyYXRvcihlKTticmVhaztjYXNlIDI6ci5wYWNrZXRzSXRlcmF0b3I9bmV3IFJlc29sdXRpb25Qb3NpdGlvbkNvbXBvbmVudExheWVySXRlcmF0b3IoZSk7YnJlYWs7Y2FzZSAzOnIucGFja2V0c0l0ZXJhdG9yPW5ldyBQb3NpdGlvbkNvbXBvbmVudFJlc29sdXRpb25MYXllckl0ZXJhdG9yKGUpO2JyZWFrO2Nhc2UgNDpyLnBhY2tldHNJdGVyYXRvcj1uZXcgQ29tcG9uZW50UG9zaXRpb25SZXNvbHV0aW9uTGF5ZXJJdGVyYXRvcihlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKcHhFcnJvcihgVW5zdXBwb3J0ZWQgcHJvZ3Jlc3Npb24gb3JkZXIgJHtpfWApfX1mdW5jdGlvbiBwYXJzZVRpbGVQYWNrZXRzKGUsdCxhLHIpe2xldCBpLHM9MCxvPTAsYz0hMTtmdW5jdGlvbiByZWFkQml0cyhlKXtmb3IoO288ZTspe2NvbnN0IGU9dFthK3NdO3MrKztpZihjKXtpPWk8PDd8ZTtvKz03O2M9ITF9ZWxzZXtpPWk8PDh8ZTtvKz04fTI1NT09PWUmJihjPSEwKX1vLT1lO3JldHVybiBpPj4+byYoMTw8ZSktMX1mdW5jdGlvbiBza2lwTWFya2VySWZFcXVhbChlKXtpZigyNTU9PT10W2Ercy0xXSYmdFthK3NdPT09ZSl7c2tpcEJ5dGVzKDEpO3JldHVybiEwfWlmKDI1NT09PXRbYStzXSYmdFthK3MrMV09PT1lKXtza2lwQnl0ZXMoMik7cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gc2tpcEJ5dGVzKGUpe3MrPWV9ZnVuY3Rpb24gYWxpZ25Ub0J5dGUoKXtvPTA7aWYoYyl7cysrO2M9ITF9fWZ1bmN0aW9uIHJlYWRDb2RpbmdwYXNzZXMoKXtpZigwPT09cmVhZEJpdHMoMSkpcmV0dXJuIDE7aWYoMD09PXJlYWRCaXRzKDEpKXJldHVybiAyO2xldCBlPXJlYWRCaXRzKDIpO2lmKGU8MylyZXR1cm4gZSszO2U9cmVhZEJpdHMoNSk7aWYoZTwzMSlyZXR1cm4gZSs2O2U9cmVhZEJpdHMoNyk7cmV0dXJuIGUrMzd9Y29uc3QgbD1lLmN1cnJlbnRUaWxlLmluZGV4LGg9ZS50aWxlc1tsXSx1PWUuQ09ELnNvcE1hcmtlclVzZWQsZD1lLkNPRC5lcGhNYXJrZXJVc2VkLGY9aC5wYWNrZXRzSXRlcmF0b3I7Zm9yKDtzPHI7KXthbGlnblRvQnl0ZSgpO3UmJnNraXBNYXJrZXJJZkVxdWFsKDE0NSkmJnNraXBCeXRlcyg0KTtjb25zdCBlPWYubmV4dFBhY2tldCgpO2lmKCFyZWFkQml0cygxKSljb250aW51ZTtjb25zdCByPWUubGF5ZXJOdW1iZXIsaT1bXTtsZXQgbztmb3IobGV0IHQ9MCxhPWUuY29kZWJsb2Nrcy5sZW5ndGg7dDxhO3QrKyl7bz1lLmNvZGVibG9ja3NbdF07bGV0IGE9by5wcmVjaW5jdDtjb25zdCBzPW8uY2J4LWEuY2J4TWluLGM9by5jYnktYS5jYnlNaW47bGV0IGwsaCx1PSExLGQ9ITE7aWYodm9pZCAwIT09by5pbmNsdWRlZCl1PSEhcmVhZEJpdHMoMSk7ZWxzZXthPW8ucHJlY2luY3Q7bGV0IGU7aWYodm9pZCAwIT09YS5pbmNsdXNpb25UcmVlKWU9YS5pbmNsdXNpb25UcmVlO2Vsc2V7Y29uc3QgdD1hLmNieE1heC1hLmNieE1pbisxLG49YS5jYnlNYXgtYS5jYnlNaW4rMTtlPW5ldyBJbmNsdXNpb25UcmVlKHQsbixyKTtoPW5ldyBUYWdUcmVlKHQsbik7YS5pbmNsdXNpb25UcmVlPWU7YS56ZXJvQml0UGxhbmVzVHJlZT1oO2ZvcihsZXQgZT0wO2U8cjtlKyspaWYoMCE9PXJlYWRCaXRzKDEpKXRocm93IG5ldyBKcHhFcnJvcigiSW52YWxpZCB0YWcgdHJlZSIpfWlmKGUucmVzZXQocyxjLHIpKWZvcig7Oyl7aWYoIXJlYWRCaXRzKDEpKXtlLmluY3JlbWVudFZhbHVlKHIpO2JyZWFrfWw9IWUubmV4dExldmVsKCk7aWYobCl7by5pbmNsdWRlZD0hMDt1PWQ9ITA7YnJlYWt9fX1pZighdSljb250aW51ZTtpZihkKXtoPWEuemVyb0JpdFBsYW5lc1RyZWU7aC5yZXNldChzLGMpO2Zvcig7OylpZihyZWFkQml0cygxKSl7bD0haC5uZXh0TGV2ZWwoKTtpZihsKWJyZWFrfWVsc2UgaC5pbmNyZW1lbnRWYWx1ZSgpO28uemVyb0JpdFBsYW5lcz1oLnZhbHVlfWNvbnN0IGY9cmVhZENvZGluZ3Bhc3NlcygpO2Zvcig7cmVhZEJpdHMoMSk7KW8uTGJsb2NrKys7Y29uc3QgZz0oMCxuLmxvZzIpKGYpLHA9cmVhZEJpdHMoKGY8MTw8Zz9nLTE6Zykrby5MYmxvY2spO2kucHVzaCh7Y29kZWJsb2NrOm8sY29kaW5ncGFzc2VzOmYsZGF0YUxlbmd0aDpwfSl9YWxpZ25Ub0J5dGUoKTtkJiZza2lwTWFya2VySWZFcXVhbCgxNDYpO2Zvcig7aS5sZW5ndGg+MDspe2NvbnN0IGU9aS5zaGlmdCgpO289ZS5jb2RlYmxvY2s7dm9pZCAwPT09by5kYXRhJiYoby5kYXRhPVtdKTtvLmRhdGEucHVzaCh7ZGF0YTp0LHN0YXJ0OmErcyxlbmQ6YStzK2UuZGF0YUxlbmd0aCxjb2RpbmdwYXNzZXM6ZS5jb2RpbmdwYXNzZXN9KTtzKz1lLmRhdGFMZW5ndGh9fXJldHVybiBzfWZ1bmN0aW9uIGNvcHlDb2VmZmljaWVudHMoZSx0LGEscixuLHMsbyxjLGwpe2NvbnN0IGg9ci50YngwLHU9ci50YnkwLGQ9ci50YngxLXIudGJ4MCxmPXIuY29kZWJsb2NrcyxnPSJIIj09PXIudHlwZS5jaGFyQXQoMCk/MTowLHA9IkgiPT09ci50eXBlLmNoYXJBdCgxKT90OjA7Zm9yKGxldCBhPTAsbT1mLmxlbmd0aDthPG07KythKXtjb25zdCBtPWZbYV0sYj1tLnRieDFfLW0udGJ4MF8seT1tLnRieTFfLW0udGJ5MF87aWYoMD09PWJ8fDA9PT15KWNvbnRpbnVlO2lmKHZvaWQgMD09PW0uZGF0YSljb250aW51ZTtjb25zdCB3PW5ldyBCaXRNb2RlbChiLHksbS5zdWJiYW5kVHlwZSxtLnplcm9CaXRQbGFuZXMscyk7bGV0IFM9Mjtjb25zdCB4PW0uZGF0YTtsZXQgQyxrLHYsRj0wLE89MDtmb3IoQz0wLGs9eC5sZW5ndGg7QzxrO0MrKyl7dj14W0NdO0YrPXYuZW5kLXYuc3RhcnQ7Tys9di5jb2RpbmdwYXNzZXN9Y29uc3QgVD1uZXcgVWludDhBcnJheShGKTtsZXQgTT0wO2ZvcihDPTAsaz14Lmxlbmd0aDtDPGs7QysrKXt2PXhbQ107Y29uc3QgZT12LmRhdGEuc3ViYXJyYXkodi5zdGFydCx2LmVuZCk7VC5zZXQoZSxNKTtNKz1lLmxlbmd0aH1jb25zdCBEPW5ldyBpLkFyaXRobWV0aWNEZWNvZGVyKFQsMCxGKTt3LnNldERlY29kZXIoRCk7Zm9yKEM9MDtDPE87QysrKXtzd2l0Y2goUyl7Y2FzZSAwOncucnVuU2lnbmlmaWNhbmNlUHJvcGFnYXRpb25QYXNzKCk7YnJlYWs7Y2FzZSAxOncucnVuTWFnbml0dWRlUmVmaW5lbWVudFBhc3MoKTticmVhaztjYXNlIDI6dy5ydW5DbGVhbnVwUGFzcygpO2MmJncuY2hlY2tTZWdtZW50YXRpb25TeW1ib2woKX1sJiZ3LnJlc2V0KCk7Uz0oUysxKSUzfWxldCBFPW0udGJ4MF8taCsobS50YnkwXy11KSpkO2NvbnN0IE49dy5jb2VmZmljZW50c1NpZ24sUj13LmNvZWZmaWNlbnRzTWFnbml0dWRlLEw9dy5iaXRzRGVjb2RlZCwkPW8/MDouNTtsZXQgXyxqLFU7TT0wO2NvbnN0IFg9IkxMIiE9PXIudHlwZTtmb3IoQz0wO0M8eTtDKyspe2NvbnN0IGE9MiooRS9kfDApKih0LWQpK2crcDtmb3IoXz0wO188YjtfKyspe2o9UltNXTtpZigwIT09ail7aj0oaiskKSpuOzAhPT1OW01dJiYoaj0taik7VT1MW01dO2VbWD9hKyhFPDwxKTpFXT1vJiZVPj1zP2o6aiooMTw8cy1VKX1FKys7TSsrfUUrPWQtYn19fWZ1bmN0aW9uIHRyYW5zZm9ybVRpbGUoZSx0LGEpe2NvbnN0IHI9dC5jb21wb25lbnRzW2FdLG49ci5jb2RpbmdTdHlsZVBhcmFtZXRlcnMsaT1yLnF1YW50aXphdGlvblBhcmFtZXRlcnMsbz1uLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCxjPWkuU1BxY2RzLGw9aS5zY2FsYXJFeHBvdW5kZWQsaD1pLmd1YXJkQml0cyx1PW4uc2VnbWVudGF0aW9uU3ltYm9sVXNlZCxkPW4ucmVzZXRDb250ZXh0UHJvYmFiaWxpdGllcyxmPWUuY29tcG9uZW50c1thXS5wcmVjaXNpb24sZz1uLnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbixwPWc/bmV3IFJldmVyc2libGVUcmFuc2Zvcm06bmV3IElycmV2ZXJzaWJsZVRyYW5zZm9ybSxtPVtdO2xldCBiPTA7Zm9yKGxldCBlPTA7ZTw9bztlKyspe2NvbnN0IHQ9ci5yZXNvbHV0aW9uc1tlXSxhPXQudHJ4MS10LnRyeDAsbj10LnRyeTEtdC50cnkwLGk9bmV3IEZsb2F0MzJBcnJheShhKm4pO2ZvcihsZXQgcj0wLG49dC5zdWJiYW5kcy5sZW5ndGg7cjxuO3IrKyl7bGV0IG4sbztpZihsKXtuPWNbYl0ubXU7bz1jW2JdLmVwc2lsb247YisrfWVsc2V7bj1jWzBdLm11O289Y1swXS5lcHNpbG9uKyhlPjA/MS1lOjApfWNvbnN0IHA9dC5zdWJiYW5kc1tyXSxtPXNbcC50eXBlXTtjb3B5Q29lZmZpY2llbnRzKGksYSwwLHAsZz8xOjIqKihmK20tbykqKDErbi8yMDQ4KSxoK28tMSxnLHUsZCl9bS5wdXNoKHt3aWR0aDphLGhlaWdodDpuLGl0ZW1zOml9KX1jb25zdCB5PXAuY2FsY3VsYXRlKG0sci50Y3gwLHIudGN5MCk7cmV0dXJue2xlZnQ6ci50Y3gwLHRvcDpyLnRjeTAsd2lkdGg6eS53aWR0aCxoZWlnaHQ6eS5oZWlnaHQsaXRlbXM6eS5pdGVtc319ZnVuY3Rpb24gaW5pdGlhbGl6ZVRpbGUoZSx0KXtjb25zdCBhPWUuU0laLkNzaXoscj1lLnRpbGVzW3RdO2ZvcihsZXQgdD0wO3Q8YTt0Kyspe2NvbnN0IGE9ci5jb21wb25lbnRzW3RdLG49dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5RQ0NbdF0/ZS5jdXJyZW50VGlsZS5RQ0NbdF06ZS5jdXJyZW50VGlsZS5RQ0Q7YS5xdWFudGl6YXRpb25QYXJhbWV0ZXJzPW47Y29uc3QgaT12b2lkIDAhPT1lLmN1cnJlbnRUaWxlLkNPQ1t0XT9lLmN1cnJlbnRUaWxlLkNPQ1t0XTplLmN1cnJlbnRUaWxlLkNPRDthLmNvZGluZ1N0eWxlUGFyYW1ldGVycz1pfXIuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycz1lLmN1cnJlbnRUaWxlLkNPRH1jbGFzcyBUYWdUcmVle2NvbnN0cnVjdG9yKGUsdCl7Y29uc3QgYT0oMCxuLmxvZzIpKE1hdGgubWF4KGUsdCkpKzE7dGhpcy5sZXZlbHM9W107Zm9yKGxldCByPTA7cjxhO3IrKyl7Y29uc3QgYT17d2lkdGg6ZSxoZWlnaHQ6dCxpdGVtczpbXX07dGhpcy5sZXZlbHMucHVzaChhKTtlPU1hdGguY2VpbChlLzIpO3Q9TWF0aC5jZWlsKHQvMil9fXJlc2V0KGUsdCl7bGV0IGEscj0wLG49MDtmb3IoO3I8dGhpcy5sZXZlbHMubGVuZ3RoOyl7YT10aGlzLmxldmVsc1tyXTtjb25zdCBpPWUrdCphLndpZHRoO2lmKHZvaWQgMCE9PWEuaXRlbXNbaV0pe249YS5pdGVtc1tpXTticmVha31hLmluZGV4PWk7ZT4+PTE7dD4+PTE7cisrfXItLTthPXRoaXMubGV2ZWxzW3JdO2EuaXRlbXNbYS5pbmRleF09bjt0aGlzLmN1cnJlbnRMZXZlbD1yO2RlbGV0ZSB0aGlzLnZhbHVlfWluY3JlbWVudFZhbHVlKCl7Y29uc3QgZT10aGlzLmxldmVsc1t0aGlzLmN1cnJlbnRMZXZlbF07ZS5pdGVtc1tlLmluZGV4XSsrfW5leHRMZXZlbCgpe2xldCBlPXRoaXMuY3VycmVudExldmVsLHQ9dGhpcy5sZXZlbHNbZV07Y29uc3QgYT10Lml0ZW1zW3QuaW5kZXhdO2UtLTtpZihlPDApe3RoaXMudmFsdWU9YTtyZXR1cm4hMX10aGlzLmN1cnJlbnRMZXZlbD1lO3Q9dGhpcy5sZXZlbHNbZV07dC5pdGVtc1t0LmluZGV4XT1hO3JldHVybiEwfX1jbGFzcyBJbmNsdXNpb25UcmVle2NvbnN0cnVjdG9yKGUsdCxhKXtjb25zdCByPSgwLG4ubG9nMikoTWF0aC5tYXgoZSx0KSkrMTt0aGlzLmxldmVscz1bXTtmb3IobGV0IG49MDtuPHI7bisrKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUqdCk7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKXJbZV09YTtjb25zdCBuPXt3aWR0aDplLGhlaWdodDp0LGl0ZW1zOnJ9O3RoaXMubGV2ZWxzLnB1c2gobik7ZT1NYXRoLmNlaWwoZS8yKTt0PU1hdGguY2VpbCh0LzIpfX1yZXNldChlLHQsYSl7bGV0IHI9MDtmb3IoO3I8dGhpcy5sZXZlbHMubGVuZ3RoOyl7Y29uc3Qgbj10aGlzLmxldmVsc1tyXSxpPWUrdCpuLndpZHRoO24uaW5kZXg9aTtjb25zdCBzPW4uaXRlbXNbaV07aWYoMjU1PT09cylicmVhaztpZihzPmEpe3RoaXMuY3VycmVudExldmVsPXI7dGhpcy5wcm9wYWdhdGVWYWx1ZXMoKTtyZXR1cm4hMX1lPj49MTt0Pj49MTtyKyt9dGhpcy5jdXJyZW50TGV2ZWw9ci0xO3JldHVybiEwfWluY3JlbWVudFZhbHVlKGUpe2NvbnN0IHQ9dGhpcy5sZXZlbHNbdGhpcy5jdXJyZW50TGV2ZWxdO3QuaXRlbXNbdC5pbmRleF09ZSsxO3RoaXMucHJvcGFnYXRlVmFsdWVzKCl9cHJvcGFnYXRlVmFsdWVzKCl7bGV0IGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXTtjb25zdCBhPXQuaXRlbXNbdC5pbmRleF07Zm9yKDstLWU+PTA7KXt0PXRoaXMubGV2ZWxzW2VdO3QuaXRlbXNbdC5pbmRleF09YX19bmV4dExldmVsKCl7bGV0IGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXTtjb25zdCBhPXQuaXRlbXNbdC5pbmRleF07dC5pdGVtc1t0LmluZGV4XT0yNTU7ZS0tO2lmKGU8MClyZXR1cm4hMTt0aGlzLmN1cnJlbnRMZXZlbD1lO3Q9dGhpcy5sZXZlbHNbZV07dC5pdGVtc1t0LmluZGV4XT1hO3JldHVybiEwfX1jbGFzcyBCaXRNb2RlbHtzdGF0aWMgVU5JRk9STV9DT05URVhUPTE3O3N0YXRpYyBSVU5MRU5HVEhfQ09OVEVYVD0xODtzdGF0aWMgTExBbmRMSENvbnRleHRzTGFiZWw9bmV3IFVpbnQ4QXJyYXkoWzAsNSw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMSw2LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwyLDYsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDIsNiw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMiw2LDgsMCwzLDcsOCwwLDQsNyw4XSk7c3RhdGljIEhMQ29udGV4dExhYmVsPW5ldyBVaW50OEFycmF5KFswLDMsNCwwLDUsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDEsMyw0LDAsNiw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMiwzLDQsMCw2LDcsNywwLDgsOCw4LDAsMCwwLDAsMCwyLDMsNCwwLDYsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDIsMyw0LDAsNiw3LDcsMCw4LDgsOF0pO3N0YXRpYyBISENvbnRleHRMYWJlbD1uZXcgVWludDhBcnJheShbMCwxLDIsMCwxLDIsMiwwLDIsMiwyLDAsMCwwLDAsMCwzLDQsNSwwLDQsNSw1LDAsNSw1LDUsMCwwLDAsMCwwLDYsNyw3LDAsNyw3LDcsMCw3LDcsNywwLDAsMCwwLDAsOCw4LDgsMCw4LDgsOCwwLDgsOCw4LDAsMCwwLDAsMCw4LDgsOCwwLDgsOCw4LDAsOCw4LDhdKTtjb25zdHJ1Y3RvcihlLHQsYSxyLG4pe3RoaXMud2lkdGg9ZTt0aGlzLmhlaWdodD10O2xldCBpO2k9IkhIIj09PWE/Qml0TW9kZWwuSEhDb250ZXh0TGFiZWw6IkhMIj09PWE/Qml0TW9kZWwuSExDb250ZXh0TGFiZWw6Qml0TW9kZWwuTExBbmRMSENvbnRleHRzTGFiZWw7dGhpcy5jb250ZXh0TGFiZWxUYWJsZT1pO2NvbnN0IHM9ZSp0O3RoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlPW5ldyBVaW50OEFycmF5KHMpO3RoaXMuY29lZmZpY2VudHNTaWduPW5ldyBVaW50OEFycmF5KHMpO2xldCBvO289bj4xND9uZXcgVWludDMyQXJyYXkocyk6bj42P25ldyBVaW50MTZBcnJheShzKTpuZXcgVWludDhBcnJheShzKTt0aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlPW87dGhpcy5wcm9jZXNzaW5nRmxhZ3M9bmV3IFVpbnQ4QXJyYXkocyk7Y29uc3QgYz1uZXcgVWludDhBcnJheShzKTtpZigwIT09cilmb3IobGV0IGU9MDtlPHM7ZSsrKWNbZV09cjt0aGlzLmJpdHNEZWNvZGVkPWM7dGhpcy5yZXNldCgpfXNldERlY29kZXIoZSl7dGhpcy5kZWNvZGVyPWV9cmVzZXQoKXt0aGlzLmNvbnRleHRzPW5ldyBJbnQ4QXJyYXkoMTkpO3RoaXMuY29udGV4dHNbMF09ODt0aGlzLmNvbnRleHRzW0JpdE1vZGVsLlVOSUZPUk1fQ09OVEVYVF09OTI7dGhpcy5jb250ZXh0c1tCaXRNb2RlbC5SVU5MRU5HVEhfQ09OVEVYVF09Nn1zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UoZSx0LGEpe2NvbnN0IHI9dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2Usbj10aGlzLndpZHRoLGk9dGhpcy5oZWlnaHQscz10PjAsbz10KzE8bjtsZXQgYztpZihlPjApe2M9YS1uO3MmJihyW2MtMV0rPTE2KTtvJiYocltjKzFdKz0xNik7cltjXSs9NH1pZihlKzE8aSl7Yz1hK247cyYmKHJbYy0xXSs9MTYpO28mJihyW2MrMV0rPTE2KTtyW2NdKz00fXMmJihyW2EtMV0rPTEpO28mJihyW2ErMV0rPTEpO3JbYV18PTEyOH1ydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MoKXtjb25zdCBlPXRoaXMuZGVjb2Rlcix0PXRoaXMud2lkdGgsYT10aGlzLmhlaWdodCxyPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsbj10aGlzLmNvZWZmaWNlbnRzU2lnbixpPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLHM9dGhpcy5wcm9jZXNzaW5nRmxhZ3Msbz10aGlzLmNvbnRleHRzLGM9dGhpcy5jb250ZXh0TGFiZWxUYWJsZSxsPXRoaXMuYml0c0RlY29kZWQ7Zm9yKGxldCBoPTA7aDxhO2grPTQpZm9yKGxldCB1PTA7dTx0O3UrKyl7bGV0IGQ9aCp0K3U7Zm9yKGxldCBmPTA7Zjw0O2YrKyxkKz10KXtjb25zdCB0PWgrZjtpZih0Pj1hKWJyZWFrO3NbZF0mPS0yO2lmKHJbZF18fCFpW2RdKWNvbnRpbnVlO2NvbnN0IGc9Y1tpW2RdXTtpZihlLnJlYWRCaXQobyxnKSl7Y29uc3QgZT10aGlzLmRlY29kZVNpZ25CaXQodCx1LGQpO25bZF09ZTtyW2RdPTE7dGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UodCx1LGQpO3NbZF18PTJ9bFtkXSsrO3NbZF18PTF9fX1kZWNvZGVTaWduQml0KGUsdCxhKXtjb25zdCByPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxpPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUscz10aGlzLmNvZWZmaWNlbnRzU2lnbjtsZXQgbyxjLGwsaCx1LGQ7aD10PjAmJjAhPT1pW2EtMV07aWYodCsxPHImJjAhPT1pW2ErMV0pe2w9c1thKzFdO2lmKGgpe2M9c1thLTFdO289MS1sLWN9ZWxzZSBvPTEtbC1sfWVsc2UgaWYoaCl7Yz1zW2EtMV07bz0xLWMtY31lbHNlIG89MDtjb25zdCBmPTMqbztoPWU+MCYmMCE9PWlbYS1yXTtpZihlKzE8biYmMCE9PWlbYStyXSl7bD1zW2Ercl07aWYoaCl7Yz1zW2Etcl07bz0xLWwtYytmfWVsc2Ugbz0xLWwtbCtmfWVsc2UgaWYoaCl7Yz1zW2Etcl07bz0xLWMtYytmfWVsc2Ugbz1mO2lmKG8+PTApe3U9OStvO2Q9dGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cyx1KX1lbHNle3U9OS1vO2Q9MV50aGlzLmRlY29kZXIucmVhZEJpdCh0aGlzLmNvbnRleHRzLHUpfXJldHVybiBkfXJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzKCl7Y29uc3QgZT10aGlzLmRlY29kZXIsdD10aGlzLndpZHRoLGE9dGhpcy5oZWlnaHQscj10aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLG49dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2UsaT10aGlzLmNvbnRleHRzLHM9dGhpcy5iaXRzRGVjb2RlZCxvPXRoaXMucHJvY2Vzc2luZ0ZsYWdzLGM9dCphLGw9NCp0O2ZvcihsZXQgYSxoPTA7aDxjO2g9YSl7YT1NYXRoLm1pbihjLGgrbCk7Zm9yKGxldCBjPTA7Yzx0O2MrKylmb3IobGV0IGw9aCtjO2w8YTtsKz10KXtpZighcltsXXx8MCE9KDEmb1tsXSkpY29udGludWU7bGV0IHQ9MTY7aWYoMCE9KDImb1tsXSkpe29bbF1ePTI7dD0wPT09KDEyNyZuW2xdKT8xNToxNH1jb25zdCBhPWUucmVhZEJpdChpLHQpO3JbbF09cltsXTw8MXxhO3NbbF0rKztvW2xdfD0xfX19cnVuQ2xlYW51cFBhc3MoKXtjb25zdCBlPXRoaXMuZGVjb2Rlcix0PXRoaXMud2lkdGgsYT10aGlzLmhlaWdodCxyPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLG49dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxpPXRoaXMuY29lZmZpY2VudHNTaWduLHM9dGhpcy5jb250ZXh0cyxvPXRoaXMuY29udGV4dExhYmVsVGFibGUsYz10aGlzLmJpdHNEZWNvZGVkLGw9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsaD10LHU9Mip0LGQ9Myp0O2xldCBmO2ZvcihsZXQgZz0wO2c8YTtnPWYpe2Y9TWF0aC5taW4oZys0LGEpO2NvbnN0IHA9Zyp0LG09ZyszPGE7Zm9yKGxldCBhPTA7YTx0O2ErKyl7Y29uc3QgYj1wK2E7bGV0IHksdz0wLFM9Yix4PWc7aWYobSYmMD09PWxbYl0mJjA9PT1sW2IraF0mJjA9PT1sW2IrdV0mJjA9PT1sW2IrZF0mJjA9PT1yW2JdJiYwPT09cltiK2hdJiYwPT09cltiK3VdJiYwPT09cltiK2RdKXtpZighZS5yZWFkQml0KHMsQml0TW9kZWwuUlVOTEVOR1RIX0NPTlRFWFQpKXtjW2JdKys7Y1tiK2hdKys7Y1tiK3VdKys7Y1tiK2RdKys7Y29udGludWV9dz1lLnJlYWRCaXQocyxCaXRNb2RlbC5VTklGT1JNX0NPTlRFWFQpPDwxfGUucmVhZEJpdChzLEJpdE1vZGVsLlVOSUZPUk1fQ09OVEVYVCk7aWYoMCE9PXcpe3g9Zyt3O1MrPXcqdH15PXRoaXMuZGVjb2RlU2lnbkJpdCh4LGEsUyk7aVtTXT15O25bU109MTt0aGlzLnNldE5laWdoYm9yc1NpZ25pZmljYW5jZSh4LGEsUyk7bFtTXXw9MjtTPWI7Zm9yKGxldCBlPWc7ZTw9eDtlKyssUys9dCljW1NdKys7dysrfWZvcih4PWcrdzt4PGY7eCsrLFMrPXQpe2lmKG5bU118fDAhPSgxJmxbU10pKWNvbnRpbnVlO2NvbnN0IHQ9b1tyW1NdXTtpZigxPT09ZS5yZWFkQml0KHMsdCkpe3k9dGhpcy5kZWNvZGVTaWduQml0KHgsYSxTKTtpW1NdPXk7bltTXT0xO3RoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKHgsYSxTKTtsW1NdfD0yfWNbU10rK319fX1jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpe2NvbnN0IGU9dGhpcy5kZWNvZGVyLHQ9dGhpcy5jb250ZXh0cztpZigxMCE9PShlLnJlYWRCaXQodCxCaXRNb2RlbC5VTklGT1JNX0NPTlRFWFQpPDwzfGUucmVhZEJpdCh0LEJpdE1vZGVsLlVOSUZPUk1fQ09OVEVYVCk8PDJ8ZS5yZWFkQml0KHQsQml0TW9kZWwuVU5JRk9STV9DT05URVhUKTw8MXxlLnJlYWRCaXQodCxCaXRNb2RlbC5VTklGT1JNX0NPTlRFWFQpKSl0aHJvdyBuZXcgSnB4RXJyb3IoIkludmFsaWQgc2VnbWVudGF0aW9uIHN5bWJvbCIpfX1jbGFzcyBUcmFuc2Zvcm17Y29uc3RydWN0b3IoKXt0aGlzLmNvbnN0cnVjdG9yPT09VHJhbnNmb3JtJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgVHJhbnNmb3JtLiIpfWNhbGN1bGF0ZShlLHQsYSl7bGV0IHI9ZVswXTtmb3IobGV0IG49MSxpPWUubGVuZ3RoO248aTtuKyspcj10aGlzLml0ZXJhdGUocixlW25dLHQsYSk7cmV0dXJuIHJ9ZXh0ZW5kKGUsdCxhKXtsZXQgcj10LTEsbj10KzEsaT10K2EtMixzPXQrYTtlW3ItLV09ZVtuKytdO2VbcysrXT1lW2ktLV07ZVtyLS1dPWVbbisrXTtlW3MrK109ZVtpLS1dO2Vbci0tXT1lW24rK107ZVtzKytdPWVbaS0tXTtlW3JdPWVbbl07ZVtzXT1lW2ldfWZpbHRlcihlLHQsYSl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZmlsdGVyYCBjYWxsZWQiKX1pdGVyYXRlKGUsdCxhLHIpe2NvbnN0IG49ZS53aWR0aCxpPWUuaGVpZ2h0O2xldCBzPWUuaXRlbXM7Y29uc3Qgbz10LndpZHRoLGM9dC5oZWlnaHQsbD10Lml0ZW1zO2xldCBoLHUsZCxmLGcscDtmb3IoZD0wLGg9MDtoPGk7aCsrKXtmPTIqaCpvO2Zvcih1PTA7dTxuO3UrKyxkKyssZis9MilsW2ZdPXNbZF19cz1lLml0ZW1zPW51bGw7Y29uc3QgbT1uZXcgRmxvYXQzMkFycmF5KG8rOCk7aWYoMT09PW8pe2lmKDAhPSgxJmEpKWZvcihwPTAsZD0wO3A8YztwKyssZCs9bylsW2RdKj0uNX1lbHNlIGZvcihwPTAsZD0wO3A8YztwKyssZCs9byl7bS5zZXQobC5zdWJhcnJheShkLGQrbyksNCk7dGhpcy5leHRlbmQobSw0LG8pO3RoaXMuZmlsdGVyKG0sNCxvKTtsLnNldChtLnN1YmFycmF5KDQsNCtvKSxkKX1sZXQgYj0xNjtjb25zdCB5PVtdO2ZvcihoPTA7aDxiO2grKyl5LnB1c2gobmV3IEZsb2F0MzJBcnJheShjKzgpKTtsZXQgdyxTPTA7ZT00K2M7aWYoMT09PWMpe2lmKDAhPSgxJnIpKWZvcihnPTA7ZzxvO2crKylsW2ddKj0uNX1lbHNlIGZvcihnPTA7ZzxvO2crKyl7aWYoMD09PVMpe2I9TWF0aC5taW4oby1nLGIpO2ZvcihkPWcsZj00O2Y8ZTtkKz1vLGYrKylmb3Iodz0wO3c8Yjt3KyspeVt3XVtmXT1sW2Qrd107Uz1ifVMtLTtjb25zdCB0PXlbU107dGhpcy5leHRlbmQodCw0LGMpO3RoaXMuZmlsdGVyKHQsNCxjKTtpZigwPT09Uyl7ZD1nLWIrMTtmb3IoZj00O2Y8ZTtkKz1vLGYrKylmb3Iodz0wO3c8Yjt3KyspbFtkK3ddPXlbd11bZl19fXJldHVybnt3aWR0aDpvLGhlaWdodDpjLGl0ZW1zOmx9fX1jbGFzcyBJcnJldmVyc2libGVUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm17ZmlsdGVyKGUsdCxhKXtjb25zdCByPWE+PjE7bGV0IG4saSxzLG87Y29uc3QgYz0tMS41ODYxMzQzNDIwNTk5MjQsbD0tLjA1Mjk4MDExODU3Mjk2MSxoPS44ODI5MTEwNzU1MzA5MzQsdT0uNDQzNTA2ODUyMDQzOTcxLGQ9MS4yMzAxNzQxMDQ5MTQwMDE7bj0odHw9MCktMztmb3IoaT1yKzQ7aS0tO24rPTIpZVtuXSo9LjgxMjg5MzA2NjExNTk2MDk7bj10LTI7cz11KmVbbi0xXTtmb3IoaT1yKzM7aS0tO24rPTIpe289dSplW24rMV07ZVtuXT1kKmVbbl0tcy1vO2lmKCFpLS0pYnJlYWs7bis9MjtzPXUqZVtuKzFdO2Vbbl09ZCplW25dLXMtb31uPXQtMTtzPWgqZVtuLTFdO2ZvcihpPXIrMjtpLS07bis9Mil7bz1oKmVbbisxXTtlW25dLT1zK287aWYoIWktLSlicmVhaztuKz0yO3M9aCplW24rMV07ZVtuXS09cytvfW49dDtzPWwqZVtuLTFdO2ZvcihpPXIrMTtpLS07bis9Mil7bz1sKmVbbisxXTtlW25dLT1zK287aWYoIWktLSlicmVhaztuKz0yO3M9bCplW24rMV07ZVtuXS09cytvfWlmKDAhPT1yKXtuPXQrMTtzPWMqZVtuLTFdO2ZvcihpPXI7aS0tO24rPTIpe289YyplW24rMV07ZVtuXS09cytvO2lmKCFpLS0pYnJlYWs7bis9MjtzPWMqZVtuKzFdO2Vbbl0tPXMrb319fX1jbGFzcyBSZXZlcnNpYmxlVHJhbnNmb3JtIGV4dGVuZHMgVHJhbnNmb3Jte2ZpbHRlcihlLHQsYSl7Y29uc3Qgcj1hPj4xO2xldCBuLGk7Zm9yKG49dHw9MCxpPXIrMTtpLS07bis9MillW25dLT1lW24tMV0rZVtuKzFdKzI+PjI7Zm9yKG49dCsxLGk9cjtpLS07bis9MillW25dKz1lW24tMV0rZVtuKzFdPj4xfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5MWldTdHJlYW09dm9pZCAwO3ZhciByPWEoMTgpO2NsYXNzIExaV1N0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5jYWNoZWREYXRhPTA7dGhpcy5iaXRzQ2FjaGVkPTA7Y29uc3Qgcj00MDk2LG49e2Vhcmx5Q2hhbmdlOmEsY29kZUxlbmd0aDo5LG5leHRDb2RlOjI1OCxkaWN0aW9uYXJ5VmFsdWVzOm5ldyBVaW50OEFycmF5KHIpLGRpY3Rpb25hcnlMZW5ndGhzOm5ldyBVaW50MTZBcnJheShyKSxkaWN0aW9uYXJ5UHJldkNvZGVzOm5ldyBVaW50MTZBcnJheShyKSxjdXJyZW50U2VxdWVuY2U6bmV3IFVpbnQ4QXJyYXkociksY3VycmVudFNlcXVlbmNlTGVuZ3RoOjB9O2ZvcihsZXQgZT0wO2U8MjU2OysrZSl7bi5kaWN0aW9uYXJ5VmFsdWVzW2VdPWU7bi5kaWN0aW9uYXJ5TGVuZ3Roc1tlXT0xfXRoaXMubHp3U3RhdGU9bn1yZWFkQml0cyhlKXtsZXQgdD10aGlzLmJpdHNDYWNoZWQsYT10aGlzLmNhY2hlZERhdGE7Zm9yKDt0PGU7KXtjb25zdCBlPXRoaXMuc3RyLmdldEJ5dGUoKTtpZigtMT09PWUpe3RoaXMuZW9mPSEwO3JldHVybiBudWxsfWE9YTw8OHxlO3QrPTh9dGhpcy5iaXRzQ2FjaGVkPXQtPWU7dGhpcy5jYWNoZWREYXRhPWE7dGhpcy5sYXN0Q29kZT1udWxsO3JldHVybiBhPj4+dCYoMTw8ZSktMX1yZWFkQmxvY2soKXtsZXQgZSx0LGEscj0xMDI0O2NvbnN0IG49dGhpcy5sendTdGF0ZTtpZighbilyZXR1cm47Y29uc3QgaT1uLmVhcmx5Q2hhbmdlO2xldCBzPW4ubmV4dENvZGU7Y29uc3Qgbz1uLmRpY3Rpb25hcnlWYWx1ZXMsYz1uLmRpY3Rpb25hcnlMZW5ndGhzLGw9bi5kaWN0aW9uYXJ5UHJldkNvZGVzO2xldCBoPW4uY29kZUxlbmd0aCx1PW4ucHJldkNvZGU7Y29uc3QgZD1uLmN1cnJlbnRTZXF1ZW5jZTtsZXQgZj1uLmN1cnJlbnRTZXF1ZW5jZUxlbmd0aCxnPTAscD10aGlzLmJ1ZmZlckxlbmd0aCxtPXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK3IpO2ZvcihlPTA7ZTw1MTI7ZSsrKXtjb25zdCBlPXRoaXMucmVhZEJpdHMoaCksbj1mPjA7aWYoZTwyNTYpe2RbMF09ZTtmPTF9ZWxzZXtpZighKGU+PTI1OCkpe2lmKDI1Nj09PWUpe2g9OTtzPTI1ODtmPTA7Y29udGludWV9dGhpcy5lb2Y9ITA7ZGVsZXRlIHRoaXMubHp3U3RhdGU7YnJlYWt9aWYoZTxzKXtmPWNbZV07Zm9yKHQ9Zi0xLGE9ZTt0Pj0wO3QtLSl7ZFt0XT1vW2FdO2E9bFthXX19ZWxzZSBkW2YrK109ZFswXX1pZihuKXtsW3NdPXU7Y1tzXT1jW3VdKzE7b1tzXT1kWzBdO3MrKztoPXMraSZzK2ktMT9oOjB8TWF0aC5taW4oTWF0aC5sb2cocytpKS8uNjkzMTQ3MTgwNTU5OTQ1MysxLDEyKX11PWU7Zys9ZjtpZihyPGcpe2Rve3IrPTUxMn13aGlsZShyPGcpO209dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrcil9Zm9yKHQ9MDt0PGY7dCsrKW1bcCsrXT1kW3RdfW4ubmV4dENvZGU9cztuLmNvZGVMZW5ndGg9aDtuLnByZXZDb2RlPXU7bi5jdXJyZW50U2VxdWVuY2VMZW5ndGg9Zjt0aGlzLmJ1ZmZlckxlbmd0aD1wfX10LkxaV1N0cmVhbT1MWldTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5QcmVkaWN0b3JTdHJlYW09dm9pZCAwO3ZhciByPWEoMTgpLG49YSg0KSxpPWEoMik7Y2xhc3MgUHJlZGljdG9yU3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO2lmKCEoYSBpbnN0YW5jZW9mIG4uRGljdCkpcmV0dXJuIGU7Y29uc3Qgcj10aGlzLnByZWRpY3Rvcj1hLmdldCgiUHJlZGljdG9yIil8fDE7aWYocjw9MSlyZXR1cm4gZTtpZigyIT09ciYmKHI8MTB8fHI+MTUpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKGBVbnN1cHBvcnRlZCBwcmVkaWN0b3I6ICR7cn1gKTt0aGlzLnJlYWRCbG9jaz0yPT09cj90aGlzLnJlYWRCbG9ja1RpZmY6dGhpcy5yZWFkQmxvY2tQbmc7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0O2NvbnN0IHM9dGhpcy5jb2xvcnM9YS5nZXQoIkNvbG9ycyIpfHwxLG89dGhpcy5iaXRzPWEuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iil8fDgsYz10aGlzLmNvbHVtbnM9YS5nZXQoIkNvbHVtbnMiKXx8MTt0aGlzLnBpeEJ5dGVzPXMqbys3Pj4zO3RoaXMucm93Qnl0ZXM9YypzKm8rNz4+MztyZXR1cm4gdGhpc31yZWFkQmxvY2tUaWZmKCl7Y29uc3QgZT10aGlzLnJvd0J5dGVzLHQ9dGhpcy5idWZmZXJMZW5ndGgsYT10aGlzLmVuc3VyZUJ1ZmZlcih0K2UpLHI9dGhpcy5iaXRzLG49dGhpcy5jb2xvcnMsaT10aGlzLnN0ci5nZXRCeXRlcyhlKTt0aGlzLmVvZj0haS5sZW5ndGg7aWYodGhpcy5lb2YpcmV0dXJuO2xldCBzLG89MCxjPTAsbD0wLGg9MCx1PXQ7aWYoMT09PXImJjE9PT1uKWZvcihzPTA7czxlOysrcyl7bGV0IGU9aVtzXV5vO2VePWU+PjE7ZV49ZT4+MjtlXj1lPj40O289KDEmZSk8PDc7YVt1KytdPWV9ZWxzZSBpZig4PT09cil7Zm9yKHM9MDtzPG47KytzKWFbdSsrXT1pW3NdO2Zvcig7czxlOysrcyl7YVt1XT1hW3Utbl0raVtzXTt1Kyt9fWVsc2UgaWYoMTY9PT1yKXtjb25zdCB0PTIqbjtmb3Iocz0wO3M8dDsrK3MpYVt1KytdPWlbc107Zm9yKDtzPGU7cys9Mil7Y29uc3QgZT0oKDI1NSZpW3NdKTw8OCkrKDI1NSZpW3MrMV0pKygoMjU1JmFbdS10XSk8PDgpKygyNTUmYVt1LXQrMV0pO2FbdSsrXT1lPj44JjI1NTthW3UrK109MjU1JmV9fWVsc2V7Y29uc3QgZT1uZXcgVWludDhBcnJheShuKzEpLHU9KDE8PHIpLTE7bGV0IGQ9MCxmPXQ7Y29uc3QgZz10aGlzLmNvbHVtbnM7Zm9yKHM9MDtzPGc7KytzKWZvcihsZXQgdD0wO3Q8bjsrK3Qpe2lmKGw8cil7bz1vPDw4fDI1NSZpW2QrK107bCs9OH1lW3RdPWVbdF0rKG8+PmwtcikmdTtsLT1yO2M9Yzw8cnxlW3RdO2grPXI7aWYoaD49OCl7YVtmKytdPWM+PmgtOCYyNTU7aC09OH19aD4wJiYoYVtmKytdPShjPDw4LWgpKyhvJigxPDw4LWgpLTEpKX10aGlzLmJ1ZmZlckxlbmd0aCs9ZX1yZWFkQmxvY2tQbmcoKXtjb25zdCBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLnBpeEJ5dGVzLGE9dGhpcy5zdHIuZ2V0Qnl0ZSgpLHI9dGhpcy5zdHIuZ2V0Qnl0ZXMoZSk7dGhpcy5lb2Y9IXIubGVuZ3RoO2lmKHRoaXMuZW9mKXJldHVybjtjb25zdCBuPXRoaXMuYnVmZmVyTGVuZ3RoLHM9dGhpcy5lbnN1cmVCdWZmZXIobitlKTtsZXQgbz1zLnN1YmFycmF5KG4tZSxuKTswPT09by5sZW5ndGgmJihvPW5ldyBVaW50OEFycmF5KGUpKTtsZXQgYyxsLGgsdT1uO3N3aXRjaChhKXtjYXNlIDA6Zm9yKGM9MDtjPGU7KytjKXNbdSsrXT1yW2NdO2JyZWFrO2Nhc2UgMTpmb3IoYz0wO2M8dDsrK2Mpc1t1KytdPXJbY107Zm9yKDtjPGU7KytjKXtzW3VdPXNbdS10XStyW2NdJjI1NTt1Kyt9YnJlYWs7Y2FzZSAyOmZvcihjPTA7YzxlOysrYylzW3UrK109b1tjXStyW2NdJjI1NTticmVhaztjYXNlIDM6Zm9yKGM9MDtjPHQ7KytjKXNbdSsrXT0ob1tjXT4+MSkrcltjXTtmb3IoO2M8ZTsrK2Mpe3NbdV09KG9bY10rc1t1LXRdPj4xKStyW2NdJjI1NTt1Kyt9YnJlYWs7Y2FzZSA0OmZvcihjPTA7Yzx0OysrYyl7bD1vW2NdO2g9cltjXTtzW3UrK109bCtofWZvcig7YzxlOysrYyl7bD1vW2NdO2NvbnN0IGU9b1tjLXRdLGE9c1t1LXRdLG49YStsLWU7bGV0IGk9bi1hO2k8MCYmKGk9LWkpO2xldCBkPW4tbDtkPDAmJihkPS1kKTtsZXQgZj1uLWU7ZjwwJiYoZj0tZik7aD1yW2NdO3NbdSsrXT1pPD1kJiZpPD1mP2EraDpkPD1mP2wraDplK2h9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcihgVW5zdXBwb3J0ZWQgcHJlZGljdG9yOiAke2F9YCl9dGhpcy5idWZmZXJMZW5ndGgrPWV9fXQuUHJlZGljdG9yU3RyZWFtPVByZWRpY3RvclN0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlJ1bkxlbmd0aFN0cmVhbT12b2lkIDA7dmFyIHI9YSgxOCk7Y2xhc3MgUnVuTGVuZ3RoU3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0KXtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3R9cmVhZEJsb2NrKCl7Y29uc3QgZT10aGlzLnN0ci5nZXRCeXRlcygyKTtpZighZXx8ZS5sZW5ndGg8Mnx8MTI4PT09ZVswXSl7dGhpcy5lb2Y9ITA7cmV0dXJufWxldCB0LGE9dGhpcy5idWZmZXJMZW5ndGgscj1lWzBdO2lmKHI8MTI4KXt0PXRoaXMuZW5zdXJlQnVmZmVyKGErcisxKTt0W2ErK109ZVsxXTtpZihyPjApe2NvbnN0IGU9dGhpcy5zdHIuZ2V0Qnl0ZXMocik7dC5zZXQoZSxhKTthKz1yfX1lbHNle3I9MjU3LXI7Y29uc3Qgbj1lWzFdO3Q9dGhpcy5lbnN1cmVCdWZmZXIoYStyKzEpO2ZvcihsZXQgZT0wO2U8cjtlKyspdFthKytdPW59dGhpcy5idWZmZXJMZW5ndGg9YX19dC5SdW5MZW5ndGhTdHJlYW09UnVuTGVuZ3RoU3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRm9udD10LkVycm9yRm9udD12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMzUpLGk9YSgzOCkscz1hKDQwKSxvPWEoMzkpLGM9YSgzNyksbD1hKDQxKSxoPWEoNDIpLHU9YSg0MyksZD1hKDQ0KSxmPWEoNDUpLGc9YSg0NikscD1hKDE0KSxtPWEoNDcpLGI9YSgzKSx5PWEoOCksdz1hKDQ4KTtjb25zdCBTPVtbNTczNDQsNjM3NDNdLFsxMDQ4NTc2LDExMTQxMDldXSx4PTFlMyxDPVsiYXNjZW50IiwiYmJveCIsImJsYWNrIiwiYm9sZCIsImNoYXJQcm9jT3BlcmF0b3JMaXN0IiwiY29tcG9zaXRlIiwiY3NzRm9udEluZm8iLCJkYXRhIiwiZGVmYXVsdFZNZXRyaWNzIiwiZGVmYXVsdFdpZHRoIiwiZGVzY2VudCIsImZhbGxiYWNrTmFtZSIsImZvbnRNYXRyaXgiLCJpc0ludmFsaWRQREZqc0ZvbnQiLCJpc1R5cGUzRm9udCIsIml0YWxpYyIsImxvYWRlZE5hbWUiLCJtaW1ldHlwZSIsIm1pc3NpbmdGaWxlIiwibmFtZSIsInJlbWVhc3VyZSIsInN1YnR5cGUiLCJzeXN0ZW1Gb250SW5mbyIsInR5cGUiLCJ2ZXJ0aWNhbCJdLGs9WyJjTWFwIiwiZGVmYXVsdEVuY29kaW5nIiwiZGlmZmVyZW5jZXMiLCJpc01vbm9zcGFjZSIsImlzU2VyaWZGb250IiwiaXNTeW1ib2xpY0ZvbnQiLCJzZWFjTWFwIiwidG9Gb250Q2hhciIsInRvVW5pY29kZSIsInZtZXRyaWNzIiwid2lkdGhzIl07ZnVuY3Rpb24gYWRqdXN0V2lkdGhzKGUpe2lmKCFlLmZvbnRNYXRyaXgpcmV0dXJuO2lmKGUuZm9udE1hdHJpeFswXT09PXIuRk9OVF9JREVOVElUWV9NQVRSSVhbMF0pcmV0dXJuO2NvbnN0IHQ9LjAwMS9lLmZvbnRNYXRyaXhbMF0sYT1lLndpZHRocztmb3IoY29uc3QgZSBpbiBhKWFbZV0qPXQ7ZS5kZWZhdWx0V2lkdGgqPXR9ZnVuY3Rpb24gYW1lbmRGYWxsYmFja1RvVW5pY29kZShlKXtpZighZS5mYWxsYmFja1RvVW5pY29kZSlyZXR1cm47aWYoZS50b1VuaWNvZGUgaW5zdGFuY2VvZiBoLklkZW50aXR5VG9Vbmljb2RlTWFwKXJldHVybjtjb25zdCB0PVtdO2Zvcihjb25zdCBhIGluIGUuZmFsbGJhY2tUb1VuaWNvZGUpZS50b1VuaWNvZGUuaGFzKGEpfHwodFthXT1lLmZhbGxiYWNrVG9Vbmljb2RlW2FdKTt0Lmxlbmd0aD4wJiZlLnRvVW5pY29kZS5hbWVuZCh0KX1jbGFzcyBHbHlwaHtjb25zdHJ1Y3RvcihlLHQsYSxyLG4saSxzLG8sYyl7dGhpcy5vcmlnaW5hbENoYXJDb2RlPWU7dGhpcy5mb250Q2hhcj10O3RoaXMudW5pY29kZT1hO3RoaXMuYWNjZW50PXI7dGhpcy53aWR0aD1uO3RoaXMudm1ldHJpYz1pO3RoaXMub3BlcmF0b3JMaXN0SWQ9czt0aGlzLmlzU3BhY2U9bzt0aGlzLmlzSW5Gb250PWN9Z2V0IGNhdGVnb3J5KCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImNhdGVnb3J5IiwoMCxzLmdldENoYXJVbmljb2RlQ2F0ZWdvcnkpKHRoaXMudW5pY29kZSksITApfX1mdW5jdGlvbiBpbnQxNihlLHQpe3JldHVybihlPDw4KSt0fWZ1bmN0aW9uIHdyaXRlU2lnbmVkSW50MTYoZSx0LGEpe2VbdCsxXT1hO2VbdF09YT4+Pjh9ZnVuY3Rpb24gc2lnbmVkSW50MTYoZSx0KXtjb25zdCBhPShlPDw4KSt0O3JldHVybiAzMjc2OCZhP2EtNjU1MzY6YX1mdW5jdGlvbiBzdHJpbmcxNihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj44JjI1NSwyNTUmZSl9ZnVuY3Rpb24gc2FmZVN0cmluZzE2KGUpe2U+MzI3Njc/ZT0zMjc2NzplPC0zMjc2OCYmKGU9LTMyNzY4KTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj44JjI1NSwyNTUmZSl9ZnVuY3Rpb24gaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGUpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuInR0Y2YiPT09KDAsci5ieXRlc1RvU3RyaW5nKSh0KX1mdW5jdGlvbiBnZXRGb250RmlsZVR5cGUoZSx7dHlwZTp0LHN1YnR5cGU6YSxjb21wb3NpdGU6bn0pe2xldCBpLHM7aWYoZnVuY3Rpb24gaXNUcnVlVHlwZUZpbGUoZSl7Y29uc3QgdD1lLnBlZWtCeXRlcyg0KTtyZXR1cm4gNjU1MzY9PT0oMCxiLnJlYWRVaW50MzIpKHQsMCl8fCJ0cnVlIj09PSgwLHIuYnl0ZXNUb1N0cmluZykodCl9KGUpfHxpc1RydWVUeXBlQ29sbGVjdGlvbkZpbGUoZSkpaT1uPyJDSURGb250VHlwZTIiOiJUcnVlVHlwZSI7ZWxzZSBpZihmdW5jdGlvbiBpc09wZW5UeXBlRmlsZShlKXtjb25zdCB0PWUucGVla0J5dGVzKDQpO3JldHVybiJPVFRPIj09PSgwLHIuYnl0ZXNUb1N0cmluZykodCl9KGUpKWk9bj8iQ0lERm9udFR5cGUyIjoiT3BlblR5cGUiO2Vsc2UgaWYoZnVuY3Rpb24gaXNUeXBlMUZpbGUoZSl7Y29uc3QgdD1lLnBlZWtCeXRlcygyKTtyZXR1cm4gMzc9PT10WzBdJiYzMz09PXRbMV18fDEyOD09PXRbMF0mJjE9PT10WzFdfShlKSlpPW4/IkNJREZvbnRUeXBlMCI6Ik1NVHlwZTEiPT09dD8iTU1UeXBlMSI6IlR5cGUxIjtlbHNlIGlmKGZ1bmN0aW9uIGlzQ0ZGRmlsZShlKXtjb25zdCB0PWUucGVla0J5dGVzKDQpO3JldHVybiB0WzBdPj0xJiZ0WzNdPj0xJiZ0WzNdPD00fShlKSlpZihuKXtpPSJDSURGb250VHlwZTAiO3M9IkNJREZvbnRUeXBlMEMifWVsc2V7aT0iTU1UeXBlMSI9PT10PyJNTVR5cGUxIjoiVHlwZTEiO3M9IlR5cGUxQyJ9ZWxzZXsoMCxyLndhcm4pKCJnZXRGb250RmlsZVR5cGU6IFVuYWJsZSB0byBkZXRlY3QgY29ycmVjdCBmb250IGZpbGUgVHlwZS9TdWJ0eXBlLiIpO2k9dDtzPWF9cmV0dXJuW2ksc119ZnVuY3Rpb24gYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChlLHQpe2Zvcihjb25zdCBhIGluIHQpZVsrYV09dFthXX1mdW5jdGlvbiBidWlsZFRvRm9udENoYXIoZSx0LGEpe2NvbnN0IHI9W107bGV0IG47Zm9yKGxldCBhPTAsaT1lLmxlbmd0aDthPGk7YSsrKXtuPSgwLHMuZ2V0VW5pY29kZUZvckdseXBoKShlW2FdLHQpOy0xIT09biYmKHJbYV09bil9Zm9yKGNvbnN0IGUgaW4gYSl7bj0oMCxzLmdldFVuaWNvZGVGb3JHbHlwaCkoYVtlXSx0KTstMSE9PW4mJihyWytlXT1uKX1yZXR1cm4gcn1mdW5jdGlvbiBpc01hY05hbWVSZWNvcmQoZSl7cmV0dXJuIDE9PT1lLnBsYXRmb3JtJiYwPT09ZS5lbmNvZGluZyYmMD09PWUubGFuZ3VhZ2V9ZnVuY3Rpb24gaXNXaW5OYW1lUmVjb3JkKGUpe3JldHVybiAzPT09ZS5wbGF0Zm9ybSYmMT09PWUuZW5jb2RpbmcmJjEwMzM9PT1lLmxhbmd1YWdlfWZ1bmN0aW9uIGNvbnZlcnRDaWRTdHJpbmcoZSx0LGE9ITEpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybiB0LmNoYXJDb2RlQXQoMCk7Y2FzZSAyOnJldHVybiB0LmNoYXJDb2RlQXQoMCk8PDh8dC5jaGFyQ29kZUF0KDEpfWNvbnN0IG49YFVuc3VwcG9ydGVkIENJRCBzdHJpbmcgKGNoYXJDb2RlICR7ZX0pOiAiJHt0fSIuYDtpZihhKXRocm93IG5ldyByLkZvcm1hdEVycm9yKG4pOygwLHIud2Fybikobik7cmV0dXJuIHR9ZnVuY3Rpb24gYWRqdXN0TWFwcGluZyhlLHQsYSxuKXtjb25zdCBpPU9iamVjdC5jcmVhdGUobnVsbCkscz1uZXcgTWFwLG89W10sYz1uZXcgU2V0O2xldCBsPTA7bGV0IGg9U1tsXVswXSx1PVNbbF1bMV07Zm9yKGxldCBmIGluIGUpe2Z8PTA7bGV0IGc9ZVtmXTtpZighdChnKSljb250aW51ZTtpZihoPnUpe2wrKztpZihsPj1TLmxlbmd0aCl7KDAsci53YXJuKSgiUmFuIG91dCBvZiBzcGFjZSBpbiBmb250IHByaXZhdGUgdXNlIGFyZWEuIik7YnJlYWt9aD1TW2xdWzBdO3U9U1tsXVsxXX1jb25zdCBwPWgrKzswPT09ZyYmKGc9YSk7bGV0IG09bi5nZXQoZik7InN0cmluZyI9PXR5cGVvZiBtJiYobT1tLmNvZGVQb2ludEF0KDApKTtpZihtJiYhKGQ9bSxTWzBdWzBdPD1kJiZkPD1TWzBdWzFdfHxTWzFdWzBdPD1kJiZkPD1TWzFdWzFdKSYmIWMuaGFzKGcpKXtzLnNldChtLGcpO2MuYWRkKGcpfWlbcF09ZztvW2ZdPXB9dmFyIGQ7cmV0dXJue3RvRm9udENoYXI6byxjaGFyQ29kZVRvR2x5cGhJZDppLHRvVW5pY29kZUV4dHJhTWFwOnMsbmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZTpofX1mdW5jdGlvbiBjcmVhdGVDbWFwVGFibGUoZSx0LGEpe2NvbnN0IG49ZnVuY3Rpb24gZ2V0UmFuZ2VzKGUsdCxhKXtjb25zdCByPVtdO2Zvcihjb25zdCB0IGluIGUpZVt0XT49YXx8ci5wdXNoKHtmb250Q2hhckNvZGU6MHx0LGdseXBoSWQ6ZVt0XX0pO2lmKHQpZm9yKGNvbnN0W2Usbl1vZiB0KW4+PWF8fHIucHVzaCh7Zm9udENoYXJDb2RlOmUsZ2x5cGhJZDpufSk7MD09PXIubGVuZ3RoJiZyLnB1c2goe2ZvbnRDaGFyQ29kZTowLGdseXBoSWQ6MH0pO3Iuc29ydCgoZnVuY3Rpb24gZm9udEdldFJhbmdlc1NvcnQoZSx0KXtyZXR1cm4gZS5mb250Q2hhckNvZGUtdC5mb250Q2hhckNvZGV9KSk7Y29uc3Qgbj1bXSxpPXIubGVuZ3RoO2ZvcihsZXQgZT0wO2U8aTspe2NvbnN0IHQ9cltlXS5mb250Q2hhckNvZGUsYT1bcltlXS5nbHlwaElkXTsrK2U7bGV0IHM9dDtmb3IoO2U8aSYmcysxPT09cltlXS5mb250Q2hhckNvZGU7KXthLnB1c2gocltlXS5nbHlwaElkKTsrK3M7KytlO2lmKDY1NTM1PT09cylicmVha31uLnB1c2goW3QscyxhXSl9cmV0dXJuIG59KGUsdCxhKSxpPW4uYXQoLTEpWzFdPjY1NTM1PzI6MTtsZXQgcyxvLGMsbCxoPSJcMFwwIitzdHJpbmcxNihpKSsiXDADXDABIisoMCxyLnN0cmluZzMyKSg0KzgqaSk7Zm9yKHM9bi5sZW5ndGgtMTtzPj0wJiYhKG5bc11bMF08PTY1NTM1KTstLXMpO2NvbnN0IHU9cysxO25bc11bMF08NjU1MzUmJjY1NTM1PT09bltzXVsxXSYmKG5bc11bMV09NjU1MzQpO2NvbnN0IGQ9bltzXVsxXTw2NTUzNT8xOjAsZj11K2QsZz1tLk9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKGYsMik7bGV0IHAsYix5LHcsUz0iIix4PSIiLEM9IiIsaz0iIix2PSIiLEY9MDtmb3Iocz0wLG89dTtzPG87cysrKXtwPW5bc107Yj1wWzBdO3k9cFsxXTtTKz1zdHJpbmcxNihiKTt4Kz1zdHJpbmcxNih5KTt3PXBbMl07bGV0IGU9ITA7Zm9yKGM9MSxsPXcubGVuZ3RoO2M8bDsrK2MpaWYod1tjXSE9PXdbYy0xXSsxKXtlPSExO2JyZWFrfWlmKGUpe0MrPXN0cmluZzE2KHdbMF0tYiY2NTUzNSk7ays9c3RyaW5nMTYoMCl9ZWxzZXtjb25zdCBlPTIqKGYtcykrMipGO0YrPXktYisxO0MrPXN0cmluZzE2KDApO2srPXN0cmluZzE2KGUpO2ZvcihjPTAsbD13Lmxlbmd0aDtjPGw7KytjKXYrPXN0cmluZzE2KHdbY10pfX1pZihkPjApe3grPSLDv8O/IjtTKz0iw7/DvyI7Qys9IlwwASI7ays9IlwwXDAifWNvbnN0IE89IlwwXDAiK3N0cmluZzE2KDIqZikrc3RyaW5nMTYoZy5yYW5nZSkrc3RyaW5nMTYoZy5lbnRyeSkrc3RyaW5nMTYoZy5yYW5nZVNoaWZ0KSt4KyJcMFwwIitTK0Mrayt2O2xldCBUPSIiLE09IiI7aWYoaT4xKXtoKz0iXDADXDBcbiIrKDAsci5zdHJpbmczMikoNCs4KmkrNCtPLmxlbmd0aCk7VD0iIjtmb3Iocz0wLG89bi5sZW5ndGg7czxvO3MrKyl7cD1uW3NdO2I9cFswXTt3PXBbMl07bGV0IGU9d1swXTtmb3IoYz0xLGw9dy5sZW5ndGg7YzxsOysrYylpZih3W2NdIT09d1tjLTFdKzEpe3k9cFswXStjLTE7VCs9KDAsci5zdHJpbmczMikoYikrKDAsci5zdHJpbmczMikoeSkrKDAsci5zdHJpbmczMikoZSk7Yj15KzE7ZT13W2NdfVQrPSgwLHIuc3RyaW5nMzIpKGIpKygwLHIuc3RyaW5nMzIpKHBbMV0pKygwLHIuc3RyaW5nMzIpKGUpfU09IlwwXGZcMFwwIisoMCxyLnN0cmluZzMyKShULmxlbmd0aCsxNikrIlwwXDBcMFwwIisoMCxyLnN0cmluZzMyKShULmxlbmd0aC8xMil9cmV0dXJuIGgrIlwwBCIrc3RyaW5nMTYoTy5sZW5ndGgrNCkrTytNK1R9ZnVuY3Rpb24gY3JlYXRlT1MyVGFibGUoZSx0LGEpe2F8fD17dW5pdHNQZXJFbTowLHlNYXg6MCx5TWluOjAsYXNjZW50OjAsZGVzY2VudDowfTtsZXQgbj0wLGk9MCxvPTAsYz0wLGw9bnVsbCxoPTAsdT0tMTtpZih0KXtmb3IobGV0IGUgaW4gdCl7ZXw9MDsobD5lfHwhbCkmJihsPWUpO2g8ZSYmKGg9ZSk7dT0oMCxzLmdldFVuaWNvZGVSYW5nZUZvcikoZSx1KTtpZih1PDMyKW58PTE8PHU7ZWxzZSBpZih1PDY0KWl8PTE8PHUtMzI7ZWxzZSBpZih1PDk2KW98PTE8PHUtNjQ7ZWxzZXtpZighKHU8MTIzKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVW5pY29kZSByYW5nZXMgQml0cyA+IDEyMyBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzYWdlIik7Y3w9MTw8dS05Nn19aD42NTUzNSYmKGg9NjU1MzUpfWVsc2V7bD0wO2g9MjU1fWNvbnN0IGQ9ZS5iYm94fHxbMCwwLDAsMF0sZj1hLnVuaXRzUGVyRW18fDEvKGUuZm9udE1hdHJpeHx8ci5GT05UX0lERU5USVRZX01BVFJJWClbMF0sZz1lLmFzY2VudFNjYWxlZD8xOmYveCxwPWEuYXNjZW50fHxNYXRoLnJvdW5kKGcqKGUuYXNjZW50fHxkWzNdKSk7bGV0IG09YS5kZXNjZW50fHxNYXRoLnJvdW5kKGcqKGUuZGVzY2VudHx8ZFsxXSkpO20+MCYmZS5kZXNjZW50PjAmJmRbMV08MCYmKG09LW0pO2NvbnN0IGI9YS55TWF4fHxwLHk9LWEueU1pbnx8LW07cmV0dXJuIlwwAwIkAcO0XDAFXDBcMALCigLCu1wwXDBcMMKMAsKKAsK7XDBcMAHDn1x4MDAxAQJcMFwwXDBcMAYiK1N0cmluZy5mcm9tQ2hhckNvZGUoZS5maXhlZFBpdGNoPzk6MCkrIlwwXDBcMFwwXDBcMCIrKDAsci5zdHJpbmczMikobikrKDAsci5zdHJpbmczMikoaSkrKDAsci5zdHJpbmczMikobykrKDAsci5zdHJpbmczMikoYykrIioyMSoiK3N0cmluZzE2KGUuaXRhbGljQW5nbGU/MTowKStzdHJpbmcxNihsfHxlLmZpcnN0Q2hhcikrc3RyaW5nMTYoaHx8ZS5sYXN0Q2hhcikrc3RyaW5nMTYocCkrc3RyaW5nMTYobSkrIlwwZCIrc3RyaW5nMTYoYikrc3RyaW5nMTYoeSkrIlwwXDBcMFwwXDBcMFwwXDAiK3N0cmluZzE2KGUueEhlaWdodCkrc3RyaW5nMTYoZS5jYXBIZWlnaHQpK3N0cmluZzE2KDApK3N0cmluZzE2KGx8fGUuZmlyc3RDaGFyKSsiXDADIn1mdW5jdGlvbiBjcmVhdGVQb3N0VGFibGUoZSl7Y29uc3QgdD1NYXRoLmZsb29yKDY1NTM2KmUuaXRhbGljQW5nbGUpO3JldHVybiJcMANcMFwwIisoMCxyLnN0cmluZzMyKSh0KSsiXDBcMFwwXDAiKygwLHIuc3RyaW5nMzIpKGUuZml4ZWRQaXRjaD8xOjApKyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCJ9ZnVuY3Rpb24gY3JlYXRlUG9zdHNjcmlwdE5hbWUoZSl7cmV0dXJuIGUucmVwbGFjZUFsbCgvW15ceDIxLVx4N0VdfFtbXF0oKXt9PD4vJV0vZywiIikuc2xpY2UoMCw2Myl9ZnVuY3Rpb24gY3JlYXRlTmFtZVRhYmxlKGUsdCl7dHx8KHQ9W1tdLFtdXSk7Y29uc3QgYT1bdFswXVswXXx8Ik9yaWdpbmFsIGxpY2VuY2UiLHRbMF1bMV18fGUsdFswXVsyXXx8IlVua25vd24iLHRbMF1bM118fCJ1bmlxdWVJRCIsdFswXVs0XXx8ZSx0WzBdWzVdfHwiVmVyc2lvbiAwLjExIix0WzBdWzZdfHxjcmVhdGVQb3N0c2NyaXB0TmFtZShlKSx0WzBdWzddfHwiVW5rbm93biIsdFswXVs4XXx8IlVua25vd24iLHRbMF1bOV18fCJVbmtub3duIl0scj1bXTtsZXQgbixpLHMsbyxjO2ZvcihuPTAsaT1hLmxlbmd0aDtuPGk7bisrKXtjPXRbMV1bbl18fGFbbl07Y29uc3QgZT1bXTtmb3Iocz0wLG89Yy5sZW5ndGg7czxvO3MrKyllLnB1c2goc3RyaW5nMTYoYy5jaGFyQ29kZUF0KHMpKSk7ci5wdXNoKGUuam9pbigiIikpfWNvbnN0IGw9W2Escl0saD1bIlwwASIsIlwwAyJdLHU9WyJcMFwwIiwiXDABIl0sZD1bIlwwXDAiLCIEXHQiXSxmPWEubGVuZ3RoKmgubGVuZ3RoO2xldCBnPSJcMFwwIitzdHJpbmcxNihmKStzdHJpbmcxNigxMipmKzYpLHA9MDtmb3Iobj0wLGk9aC5sZW5ndGg7bjxpO24rKyl7Y29uc3QgZT1sW25dO2ZvcihzPTAsbz1lLmxlbmd0aDtzPG87cysrKXtjPWVbc107Zys9aFtuXSt1W25dK2Rbbl0rc3RyaW5nMTYocykrc3RyaW5nMTYoYy5sZW5ndGgpK3N0cmluZzE2KHApO3ArPWMubGVuZ3RofX1nKz1hLmpvaW4oIiIpK3Iuam9pbigiIik7cmV0dXJuIGd9dC5Gb250PWNsYXNzIEZvbnR7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMubmFtZT1lO3RoaXMucHNOYW1lPW51bGw7dGhpcy5taW1ldHlwZT1udWxsO3RoaXMuZGlzYWJsZUZvbnRGYWNlPSExO3RoaXMubG9hZGVkTmFtZT1hLmxvYWRlZE5hbWU7dGhpcy5pc1R5cGUzRm9udD1hLmlzVHlwZTNGb250O3RoaXMubWlzc2luZ0ZpbGU9ITE7dGhpcy5jc3NGb250SW5mbz1hLmNzc0ZvbnRJbmZvO3RoaXMuX2NoYXJzQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLl9nbHlwaENhY2hlPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG49ISEoYS5mbGFncyZpLkZvbnRGbGFncy5TZXJpZik7aWYoIW4mJiFhLmlzU2ltdWxhdGVkRmxhZ3Mpe2NvbnN0IHQ9ZS5yZXBsYWNlQWxsKC9bLF9dL2csIi0iKS5zcGxpdCgiLSIpWzBdLGE9KDAsbC5nZXRTZXJpZkZvbnRzKSgpO2Zvcihjb25zdCBlIG9mIHQuc3BsaXQoIisiKSlpZihhW2VdKXtuPSEwO2JyZWFrfX10aGlzLmlzU2VyaWZGb250PW47dGhpcy5pc1N5bWJvbGljRm9udD0hIShhLmZsYWdzJmkuRm9udEZsYWdzLlN5bWJvbGljKTt0aGlzLmlzTW9ub3NwYWNlPSEhKGEuZmxhZ3MmaS5Gb250RmxhZ3MuRml4ZWRQaXRjaCk7bGV0e3R5cGU6cyxzdWJ0eXBlOm99PWE7dGhpcy50eXBlPXM7dGhpcy5zdWJ0eXBlPW87dGhpcy5zeXN0ZW1Gb250SW5mbz1hLnN5c3RlbUZvbnRJbmZvO2NvbnN0IGM9ZS5tYXRjaCgvXkludmFsaWRQREZqc0ZvbnRfKC4qKV9cZCskLyk7dGhpcy5pc0ludmFsaWRQREZqc0ZvbnQ9ISFjO3RoaXMuaXNJbnZhbGlkUERGanNGb250P3RoaXMuZmFsbGJhY2tOYW1lPWNbMV06dGhpcy5pc01vbm9zcGFjZT90aGlzLmZhbGxiYWNrTmFtZT0ibW9ub3NwYWNlIjp0aGlzLmlzU2VyaWZGb250P3RoaXMuZmFsbGJhY2tOYW1lPSJzZXJpZiI6dGhpcy5mYWxsYmFja05hbWU9InNhbnMtc2VyaWYiO2lmKHRoaXMuc3lzdGVtRm9udEluZm8/Lmd1ZXNzRmFsbGJhY2spe3RoaXMuc3lzdGVtRm9udEluZm8uZ3Vlc3NGYWxsYmFjaz0hMTt0aGlzLnN5c3RlbUZvbnRJbmZvLmNzcys9YCwke3RoaXMuZmFsbGJhY2tOYW1lfWB9dGhpcy5kaWZmZXJlbmNlcz1hLmRpZmZlcmVuY2VzO3RoaXMud2lkdGhzPWEud2lkdGhzO3RoaXMuZGVmYXVsdFdpZHRoPWEuZGVmYXVsdFdpZHRoO3RoaXMuY29tcG9zaXRlPWEuY29tcG9zaXRlO3RoaXMuY01hcD1hLmNNYXA7dGhpcy5jYXBIZWlnaHQ9YS5jYXBIZWlnaHQveDt0aGlzLmFzY2VudD1hLmFzY2VudC94O3RoaXMuZGVzY2VudD1hLmRlc2NlbnQveDt0aGlzLmxpbmVIZWlnaHQ9dGhpcy5hc2NlbnQtdGhpcy5kZXNjZW50O3RoaXMuZm9udE1hdHJpeD1hLmZvbnRNYXRyaXg7dGhpcy5iYm94PWEuYmJveDt0aGlzLmRlZmF1bHRFbmNvZGluZz1hLmRlZmF1bHRFbmNvZGluZzt0aGlzLnRvVW5pY29kZT1hLnRvVW5pY29kZTt0aGlzLnRvRm9udENoYXI9W107aWYoIlR5cGUzIj09PWEudHlwZSl7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKXRoaXMudG9Gb250Q2hhcltlXT10aGlzLmRpZmZlcmVuY2VzW2VdfHxhLmRlZmF1bHRFbmNvZGluZ1tlXTtyZXR1cm59dGhpcy5jaWRFbmNvZGluZz1hLmNpZEVuY29kaW5nfHwiIjt0aGlzLnZlcnRpY2FsPSEhYS52ZXJ0aWNhbDtpZih0aGlzLnZlcnRpY2FsKXt0aGlzLnZtZXRyaWNzPWEudm1ldHJpY3M7dGhpcy5kZWZhdWx0Vk1ldHJpY3M9YS5kZWZhdWx0Vk1ldHJpY3N9aWYoIXR8fHQuaXNFbXB0eSl7dCYmKDAsci53YXJuKSgnRm9udCBmaWxlIGlzIGVtcHR5IGluICInK2UrJyIgKCcrdGhpcy5sb2FkZWROYW1lKyIpIik7dGhpcy5mYWxsYmFja1RvU3lzdGVtRm9udChhKTtyZXR1cm59W3Msb109Z2V0Rm9udEZpbGVUeXBlKHQsYSk7cz09PXRoaXMudHlwZSYmbz09PXRoaXMuc3VidHlwZXx8KDAsci5pbmZvKShgSW5jb25zaXN0ZW50IGZvbnQgZmlsZSBUeXBlL1N1YlR5cGUsIGV4cGVjdGVkOiAke3RoaXMudHlwZX0vJHt0aGlzLnN1YnR5cGV9IGJ1dCBmb3VuZDogJHtzfS8ke299LmApO2xldCBoO3RyeXtzd2l0Y2gocyl7Y2FzZSJNTVR5cGUxIjooMCxyLmluZm8pKCJNTVR5cGUxIGZvbnQgKCIrZSsiKSwgZmFsbGluZyBiYWNrIHRvIFR5cGUxLiIpO2Nhc2UiVHlwZTEiOmNhc2UiQ0lERm9udFR5cGUwIjp0aGlzLm1pbWV0eXBlPSJmb250L29wZW50eXBlIjtjb25zdCBuPSJUeXBlMUMiPT09b3x8IkNJREZvbnRUeXBlMEMiPT09bz9uZXcgdS5DRkZGb250KHQsYSk6bmV3IHcuVHlwZTFGb250KGUsdCxhKTthZGp1c3RXaWR0aHMoYSk7aD10aGlzLmNvbnZlcnQoZSxuLGEpO2JyZWFrO2Nhc2UiT3BlblR5cGUiOmNhc2UiVHJ1ZVR5cGUiOmNhc2UiQ0lERm9udFR5cGUyIjp0aGlzLm1pbWV0eXBlPSJmb250L29wZW50eXBlIjtoPXRoaXMuY2hlY2tBbmRSZXBhaXIoZSx0LGEpO2lmKHRoaXMuaXNPcGVuVHlwZSl7YWRqdXN0V2lkdGhzKGEpO3M9Ik9wZW5UeXBlIn1icmVhaztkZWZhdWx0OnRocm93IG5ldyByLkZvcm1hdEVycm9yKGBGb250ICR7c30gaXMgbm90IHN1cHBvcnRlZGApfX1jYXRjaChlKXsoMCxyLndhcm4pKGUpO3RoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoYSk7cmV0dXJufWFtZW5kRmFsbGJhY2tUb1VuaWNvZGUoYSk7dGhpcy5kYXRhPWg7dGhpcy50eXBlPXM7dGhpcy5zdWJ0eXBlPW87dGhpcy5mb250TWF0cml4PWEuZm9udE1hdHJpeDt0aGlzLndpZHRocz1hLndpZHRoczt0aGlzLmRlZmF1bHRXaWR0aD1hLmRlZmF1bHRXaWR0aDt0aGlzLnRvVW5pY29kZT1hLnRvVW5pY29kZTt0aGlzLnNlYWNNYXA9YS5zZWFjTWFwfWdldCByZW5kZXJlcigpe2NvbnN0IGU9ZC5Gb250UmVuZGVyZXJGYWN0b3J5LmNyZWF0ZSh0aGlzLGkuU0VBQ19BTkFMWVNJU19FTkFCTEVEKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywicmVuZGVyZXIiLGUpfWV4cG9ydERhdGEoZT0hMSl7Y29uc3QgdD1lP1suLi5DLC4uLmtdOkMsYT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCByLG47Zm9yKHIgb2YgdCl7bj10aGlzW3JdO3ZvaWQgMCE9PW4mJihhW3JdPW4pfXJldHVybiBhfWZhbGxiYWNrVG9TeXN0ZW1Gb250KGUpe3RoaXMubWlzc2luZ0ZpbGU9ITA7Y29uc3R7bmFtZTp0LHR5cGU6YX09dGhpcztsZXQgcj0oMCxpLm5vcm1hbGl6ZUZvbnROYW1lKSh0KTtjb25zdCBuPSgwLGwuZ2V0U3RkRm9udE1hcCkoKSx1PSgwLGwuZ2V0Tm9uU3RkRm9udE1hcCkoKSxkPSEhbltyXSxnPSEoIXVbcl18fCFuW3Vbcl1dKTtyPW5bcl18fHVbcl18fHI7Y29uc3QgcD0oMCxmLmdldEZvbnRCYXNpY01ldHJpY3MpKClbcl07aWYocCl7aXNOYU4odGhpcy5hc2NlbnQpJiYodGhpcy5hc2NlbnQ9cC5hc2NlbnQveCk7aXNOYU4odGhpcy5kZXNjZW50KSYmKHRoaXMuZGVzY2VudD1wLmRlc2NlbnQveCk7aXNOYU4odGhpcy5jYXBIZWlnaHQpJiYodGhpcy5jYXBIZWlnaHQ9cC5jYXBIZWlnaHQveCl9dGhpcy5ib2xkPS9ib2xkL2dpLnRlc3Qocik7dGhpcy5pdGFsaWM9L29ibGlxdWV8aXRhbGljL2dpLnRlc3Qocik7dGhpcy5ibGFjaz0vQmxhY2svZy50ZXN0KHQpO2NvbnN0IG09L05hcnJvdy9nLnRlc3QodCk7dGhpcy5yZW1lYXN1cmU9KCFkfHxtKSYmT2JqZWN0LmtleXModGhpcy53aWR0aHMpLmxlbmd0aD4wO2lmKChkfHxnKSYmIkNJREZvbnRUeXBlMiI9PT1hJiZ0aGlzLmNpZEVuY29kaW5nLnN0YXJ0c1dpdGgoIklkZW50aXR5LSIpKXtjb25zdCBhPWUuY2lkVG9HaWRNYXAscj1bXTthcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKHIsKDAsbC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpKCkpOy9BcmlhbC0/QmxhY2svaS50ZXN0KHQpP2FwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAociwoMCxsLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaykoKSk6L0NhbGlicmkvaS50ZXN0KHQpJiZhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKHIsKDAsbC5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmkpKCkpO2lmKGEpe2Zvcihjb25zdCBlIGluIHIpe2NvbnN0IHQ9cltlXTt2b2lkIDAhPT1hW3RdJiYoclsrZV09YVt0XSl9YS5sZW5ndGghPT10aGlzLnRvVW5pY29kZS5sZW5ndGgmJmUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAmJnRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcCYmdGhpcy50b1VuaWNvZGUuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtjb25zdCBuPXJbZV07dm9pZCAwPT09YVtuXSYmKHJbK2VdPXQpfSkpfXRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcHx8dGhpcy50b1VuaWNvZGUuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtyWytlXT10fSkpO3RoaXMudG9Gb250Q2hhcj1yO3RoaXMudG9Vbmljb2RlPW5ldyBoLlRvVW5pY29kZU1hcChyKX1lbHNlIGlmKC9TeW1ib2wvaS50ZXN0KHIpKXRoaXMudG9Gb250Q2hhcj1idWlsZFRvRm9udENoYXIoYy5TeW1ib2xTZXRFbmNvZGluZywoMCxvLmdldEdseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyk7ZWxzZSBpZigvRGluZ2JhdHMvaS50ZXN0KHIpKXRoaXMudG9Gb250Q2hhcj1idWlsZFRvRm9udENoYXIoYy5aYXBmRGluZ2JhdHNFbmNvZGluZywoMCxvLmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSkoKSx0aGlzLmRpZmZlcmVuY2VzKTtlbHNlIGlmKGQpe2NvbnN0IGU9YnVpbGRUb0ZvbnRDaGFyKHRoaXMuZGVmYXVsdEVuY29kaW5nLCgwLG8uZ2V0R2x5cGhzVW5pY29kZSkoKSx0aGlzLmRpZmZlcmVuY2VzKTsiQ0lERm9udFR5cGUyIiE9PWF8fHRoaXMuY2lkRW5jb2Rpbmcuc3RhcnRzV2l0aCgiSWRlbnRpdHktIil8fHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcHx8dGhpcy50b1VuaWNvZGUuZm9yRWFjaCgoZnVuY3Rpb24odCxhKXtlWyt0XT1hfSkpO3RoaXMudG9Gb250Q2hhcj1lfWVsc2V7Y29uc3QgZT0oMCxvLmdldEdseXBoc1VuaWNvZGUpKCksYT1bXTt0aGlzLnRvVW5pY29kZS5mb3JFYWNoKCgodCxyKT0+e2lmKCF0aGlzLmNvbXBvc2l0ZSl7Y29uc3QgYT10aGlzLmRpZmZlcmVuY2VzW3RdfHx0aGlzLmRlZmF1bHRFbmNvZGluZ1t0XSxuPSgwLHMuZ2V0VW5pY29kZUZvckdseXBoKShhLGUpOy0xIT09biYmKHI9bil9YVsrdF09cn0pKTt0aGlzLmNvbXBvc2l0ZSYmdGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBoLklkZW50aXR5VG9Vbmljb2RlTWFwJiYvVGFob21hfFZlcmRhbmEvaS50ZXN0KHQpJiZhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKGEsKDAsbC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpKCkpO3RoaXMudG9Gb250Q2hhcj1hfWFtZW5kRmFsbGJhY2tUb1VuaWNvZGUoZSk7dGhpcy5sb2FkZWROYW1lPXIuc3BsaXQoIi0iKVswXX1jaGVja0FuZFJlcGFpcihlLHQsYSl7Y29uc3Qgcz1bIk9TLzIiLCJjbWFwIiwiaGVhZCIsImhoZWEiLCJobXR4IiwibWF4cCIsIm5hbWUiLCJwb3N0IiwibG9jYSIsImdseWYiLCJmcGdtIiwicHJlcCIsImN2dCAiLCJDRkYgIl07ZnVuY3Rpb24gcmVhZFRhYmxlcyhlLHQpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTthWyJPUy8yIl09bnVsbDthLmNtYXA9bnVsbDthLmhlYWQ9bnVsbDthLmhoZWE9bnVsbDthLmhtdHg9bnVsbDthLm1heHA9bnVsbDthLm5hbWU9bnVsbDthLnBvc3Q9bnVsbDtmb3IobGV0IHI9MDtyPHQ7cisrKXtjb25zdCB0PXJlYWRUYWJsZUVudHJ5KGUpO3MuaW5jbHVkZXModC50YWcpJiYoMCE9PXQubGVuZ3RoJiYoYVt0LnRhZ109dCkpfXJldHVybiBhfWZ1bmN0aW9uIHJlYWRUYWJsZUVudHJ5KGUpe2NvbnN0IHQ9ZS5nZXRTdHJpbmcoNCksYT1lLmdldEludDMyKCk+Pj4wLHI9ZS5nZXRJbnQzMigpPj4+MCxuPWUuZ2V0SW50MzIoKT4+PjAsaT1lLnBvcztlLnBvcz1lLnN0YXJ0fHwwO2Uuc2tpcChyKTtjb25zdCBzPWUuZ2V0Qnl0ZXMobik7ZS5wb3M9aTtpZigiaGVhZCI9PT10KXtzWzhdPXNbOV09c1sxMF09c1sxMV09MDtzWzE3XXw9MzJ9cmV0dXJue3RhZzp0LGNoZWNrc3VtOmEsbGVuZ3RoOm4sb2Zmc2V0OnIsZGF0YTpzfX1mdW5jdGlvbiByZWFkT3BlblR5cGVIZWFkZXIoZSl7cmV0dXJue3ZlcnNpb246ZS5nZXRTdHJpbmcoNCksbnVtVGFibGVzOmUuZ2V0VWludDE2KCksc2VhcmNoUmFuZ2U6ZS5nZXRVaW50MTYoKSxlbnRyeVNlbGVjdG9yOmUuZ2V0VWludDE2KCkscmFuZ2VTaGlmdDplLmdldFVpbnQxNigpfX1mdW5jdGlvbiBzYW5pdGl6ZUdseXBoKGUsdCxhLHIsbixpKXtjb25zdCBzPXtsZW5ndGg6MCxzaXplT2ZJbnN0cnVjdGlvbnM6MH07aWYodDwwfHx0Pj1lLmxlbmd0aHx8YT5lLmxlbmd0aHx8YS10PD0xMilyZXR1cm4gcztjb25zdCBvPWUuc3ViYXJyYXkodCxhKSxjPXNpZ25lZEludDE2KG9bMl0sb1szXSksbD1zaWduZWRJbnQxNihvWzRdLG9bNV0pLGg9c2lnbmVkSW50MTYob1s2XSxvWzddKSx1PXNpZ25lZEludDE2KG9bOF0sb1s5XSk7aWYoYz5oKXt3cml0ZVNpZ25lZEludDE2KG8sMixoKTt3cml0ZVNpZ25lZEludDE2KG8sNixjKX1pZihsPnUpe3dyaXRlU2lnbmVkSW50MTYobyw0LHUpO3dyaXRlU2lnbmVkSW50MTYobyw4LGwpfWNvbnN0IGQ9c2lnbmVkSW50MTYob1swXSxvWzFdKTtpZihkPDApe2lmKGQ8LTEpcmV0dXJuIHM7ci5zZXQobyxuKTtzLmxlbmd0aD1vLmxlbmd0aDtyZXR1cm4gc31sZXQgZixnPTEwLHA9MDtmb3IoZj0wO2Y8ZDtmKyspe3A9KG9bZ108PDh8b1tnKzFdKSsxO2crPTJ9Y29uc3QgbT1nLGI9b1tnXTw8OHxvW2crMV07cy5zaXplT2ZJbnN0cnVjdGlvbnM9YjtnKz0yK2I7Y29uc3QgeT1nO2xldCB3PTA7Zm9yKGY9MDtmPHA7ZisrKXtjb25zdCBlPW9bZysrXTsxOTImZSYmKG9bZy0xXT02MyZlKTtsZXQgdD0yOzImZT90PTE6MTYmZSYmKHQ9MCk7bGV0IGE9Mjs0JmU/YT0xOjMyJmUmJihhPTApO2NvbnN0IHI9dCthO3crPXI7aWYoOCZlKXtjb25zdCBlPW9bZysrXTswPT09ZSYmKG9bZy0xXV49OCk7Zis9ZTt3Kz1lKnJ9fWlmKDA9PT13KXJldHVybiBzO2xldCBTPWcrdztpZihTPm8ubGVuZ3RoKXJldHVybiBzO2lmKCFpJiZiPjApe3Iuc2V0KG8uc3ViYXJyYXkoMCxtKSxuKTtyLnNldChbMCwwXSxuK20pO3Iuc2V0KG8uc3ViYXJyYXkoeSxTKSxuK20rMik7Uy09YjtvLmxlbmd0aC1TPjMmJihTPVMrMyYtNCk7cy5sZW5ndGg9UztyZXR1cm4gc31pZihvLmxlbmd0aC1TPjMpe1M9UyszJi00O3Iuc2V0KG8uc3ViYXJyYXkoMCxTKSxuKTtzLmxlbmd0aD1TO3JldHVybiBzfXIuc2V0KG8sbik7cy5sZW5ndGg9by5sZW5ndGg7cmV0dXJuIHN9ZnVuY3Rpb24gcmVhZE5hbWVUYWJsZShlKXtjb25zdCBhPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1hO2NvbnN0IHI9W1tdLFtdXSxuPVtdLGk9ZS5sZW5ndGgscz1hK2k7aWYoMCE9PXQuZ2V0VWludDE2KCl8fGk8NilyZXR1cm5bcixuXTtjb25zdCBvPXQuZ2V0VWludDE2KCksYz10LmdldFVpbnQxNigpO2xldCBsLGg7Zm9yKGw9MDtsPG8mJnQucG9zKzEyPD1zO2wrKyl7Y29uc3QgZT17cGxhdGZvcm06dC5nZXRVaW50MTYoKSxlbmNvZGluZzp0LmdldFVpbnQxNigpLGxhbmd1YWdlOnQuZ2V0VWludDE2KCksbmFtZTp0LmdldFVpbnQxNigpLGxlbmd0aDp0LmdldFVpbnQxNigpLG9mZnNldDp0LmdldFVpbnQxNigpfTsoaXNNYWNOYW1lUmVjb3JkKGUpfHxpc1dpbk5hbWVSZWNvcmQoZSkpJiZuLnB1c2goZSl9Zm9yKGw9MCxoPW4ubGVuZ3RoO2w8aDtsKyspe2NvbnN0IGU9bltsXTtpZihlLmxlbmd0aDw9MCljb250aW51ZTtjb25zdCBpPWErYytlLm9mZnNldDtpZihpK2UubGVuZ3RoPnMpY29udGludWU7dC5wb3M9aTtjb25zdCBvPWUubmFtZTtpZihlLmVuY29kaW5nKXtsZXQgYT0iIjtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKz0yKWErPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRVaW50MTYoKSk7clsxXVtvXT1hfWVsc2UgclswXVtvXT10LmdldFN0cmluZyhlLmxlbmd0aCl9cmV0dXJuW3Isbl19Y29uc3QgbD1bMCwwLDAsMCwwLDAsMCwwLC0yLC0yLC0yLC0yLDAsMCwtMiwtNSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwtMSwtMSwxLC0xLC05OTksMCwxLDAsLTEsLTIsMCwtMSwtMiwtMSwtMSwwLC0xLC0xLDAsMCwtOTk5LC05OTksLTEsLTEsLTEsLTEsLTIsLTk5OSwtMiwtMiwtOTk5LDAsLTIsLTIsMCwwLC0yLDAsLTIsMCwwLDAsLTIsLTEsLTEsMSwxLDAsMCwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwwLC05OTksLTEsLTEsLTEsLTEsLTEsLTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsLTIsLTk5OSwtOTk5LC05OTksLTk5OSwtOTk5LC0xLC0xLC0yLC0yLDAsMCwwLDAsLTEsLTEsLTk5OSwtMiwtMiwwLDAsLTEsLTIsLTIsMCwwLDAsLTEsLTEsLTEsLTJdO2Z1bmN0aW9uIHNhbml0aXplVFRQcm9ncmFtKGUsdCl7bGV0IGEsbixpLHMsbyxjPWUuZGF0YSxoPTAsdT0wLGQ9MDtjb25zdCBmPVtdLGc9W10scD1bXTtsZXQgbT10LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyxiPSExLHk9MCx3PTA7Zm9yKGxldCBlPWMubGVuZ3RoO2g8ZTspe2NvbnN0IGU9Y1toKytdO2lmKDY0PT09ZSl7bj1jW2grK107aWYoYnx8dyloKz1uO2Vsc2UgZm9yKGE9MDthPG47YSsrKWYucHVzaChjW2grK10pfWVsc2UgaWYoNjU9PT1lKXtuPWNbaCsrXTtpZihifHx3KWgrPTIqbjtlbHNlIGZvcihhPTA7YTxuO2ErKyl7aT1jW2grK107Zi5wdXNoKGk8PDh8Y1toKytdKX19ZWxzZSBpZigxNzY9PSgyNDgmZSkpe249ZS0xNzYrMTtpZihifHx3KWgrPW47ZWxzZSBmb3IoYT0wO2E8bjthKyspZi5wdXNoKGNbaCsrXSl9ZWxzZSBpZigxODQ9PSgyNDgmZSkpe249ZS0xODQrMTtpZihifHx3KWgrPTIqbjtlbHNlIGZvcihhPTA7YTxuO2ErKyl7aT1jW2grK107Zi5wdXNoKGk8PDh8Y1toKytdKX19ZWxzZSBpZig0MyE9PWV8fG0paWYoNDQhPT1lfHxtKXtpZig0NT09PWUpaWYoYil7Yj0hMTt1PWh9ZWxzZXtvPWcucG9wKCk7aWYoIW8peygwLHIud2FybikoIlRUOiBFTkRGIGJhZCBzdGFjayIpO3QuaGludHNWYWxpZD0hMTtyZXR1cm59cz1wLnBvcCgpO2M9by5kYXRhO2g9by5pO3QuZnVuY3Rpb25zU3RhY2tEZWx0YXNbc109Zi5sZW5ndGgtby5zdGFja1RvcH1lbHNlIGlmKDEzNz09PWUpe2lmKGJ8fHcpeygwLHIud2FybikoIlRUOiBuZXN0ZWQgSURFRnMgbm90IGFsbG93ZWQiKTttPSEwfWI9ITA7ZD1ofWVsc2UgaWYoODg9PT1lKSsreTtlbHNlIGlmKDI3PT09ZSl3PXk7ZWxzZSBpZig4OT09PWUpe3c9PT15JiYodz0wKTstLXl9ZWxzZSBpZigyOD09PWUmJiFiJiYhdyl7Y29uc3QgZT1mLmF0KC0xKTtlPjAmJihoKz1lLTEpfX1lbHNle2lmKGJ8fHcpeygwLHIud2FybikoIlRUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWQiKTttPSEwfWI9ITA7ZD1oO3M9Zi5wb3AoKTt0LmZ1bmN0aW9uc0RlZmluZWRbc109e2RhdGE6YyxpOmh9fWVsc2UgaWYoIWImJiF3KXtzPWYuYXQoLTEpO2lmKGlzTmFOKHMpKSgwLHIuaW5mbykoIlRUOiBDQUxMIGVtcHR5IHN0YWNrIChvciBpbnZhbGlkIGVudHJ5KS4iKTtlbHNle3QuZnVuY3Rpb25zVXNlZFtzXT0hMDtpZihzIGluIHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpe2NvbnN0IGU9Zi5sZW5ndGgrdC5mdW5jdGlvbnNTdGFja0RlbHRhc1tzXTtpZihlPDApeygwLHIud2FybikoIlRUOiBDQUxMIGludmFsaWQgZnVuY3Rpb25zIHN0YWNrIGRlbHRhLiIpO3QuaGludHNWYWxpZD0hMTtyZXR1cm59Zi5sZW5ndGg9ZX1lbHNlIGlmKHMgaW4gdC5mdW5jdGlvbnNEZWZpbmVkJiYhcC5pbmNsdWRlcyhzKSl7Zy5wdXNoKHtkYXRhOmMsaTpoLHN0YWNrVG9wOmYubGVuZ3RoLTF9KTtwLnB1c2gocyk7bz10LmZ1bmN0aW9uc0RlZmluZWRbc107aWYoIW8peygwLHIud2FybikoIlRUOiBDQUxMIG5vbi1leGlzdGVudCBmdW5jdGlvbiIpO3QuaGludHNWYWxpZD0hMTtyZXR1cm59Yz1vLmRhdGE7aD1vLml9fX1pZighYiYmIXcpe2xldCB0PTA7ZTw9MTQyP3Q9bFtlXTplPj0xOTImJmU8PTIyMz90PS0xOmU+PTIyNCYmKHQ9LTIpO2lmKGU+PTExMyYmZTw9MTE3KXtuPWYucG9wKCk7aXNOYU4obil8fCh0PTIqLW4pfWZvcig7dDwwJiZmLmxlbmd0aD4wOyl7Zi5wb3AoKTt0Kyt9Zm9yKDt0PjA7KXtmLnB1c2goTmFOKTt0LS19fX10LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucz1tO2NvbnN0IFM9W2NdO2g+Yy5sZW5ndGgmJlMucHVzaChuZXcgVWludDhBcnJheShoLWMubGVuZ3RoKSk7aWYoZD51KXsoMCxyLndhcm4pKCJUVDogY29tcGxlbWVudGluZyBhIG1pc3NpbmcgZnVuY3Rpb24gdGFpbCIpO1MucHVzaChuZXcgVWludDhBcnJheShbMzQsNDVdKSl9IWZ1bmN0aW9uIGZvbGRUVFRhYmxlKGUsdCl7aWYodC5sZW5ndGg+MSl7bGV0IGEscixuPTA7Zm9yKGE9MCxyPXQubGVuZ3RoO2E8cjthKyspbis9dFthXS5sZW5ndGg7bj1uKzMmLTQ7Y29uc3QgaT1uZXcgVWludDhBcnJheShuKTtsZXQgcz0wO2ZvcihhPTAscj10Lmxlbmd0aDthPHI7YSsrKXtpLnNldCh0W2FdLHMpO3MrPXRbYV0ubGVuZ3RofWUuZGF0YT1pO2UubGVuZ3RoPW59fShlLFMpfWxldCBkLGYsYix3O2lmKGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZSh0PW5ldyB5LlN0cmVhbShuZXcgVWludDhBcnJheSh0LmdldEJ5dGVzKCkpKSkpe2NvbnN0IGU9ZnVuY3Rpb24gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkRhdGEoZSx0KXtjb25zdHtudW1Gb250czphLG9mZnNldFRhYmxlOm59PWZ1bmN0aW9uIHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25IZWFkZXIoZSl7Y29uc3QgdD1lLmdldFN0cmluZyg0KTsoMCxyLmFzc2VydCkoInR0Y2YiPT09dCwiTXVzdCBiZSBhIFRydWVUeXBlIENvbGxlY3Rpb24gZm9udC4iKTtjb25zdCBhPWUuZ2V0VWludDE2KCksbj1lLmdldFVpbnQxNigpLGk9ZS5nZXRJbnQzMigpPj4+MCxzPVtdO2ZvcihsZXQgdD0wO3Q8aTt0Kyspcy5wdXNoKGUuZ2V0SW50MzIoKT4+PjApO2NvbnN0IG89e3R0Y1RhZzp0LG1ham9yVmVyc2lvbjphLG1pbm9yVmVyc2lvbjpuLG51bUZvbnRzOmksb2Zmc2V0VGFibGU6c307c3dpdGNoKGEpe2Nhc2UgMTpyZXR1cm4gbztjYXNlIDI6by5kc2lnVGFnPWUuZ2V0SW50MzIoKT4+PjA7by5kc2lnTGVuZ3RoPWUuZ2V0SW50MzIoKT4+PjA7by5kc2lnT2Zmc2V0PWUuZ2V0SW50MzIoKT4+PjA7cmV0dXJuIG99dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBtYWpvclZlcnNpb246ICR7YX0uYCl9KGUpLGk9dC5zcGxpdCgiKyIpO2xldCBzO2ZvcihsZXQgbz0wO288YTtvKyspe2UucG9zPShlLnN0YXJ0fHwwKStuW29dO2NvbnN0IGE9cmVhZE9wZW5UeXBlSGVhZGVyKGUpLGM9cmVhZFRhYmxlcyhlLGEubnVtVGFibGVzKTtpZighYy5uYW1lKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdUcnVlVHlwZSBDb2xsZWN0aW9uIGZvbnQgbXVzdCBjb250YWluIGEgIm5hbWUiIHRhYmxlLicpO2NvbnN0W2xdPXJlYWROYW1lVGFibGUoYy5uYW1lKTtmb3IobGV0IGU9MCxyPWwubGVuZ3RoO2U8cjtlKyspZm9yKGxldCByPTAsbj1sW2VdLmxlbmd0aDtyPG47cisrKXtjb25zdCBuPWxbZV1bcl0/LnJlcGxhY2VBbGwoL1xzL2csIiIpO2lmKG4pe2lmKG49PT10KXJldHVybntoZWFkZXI6YSx0YWJsZXM6Y307aWYoIShpLmxlbmd0aDwyKSlmb3IoY29uc3QgZSBvZiBpKW49PT1lJiYocz17bmFtZTplLGhlYWRlcjphLHRhYmxlczpjfSl9fX1pZihzKXsoMCxyLndhcm4pKGBUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gIiR7dH0iIGZvbnQsIGZhbGxpbmcgYmFjayB0byAiJHtzLm5hbWV9IiBmb250IGluc3RlYWQuYCk7cmV0dXJue2hlYWRlcjpzLmhlYWRlcix0YWJsZXM6cy50YWJsZXN9fXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gIiR7dH0iIGZvbnQuYCl9KHQsdGhpcy5uYW1lKTtkPWUuaGVhZGVyO2Y9ZS50YWJsZXN9ZWxzZXtkPXJlYWRPcGVuVHlwZUhlYWRlcih0KTtmPXJlYWRUYWJsZXModCxkLm51bVRhYmxlcyl9Y29uc3QgUz0hZlsiQ0ZGICJdO2lmKFMpe2lmKCFmLmxvY2EpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJsb2NhIiB0YWJsZSBpcyBub3QgZm91bmQnKTtpZighZi5nbHlmKXsoMCxyLndhcm4pKCdSZXF1aXJlZCAiZ2x5ZiIgdGFibGUgaXMgbm90IGZvdW5kIC0tIHRyeWluZyB0byByZWNvdmVyLicpO2YuZ2x5Zj17dGFnOiJnbHlmIixkYXRhOm5ldyBVaW50OEFycmF5KDApfX10aGlzLmlzT3BlblR5cGU9ITF9ZWxzZXtjb25zdCB0PWEuY29tcG9zaXRlJiYoYS5jaWRUb0dpZE1hcD8ubGVuZ3RoPjB8fCEoYS5jTWFwIGluc3RhbmNlb2YgcC5JZGVudGl0eUNNYXApKTtpZigiT1RUTyI9PT1kLnZlcnNpb24mJiF0fHwhZi5oZWFkfHwhZi5oaGVhfHwhZi5tYXhwfHwhZi5wb3N0KXt3PW5ldyB5LlN0cmVhbShmWyJDRkYgIl0uZGF0YSk7Yj1uZXcgdS5DRkZGb250KHcsYSk7YWRqdXN0V2lkdGhzKGEpO3JldHVybiB0aGlzLmNvbnZlcnQoZSxiLGEpfWRlbGV0ZSBmLmdseWY7ZGVsZXRlIGYubG9jYTtkZWxldGUgZi5mcGdtO2RlbGV0ZSBmLnByZXA7ZGVsZXRlIGZbImN2dCAiXTt0aGlzLmlzT3BlblR5cGU9ITB9aWYoIWYubWF4cCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcignUmVxdWlyZWQgIm1heHAiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO3QucG9zPSh0LnN0YXJ0fHwwKStmLm1heHAub2Zmc2V0O2NvbnN0IHg9dC5nZXRJbnQzMigpLEM9dC5nZXRVaW50MTYoKTtpZihhLnNjYWxlRmFjdG9ycz8ubGVuZ3RoPT09QyYmUyl7Y29uc3R7c2NhbGVGYWN0b3JzOmV9PWEsdD1pbnQxNihmLmhlYWQuZGF0YVs1MF0sZi5oZWFkLmRhdGFbNTFdKSxyPW5ldyBnLkdseWZUYWJsZSh7Z2x5ZlRhYmxlOmYuZ2x5Zi5kYXRhLGlzR2x5cGhMb2NhdGlvbnNMb25nOnQsbG9jYVRhYmxlOmYubG9jYS5kYXRhLG51bUdseXBoczpDfSk7ci5zY2FsZShlKTtjb25zdHtnbHlmOm4sbG9jYTppLGlzTG9jYXRpb25Mb25nOnN9PXIud3JpdGUoKTtmLmdseWYuZGF0YT1uO2YubG9jYS5kYXRhPWk7aWYocyE9PSEhdCl7Zi5oZWFkLmRhdGFbNTBdPTA7Zi5oZWFkLmRhdGFbNTFdPXM/MTowfWNvbnN0IG89Zi5obXR4LmRhdGE7Zm9yKGxldCB0PTA7dDxDO3QrKyl7Y29uc3QgYT00KnQscj1NYXRoLnJvdW5kKGVbdF0qaW50MTYob1thXSxvW2ErMV0pKTtvW2FdPXI+PjgmMjU1O29bYSsxXT0yNTUmcjt3cml0ZVNpZ25lZEludDE2KG8sYSsyLE1hdGgucm91bmQoZVt0XSpzaWduZWRJbnQxNihvW2ErMl0sb1thKzNdKSkpfX1sZXQgaz1DKzEsdj0hMDtpZihrPjY1NTM1KXt2PSExO2s9QzsoMCxyLndhcm4pKCJOb3QgZW5vdWdoIHNwYWNlIGluIGdseWZzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4iKX1sZXQgRj0wLE89MDtpZih4Pj02NTUzNiYmZi5tYXhwLmxlbmd0aD49MjIpe3QucG9zKz04O2lmKHQuZ2V0VWludDE2KCk+Mil7Zi5tYXhwLmRhdGFbMTRdPTA7Zi5tYXhwLmRhdGFbMTVdPTJ9dC5wb3MrPTQ7Rj10LmdldFVpbnQxNigpO3QucG9zKz00O089dC5nZXRVaW50MTYoKX1mLm1heHAuZGF0YVs0XT1rPj44O2YubWF4cC5kYXRhWzVdPTI1NSZrO2NvbnN0IFQ9ZnVuY3Rpb24gc2FuaXRpemVUVFByb2dyYW1zKGUsdCxhLG4pe2NvbnN0IGk9e2Z1bmN0aW9uc0RlZmluZWQ6W10sZnVuY3Rpb25zVXNlZDpbXSxmdW5jdGlvbnNTdGFja0RlbHRhczpbXSx0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM6ITEsaGludHNWYWxpZDohMH07ZSYmc2FuaXRpemVUVFByb2dyYW0oZSxpKTt0JiZzYW5pdGl6ZVRUUHJvZ3JhbSh0LGkpO2UmJmZ1bmN0aW9uIGNoZWNrSW52YWxpZEZ1bmN0aW9ucyhlLHQpe2lmKCFlLnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucylpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpeygwLHIud2FybikoIlRUOiBtb3JlIGZ1bmN0aW9ucyBkZWZpbmVkIHRoYW4gZXhwZWN0ZWQiKTtlLmhpbnRzVmFsaWQ9ITF9ZWxzZSBmb3IobGV0IGE9MCxuPWUuZnVuY3Rpb25zVXNlZC5sZW5ndGg7YTxuO2ErKyl7aWYoYT50KXsoMCxyLndhcm4pKCJUVDogaW52YWxpZCBmdW5jdGlvbiBpZDogIithKTtlLmhpbnRzVmFsaWQ9ITE7cmV0dXJufWlmKGUuZnVuY3Rpb25zVXNlZFthXSYmIWUuZnVuY3Rpb25zRGVmaW5lZFthXSl7KDAsci53YXJuKSgiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIithKTtlLmhpbnRzVmFsaWQ9ITE7cmV0dXJufX19KGksbik7aWYoYSYmMSZhLmxlbmd0aCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShhLmxlbmd0aCsxKTtlLnNldChhLmRhdGEpO2EuZGF0YT1lfXJldHVybiBpLmhpbnRzVmFsaWR9KGYuZnBnbSxmLnByZXAsZlsiY3Z0ICJdLEYpO2lmKCFUKXtkZWxldGUgZi5mcGdtO2RlbGV0ZSBmLnByZXA7ZGVsZXRlIGZbImN2dCAiXX0hZnVuY3Rpb24gc2FuaXRpemVNZXRyaWNzKGUsdCxhLG4saSxzKXtpZighdCl7YSYmKGEuZGF0YT1udWxsKTtyZXR1cm59ZS5wb3M9KGUuc3RhcnR8fDApK3Qub2Zmc2V0O2UucG9zKz00O2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2NvbnN0IG89ZS5nZXRVaW50MTYoKTtlLnBvcys9ODtlLnBvcys9MjtsZXQgYz1lLmdldFVpbnQxNigpO2lmKDAhPT1vKXtpZighKDImaW50MTYobi5kYXRhWzQ0XSxuLmRhdGFbNDVdKSkpe3QuZGF0YVsyMl09MDt0LmRhdGFbMjNdPTB9fWlmKGM+aSl7KDAsci5pbmZvKShgVGhlIG51bU9mTWV0cmljcyAoJHtjfSkgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG51bUdseXBocyAoJHtpfSkuYCk7Yz1pO3QuZGF0YVszNF09KDY1MjgwJmMpPj44O3QuZGF0YVszNV09MjU1JmN9Y29uc3QgbD1pLWMtKGEubGVuZ3RoLTQqYz4+MSk7aWYobD4wKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KGEubGVuZ3RoKzIqbCk7ZS5zZXQoYS5kYXRhKTtpZihzKXtlW2EubGVuZ3RoXT1hLmRhdGFbMl07ZVthLmxlbmd0aCsxXT1hLmRhdGFbM119YS5kYXRhPWV9fSh0LGYuaGhlYSxmLmhtdHgsZi5oZWFkLGssdik7aWYoIWYuaGVhZCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhlYWQiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOyFmdW5jdGlvbiBzYW5pdGl6ZUhlYWQoZSx0LGEpe2NvbnN0IG49ZS5kYXRhLGk9ZnVuY3Rpb24gaW50MzIoZSx0LGEscil7cmV0dXJuKGU8PDI0KSsodDw8MTYpKyhhPDw4KStyfShuWzBdLG5bMV0sblsyXSxuWzNdKTtpZihpPj4xNiE9MSl7KDAsci5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCB2ZXJzaW9uIGluIGhlYWQgdGFibGU6ICIraSk7blswXT0wO25bMV09MTtuWzJdPTA7blszXT0wfWNvbnN0IHM9aW50MTYobls1MF0sbls1MV0pO2lmKHM8MHx8cz4xKXsoMCxyLmluZm8pKCJBdHRlbXB0aW5nIHRvIGZpeCBpbnZhbGlkIGluZGV4VG9Mb2NGb3JtYXQgaW4gaGVhZCB0YWJsZTogIitzKTtjb25zdCBlPXQrMTtpZihhPT09ZTw8MSl7bls1MF09MDtuWzUxXT0wfWVsc2V7aWYoYSE9PWU8PDIpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkNvdWxkIG5vdCBmaXggaW5kZXhUb0xvY0Zvcm1hdDogIitzKTtuWzUwXT0wO25bNTFdPTF9fX0oZi5oZWFkLEMsUz9mLmxvY2EubGVuZ3RoOjApO2xldCBNPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoUyl7Y29uc3QgZT1pbnQxNihmLmhlYWQuZGF0YVs1MF0sZi5oZWFkLmRhdGFbNTFdKSx0PWZ1bmN0aW9uIHNhbml0aXplR2x5cGhMb2NhdGlvbnMoZSx0LGEscixuLGkscyl7bGV0IG8sYyxsO2lmKHIpe289NDtjPWZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlTG9uZyhlLHQpe3JldHVybiBlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM119O2w9ZnVuY3Rpb24gZm9udEl0ZW1FbmNvZGVMb25nKGUsdCxhKXtlW3RdPWE+Pj4yNCYyNTU7ZVt0KzFdPWE+PjE2JjI1NTtlW3QrMl09YT4+OCYyNTU7ZVt0KzNdPTI1NSZhfX1lbHNle289MjtjPWZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlKGUsdCl7cmV0dXJuIGVbdF08PDl8ZVt0KzFdPDwxfTtsPWZ1bmN0aW9uIGZvbnRJdGVtRW5jb2RlKGUsdCxhKXtlW3RdPWE+PjkmMjU1O2VbdCsxXT1hPj4xJjI1NX19Y29uc3QgaD1pP2ErMTphLHU9byooMStoKSxkPW5ldyBVaW50OEFycmF5KHUpO2Quc2V0KGUuZGF0YS5zdWJhcnJheSgwLHUpKTtlLmRhdGE9ZDtjb25zdCBmPXQuZGF0YSxnPWYubGVuZ3RoLHA9bmV3IFVpbnQ4QXJyYXkoZyk7bGV0IG0sYjtjb25zdCB5PVtdO2ZvcihtPTAsYj0wO208YSsxO20rKyxiKz1vKXtsZXQgZT1jKGQsYik7ZT5nJiYoZT1nKTt5LnB1c2goe2luZGV4Om0sb2Zmc2V0OmUsZW5kT2Zmc2V0OjB9KX15LnNvcnQoKChlLHQpPT5lLm9mZnNldC10Lm9mZnNldCkpO2ZvcihtPTA7bTxhO20rKyl5W21dLmVuZE9mZnNldD15W20rMV0ub2Zmc2V0O3kuc29ydCgoKGUsdCk9PmUuaW5kZXgtdC5pbmRleCkpO2ZvcihtPTA7bTxhO20rKyl7Y29uc3R7b2Zmc2V0OmUsZW5kT2Zmc2V0OnR9PXlbbV07aWYoMCE9PWV8fDAhPT10KWJyZWFrO2NvbnN0IGE9eVttKzFdLm9mZnNldDtpZigwIT09YSl7eVttXS5lbmRPZmZzZXQ9YTticmVha319Y29uc3Qgdz1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBTPTA7bChkLDAsUyk7Zm9yKG09MCxiPW87bTxhO20rKyxiKz1vKXtjb25zdCBlPXNhbml0aXplR2x5cGgoZix5W21dLm9mZnNldCx5W21dLmVuZE9mZnNldCxwLFMsbiksdD1lLmxlbmd0aDswPT09dCYmKHdbbV09ITApO2Uuc2l6ZU9mSW5zdHJ1Y3Rpb25zPnMmJihzPWUuc2l6ZU9mSW5zdHJ1Y3Rpb25zKTtTKz10O2woZCxiLFMpfWlmKDA9PT1TKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KFswLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNDksMF0pO2ZvcihtPTAsYj1vO208aDttKyssYis9bylsKGQsYixlLmxlbmd0aCk7dC5kYXRhPWV9ZWxzZSBpZihpKXtjb25zdCBhPWMoZCxvKTtpZihwLmxlbmd0aD5hK1MpdC5kYXRhPXAuc3ViYXJyYXkoMCxhK1MpO2Vsc2V7dC5kYXRhPW5ldyBVaW50OEFycmF5KGErUyk7dC5kYXRhLnNldChwLnN1YmFycmF5KDAsUykpfXQuZGF0YS5zZXQocC5zdWJhcnJheSgwLGEpLFMpO2woZS5kYXRhLGQubGVuZ3RoLW8sUythKX1lbHNlIHQuZGF0YT1wLnN1YmFycmF5KDAsUyk7cmV0dXJue21pc3NpbmdHbHlwaHM6dyxtYXhTaXplT2ZJbnN0cnVjdGlvbnM6c319KGYubG9jYSxmLmdseWYsQyxlLFQsdixPKTtNPXQubWlzc2luZ0dseXBocztpZih4Pj02NTUzNiYmZi5tYXhwLmxlbmd0aD49MjIpe2YubWF4cC5kYXRhWzI2XT10Lm1heFNpemVPZkluc3RydWN0aW9ucz4+ODtmLm1heHAuZGF0YVsyN109MjU1JnQubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zfX1pZighZi5oaGVhKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdSZXF1aXJlZCAiaGhlYSIgdGFibGUgaXMgbm90IGZvdW5kJyk7aWYoMD09PWYuaGhlYS5kYXRhWzEwXSYmMD09PWYuaGhlYS5kYXRhWzExXSl7Zi5oaGVhLmRhdGFbMTBdPTI1NTtmLmhoZWEuZGF0YVsxMV09MjU1fWNvbnN0IEQ9e3VuaXRzUGVyRW06aW50MTYoZi5oZWFkLmRhdGFbMThdLGYuaGVhZC5kYXRhWzE5XSkseU1heDpzaWduZWRJbnQxNihmLmhlYWQuZGF0YVs0Ml0sZi5oZWFkLmRhdGFbNDNdKSx5TWluOnNpZ25lZEludDE2KGYuaGVhZC5kYXRhWzM4XSxmLmhlYWQuZGF0YVszOV0pLGFzY2VudDpzaWduZWRJbnQxNihmLmhoZWEuZGF0YVs0XSxmLmhoZWEuZGF0YVs1XSksZGVzY2VudDpzaWduZWRJbnQxNihmLmhoZWEuZGF0YVs2XSxmLmhoZWEuZGF0YVs3XSksbGluZUdhcDpzaWduZWRJbnQxNihmLmhoZWEuZGF0YVs4XSxmLmhoZWEuZGF0YVs5XSl9O3RoaXMuYXNjZW50PUQuYXNjZW50L0QudW5pdHNQZXJFbTt0aGlzLmRlc2NlbnQ9RC5kZXNjZW50L0QudW5pdHNQZXJFbTt0aGlzLmxpbmVHYXA9RC5saW5lR2FwL0QudW5pdHNQZXJFbTtpZih0aGlzLmNzc0ZvbnRJbmZvPy5saW5lSGVpZ2h0KXt0aGlzLmxpbmVIZWlnaHQ9dGhpcy5jc3NGb250SW5mby5tZXRyaWNzLmxpbmVIZWlnaHQ7dGhpcy5saW5lR2FwPXRoaXMuY3NzRm9udEluZm8ubWV0cmljcy5saW5lR2FwfWVsc2UgdGhpcy5saW5lSGVpZ2h0PXRoaXMuYXNjZW50LXRoaXMuZGVzY2VudCt0aGlzLmxpbmVHYXA7Zi5wb3N0JiZmdW5jdGlvbiByZWFkUG9zdFNjcmlwdFRhYmxlKGUsYSxuKXtjb25zdCBzPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1zO2NvbnN0IG89cytlLmxlbmd0aCxjPXQuZ2V0SW50MzIoKTt0LnNraXAoMjgpO2xldCBsLGgsdT0hMDtzd2l0Y2goYyl7Y2FzZSA2NTUzNjpsPWkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nO2JyZWFrO2Nhc2UgMTMxMDcyOmNvbnN0IGU9dC5nZXRVaW50MTYoKTtpZihlIT09bil7dT0hMTticmVha31jb25zdCBzPVtdO2ZvcihoPTA7aDxlOysraCl7Y29uc3QgZT10LmdldFVpbnQxNigpO2lmKGU+PTMyNzY4KXt1PSExO2JyZWFrfXMucHVzaChlKX1pZighdSlicmVhaztjb25zdCBkPVtdLGY9W107Zm9yKDt0LnBvczxvOyl7Y29uc3QgZT10LmdldEJ5dGUoKTtmLmxlbmd0aD1lO2ZvcihoPTA7aDxlOysraClmW2hdPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRCeXRlKCkpO2QucHVzaChmLmpvaW4oIiIpKX1sPVtdO2ZvcihoPTA7aDxlOysraCl7Y29uc3QgZT1zW2hdO2U8MjU4P2wucHVzaChpLk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZ1tlXSk6bC5wdXNoKGRbZS0yNThdKX1icmVhaztjYXNlIDE5NjYwODpicmVhaztkZWZhdWx0OigwLHIud2FybikoIlVua25vd24vdW5zdXBwb3J0ZWQgcG9zdCB0YWJsZSB2ZXJzaW9uICIrYyk7dT0hMTthLmRlZmF1bHRFbmNvZGluZyYmKGw9YS5kZWZhdWx0RW5jb2RpbmcpfWEuZ2x5cGhOYW1lcz1sO3JldHVybiB1fShmLnBvc3QsYSxDKTtmLnBvc3Q9e3RhZzoicG9zdCIsZGF0YTpjcmVhdGVQb3N0VGFibGUoYSl9O2NvbnN0IEU9W107ZnVuY3Rpb24gaGFzR2x5cGgoZSl7cmV0dXJuIU1bZV19aWYoYS5jb21wb3NpdGUpe2NvbnN0IGU9YS5jaWRUb0dpZE1hcHx8W10sdD0wPT09ZS5sZW5ndGg7YS5jTWFwLmZvckVhY2goKGZ1bmN0aW9uKGEsbil7InN0cmluZyI9PXR5cGVvZiBuJiYobj1jb252ZXJ0Q2lkU3RyaW5nKGEsbiwhMCkpO2lmKG4+NjU1MzUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1heCBzaXplIG9mIENJRCBpcyA2NSw1MzUiKTtsZXQgaT0tMTt0P2k9bjp2b2lkIDAhPT1lW25dJiYoaT1lW25dKTtpPj0wJiZpPEMmJmhhc0dseXBoKGkpJiYoRVthXT1pKX0pKX1lbHNle2NvbnN0IGU9ZnVuY3Rpb24gcmVhZENtYXBUYWJsZShlLHQsYSxuKXtpZighZSl7KDAsci53YXJuKSgiTm8gY21hcCB0YWJsZSBhdmFpbGFibGUuIik7cmV0dXJue3BsYXRmb3JtSWQ6LTEsZW5jb2RpbmdJZDotMSxtYXBwaW5nczpbXSxoYXNTaG9ydENtYXA6ITF9fWxldCBpLHM9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3QucG9zPXM7dC5za2lwKDIpO2NvbnN0IG89dC5nZXRVaW50MTYoKTtsZXQgYyxsPSExO2ZvcihsZXQgZT0wO2U8bztlKyspe2NvbnN0IHI9dC5nZXRVaW50MTYoKSxpPXQuZ2V0VWludDE2KCkscz10LmdldEludDMyKCk+Pj4wO2xldCBoPSExO2lmKGM/LnBsYXRmb3JtSWQhPT1yfHxjPy5lbmNvZGluZ0lkIT09aSl7aWYoMCE9PXJ8fDAhPT1pJiYxIT09aSYmMyE9PWkpaWYoMT09PXImJjA9PT1pKWg9ITA7ZWxzZSBpZigzIT09cnx8MSE9PWl8fCFuJiZjKXtpZihhJiYzPT09ciYmMD09PWkpe2g9ITA7bGV0IGE9ITA7aWYoZTxvLTEpe2NvbnN0IGU9dC5wZWVrQnl0ZXMoMik7aW50MTYoZVswXSxlWzFdKTxyJiYoYT0hMSl9YSYmKGw9ITApfX1lbHNle2g9ITA7YXx8KGw9ITApfWVsc2UgaD0hMDtoJiYoYz17cGxhdGZvcm1JZDpyLGVuY29kaW5nSWQ6aSxvZmZzZXQ6c30pO2lmKGwpYnJlYWt9fWMmJih0LnBvcz1zK2Mub2Zmc2V0KTtpZighY3x8LTE9PT10LnBlZWtCeXRlKCkpeygwLHIud2FybikoIkNvdWxkIG5vdCBmaW5kIGEgcHJlZmVycmVkIGNtYXAgdGFibGUuIik7cmV0dXJue3BsYXRmb3JtSWQ6LTEsZW5jb2RpbmdJZDotMSxtYXBwaW5nczpbXSxoYXNTaG9ydENtYXA6ITF9fWNvbnN0IGg9dC5nZXRVaW50MTYoKTtsZXQgdT0hMTtjb25zdCBkPVtdO2xldCBmLGc7aWYoMD09PWgpe3Quc2tpcCg0KTtmb3IoZj0wO2Y8MjU2O2YrKyl7Y29uc3QgZT10LmdldEJ5dGUoKTtlJiZkLnB1c2goe2NoYXJDb2RlOmYsZ2x5cGhJZDplfSl9dT0hMH1lbHNlIGlmKDI9PT1oKXt0LnNraXAoNCk7Y29uc3QgZT1bXTtsZXQgYT0wO2ZvcihsZXQgcj0wO3I8MjU2O3IrKyl7Y29uc3Qgcj10LmdldFVpbnQxNigpPj4zO2UucHVzaChyKTthPU1hdGgubWF4KHIsYSl9Y29uc3Qgcj1bXTtmb3IobGV0IGU9MDtlPD1hO2UrKylyLnB1c2goe2ZpcnN0Q29kZTp0LmdldFVpbnQxNigpLGVudHJ5Q291bnQ6dC5nZXRVaW50MTYoKSxpZERlbHRhOnNpZ25lZEludDE2KHQuZ2V0Qnl0ZSgpLHQuZ2V0Qnl0ZSgpKSxpZFJhbmdlUG9zOnQucG9zK3QuZ2V0VWludDE2KCl9KTtmb3IobGV0IGE9MDthPDI1NjthKyspaWYoMD09PWVbYV0pe3QucG9zPXJbMF0uaWRSYW5nZVBvcysyKmE7Zz10LmdldFVpbnQxNigpO2QucHVzaCh7Y2hhckNvZGU6YSxnbHlwaElkOmd9KX1lbHNle2NvbnN0IG49cltlW2FdXTtmb3IoZj0wO2Y8bi5lbnRyeUNvdW50O2YrKyl7Y29uc3QgZT0oYTw8OCkrZituLmZpcnN0Q29kZTt0LnBvcz1uLmlkUmFuZ2VQb3MrMipmO2c9dC5nZXRVaW50MTYoKTswIT09ZyYmKGc9KGcrbi5pZERlbHRhKSU2NTUzNik7ZC5wdXNoKHtjaGFyQ29kZTplLGdseXBoSWQ6Z30pfX19ZWxzZSBpZig0PT09aCl7dC5za2lwKDQpO2NvbnN0IGU9dC5nZXRVaW50MTYoKT4+MTt0LnNraXAoNik7Y29uc3QgYT1bXTtsZXQgcjtmb3Iocj0wO3I8ZTtyKyspYS5wdXNoKHtlbmQ6dC5nZXRVaW50MTYoKX0pO3Quc2tpcCgyKTtmb3Iocj0wO3I8ZTtyKyspYVtyXS5zdGFydD10LmdldFVpbnQxNigpO2ZvcihyPTA7cjxlO3IrKylhW3JdLmRlbHRhPXQuZ2V0VWludDE2KCk7bGV0IG4sbz0wO2ZvcihyPTA7cjxlO3IrKyl7aT1hW3JdO2NvbnN0IHM9dC5nZXRVaW50MTYoKTtpZihzKXtuPShzPj4xKS0oZS1yKTtpLm9mZnNldEluZGV4PW47bz1NYXRoLm1heChvLG4raS5lbmQtaS5zdGFydCsxKX1lbHNlIGkub2Zmc2V0SW5kZXg9LTF9Y29uc3QgYz1bXTtmb3IoZj0wO2Y8bztmKyspYy5wdXNoKHQuZ2V0VWludDE2KCkpO2ZvcihyPTA7cjxlO3IrKyl7aT1hW3JdO3M9aS5zdGFydDtjb25zdCBlPWkuZW5kLHQ9aS5kZWx0YTtuPWkub2Zmc2V0SW5kZXg7Zm9yKGY9cztmPD1lO2YrKylpZig2NTUzNSE9PWYpe2c9bjwwP2Y6Y1tuK2Ytc107Zz1nK3QmNjU1MzU7ZC5wdXNoKHtjaGFyQ29kZTpmLGdseXBoSWQ6Z30pfX19ZWxzZSBpZig2PT09aCl7dC5za2lwKDQpO2NvbnN0IGU9dC5nZXRVaW50MTYoKSxhPXQuZ2V0VWludDE2KCk7Zm9yKGY9MDtmPGE7ZisrKXtnPXQuZ2V0VWludDE2KCk7Y29uc3QgYT1lK2Y7ZC5wdXNoKHtjaGFyQ29kZTphLGdseXBoSWQ6Z30pfX1lbHNle2lmKDEyIT09aCl7KDAsci53YXJuKSgiY21hcCB0YWJsZSBoYXMgdW5zdXBwb3J0ZWQgZm9ybWF0OiAiK2gpO3JldHVybntwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfX17dC5za2lwKDEwKTtjb25zdCBlPXQuZ2V0SW50MzIoKT4+PjA7Zm9yKGY9MDtmPGU7ZisrKXtjb25zdCBlPXQuZ2V0SW50MzIoKT4+PjAsYT10LmdldEludDMyKCk+Pj4wO2xldCByPXQuZ2V0SW50MzIoKT4+PjA7Zm9yKGxldCB0PWU7dDw9YTt0KyspZC5wdXNoKHtjaGFyQ29kZTp0LGdseXBoSWQ6cisrfSl9fX1kLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY2hhckNvZGUtdC5jaGFyQ29kZX0pKTtmb3IobGV0IGU9MTtlPGQubGVuZ3RoO2UrKylpZihkW2UtMV0uY2hhckNvZGU9PT1kW2VdLmNoYXJDb2RlKXtkLnNwbGljZShlLDEpO2UtLX1yZXR1cm57cGxhdGZvcm1JZDpjLnBsYXRmb3JtSWQsZW5jb2RpbmdJZDpjLmVuY29kaW5nSWQsbWFwcGluZ3M6ZCxoYXNTaG9ydENtYXA6dX19KGYuY21hcCx0LHRoaXMuaXNTeW1ib2xpY0ZvbnQsYS5oYXNFbmNvZGluZyksbj1lLnBsYXRmb3JtSWQscz1lLmVuY29kaW5nSWQsbD1lLm1hcHBpbmdzO2xldCB1PVtdLGQ9ITE7IWEuaGFzRW5jb2Rpbmd8fCJNYWNSb21hbkVuY29kaW5nIiE9PWEuYmFzZUVuY29kaW5nTmFtZSYmIldpbkFuc2lFbmNvZGluZyIhPT1hLmJhc2VFbmNvZGluZ05hbWV8fCh1PSgwLGMuZ2V0RW5jb2RpbmcpKGEuYmFzZUVuY29kaW5nTmFtZSkpO2lmKGEuaGFzRW5jb2RpbmcmJiF0aGlzLmlzU3ltYm9saWNGb250JiYoMz09PW4mJjE9PT1zfHwxPT09biYmMD09PXMpKXtjb25zdCBlPSgwLG8uZ2V0R2x5cGhzVW5pY29kZSkoKTtmb3IobGV0IHQ9MDt0PDI1Njt0Kyspe2xldCByO3I9dm9pZCAwIT09dGhpcy5kaWZmZXJlbmNlc1t0XT90aGlzLmRpZmZlcmVuY2VzW3RdOnUubGVuZ3RoJiYiIiE9PXVbdF0/dVt0XTpjLlN0YW5kYXJkRW5jb2RpbmdbdF07aWYoIXIpY29udGludWU7Y29uc3Qgbz0oMCxpLnJlY292ZXJHbHlwaE5hbWUpKHIsZSk7bGV0IGQ7Mz09PW4mJjE9PT1zP2Q9ZVtvXToxPT09biYmMD09PXMmJihkPWMuTWFjUm9tYW5FbmNvZGluZy5pbmRleE9mKG8pKTtpZih2b2lkIDA9PT1kKXtpZighYS5nbHlwaE5hbWVzJiZhLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiYhKHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcCkpe2NvbnN0IGU9dGhpcy50b1VuaWNvZGUuZ2V0KHQpO2UmJihkPWUuY29kZVBvaW50QXQoMCkpfWlmKHZvaWQgMD09PWQpY29udGludWV9Zm9yKGNvbnN0IGUgb2YgbClpZihlLmNoYXJDb2RlPT09ZCl7RVt0XT1lLmdseXBoSWQ7YnJlYWt9fX1lbHNlIGlmKDA9PT1uKXtmb3IoY29uc3QgZSBvZiBsKUVbZS5jaGFyQ29kZV09ZS5nbHlwaElkO2Q9ITB9ZWxzZSBmb3IoY29uc3QgZSBvZiBsKXtsZXQgdD1lLmNoYXJDb2RlOzM9PT1uJiZ0Pj02MTQ0MCYmdDw9NjE2OTUmJih0Jj0yNTUpO0VbdF09ZS5nbHlwaElkfWlmKGEuZ2x5cGhOYW1lcyYmKHUubGVuZ3RofHx0aGlzLmRpZmZlcmVuY2VzLmxlbmd0aCkpZm9yKGxldCBlPTA7ZTwyNTY7KytlKXtpZighZCYmdm9pZCAwIT09RVtlXSljb250aW51ZTtjb25zdCB0PXRoaXMuZGlmZmVyZW5jZXNbZV18fHVbZV07aWYoIXQpY29udGludWU7Y29uc3Qgcj1hLmdseXBoTmFtZXMuaW5kZXhPZih0KTtyPjAmJmhhc0dseXBoKHIpJiYoRVtlXT1yKX19MD09PUUubGVuZ3RoJiYoRVswXT0wKTtsZXQgTj1rLTE7dnx8KE49MCk7aWYoIWEuY3NzRm9udEluZm8pe2NvbnN0IGU9YWRqdXN0TWFwcGluZyhFLGhhc0dseXBoLE4sdGhpcy50b1VuaWNvZGUpO3RoaXMudG9Gb250Q2hhcj1lLnRvRm9udENoYXI7Zi5jbWFwPXt0YWc6ImNtYXAiLGRhdGE6Y3JlYXRlQ21hcFRhYmxlKGUuY2hhckNvZGVUb0dseXBoSWQsZS50b1VuaWNvZGVFeHRyYU1hcCxrKX07ZlsiT1MvMiJdJiZmdW5jdGlvbiB2YWxpZGF0ZU9TMlRhYmxlKGUsdCl7dC5wb3M9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O2NvbnN0IGE9dC5nZXRVaW50MTYoKTt0LnNraXAoNjApO2NvbnN0IHI9dC5nZXRVaW50MTYoKTtpZihhPDQmJjc2OCZyKXJldHVybiExO2lmKHQuZ2V0VWludDE2KCk+dC5nZXRVaW50MTYoKSlyZXR1cm4hMTt0LnNraXAoNik7aWYoMD09PXQuZ2V0VWludDE2KCkpcmV0dXJuITE7ZS5kYXRhWzhdPWUuZGF0YVs5XT0wO3JldHVybiEwfShmWyJPUy8yIl0sdCl8fChmWyJPUy8yIl09e3RhZzoiT1MvMiIsZGF0YTpjcmVhdGVPUzJUYWJsZShhLGUuY2hhckNvZGVUb0dseXBoSWQsRCl9KX1pZighUyl0cnl7dz1uZXcgeS5TdHJlYW0oZlsiQ0ZGICJdLmRhdGEpO2I9bmV3IG4uQ0ZGUGFyc2VyKHcsYSxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkucGFyc2UoKTtiLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTtjb25zdCBlPW5ldyBuLkNGRkNvbXBpbGVyKGIpO2ZbIkNGRiAiXS5kYXRhPWUuY29tcGlsZSgpfWNhdGNoeygwLHIud2FybikoIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIithLmxvYWRlZE5hbWUpfWlmKGYubmFtZSl7Y29uc3RbdCxyXT1yZWFkTmFtZVRhYmxlKGYubmFtZSk7Zi5uYW1lLmRhdGE9Y3JlYXRlTmFtZVRhYmxlKGUsdCk7dGhpcy5wc05hbWU9dFswXVs2XXx8bnVsbDthLmNvbXBvc2l0ZXx8ZnVuY3Rpb24gYWRqdXN0VHJ1ZVR5cGVUb1VuaWNvZGUoZSx0LGEpe2lmKGUuaXNJbnRlcm5hbEZvbnQpcmV0dXJuO2lmKGUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXApcmV0dXJuO2lmKGUuaGFzRW5jb2RpbmcpcmV0dXJuO2lmKGUudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcClyZXR1cm47aWYoIXQpcmV0dXJuO2lmKDA9PT1hLmxlbmd0aClyZXR1cm47aWYoZS5kZWZhdWx0RW5jb2Rpbmc9PT1jLldpbkFuc2lFbmNvZGluZylyZXR1cm47Zm9yKGNvbnN0IGUgb2YgYSlpZighaXNXaW5OYW1lUmVjb3JkKGUpKXJldHVybjtjb25zdCByPWMuV2luQW5zaUVuY29kaW5nLG49W10saT0oMCxvLmdldEdseXBoc1VuaWNvZGUpKCk7Zm9yKGNvbnN0IGUgaW4gcil7Y29uc3QgdD1yW2VdO2lmKCIiPT09dCljb250aW51ZTtjb25zdCBhPWlbdF07dm9pZCAwIT09YSYmKG5bZV09U3RyaW5nLmZyb21DaGFyQ29kZShhKSl9bi5sZW5ndGg+MCYmZS50b1VuaWNvZGUuYW1lbmQobil9KGEsdGhpcy5pc1N5bWJvbGljRm9udCxyKX1lbHNlIGYubmFtZT17dGFnOiJuYW1lIixkYXRhOmNyZWF0ZU5hbWVUYWJsZSh0aGlzLm5hbWUpfTtjb25zdCBSPW5ldyBtLk9wZW5UeXBlRmlsZUJ1aWxkZXIoZC52ZXJzaW9uKTtmb3IoY29uc3QgZSBpbiBmKVIuYWRkVGFibGUoZSxmW2VdLmRhdGEpO3JldHVybiBSLnRvQXJyYXkoKX1jb252ZXJ0KGUsdCxhKXthLmZpeGVkUGl0Y2g9ITE7YS5idWlsdEluRW5jb2RpbmcmJmZ1bmN0aW9uIGFkanVzdFR5cGUxVG9Vbmljb2RlKGUsdCl7aWYoZS5pc0ludGVybmFsRm9udClyZXR1cm47aWYoZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcClyZXR1cm47aWYodD09PWUuZGVmYXVsdEVuY29kaW5nKXJldHVybjtpZihlLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXApcmV0dXJuO2NvbnN0IGE9W10scj0oMCxvLmdldEdseXBoc1VuaWNvZGUpKCk7Zm9yKGNvbnN0IG4gaW4gdCl7aWYoZS5oYXNFbmNvZGluZyYmKGUuYmFzZUVuY29kaW5nTmFtZXx8dm9pZCAwIT09ZS5kaWZmZXJlbmNlc1tuXSkpY29udGludWU7Y29uc3QgaT10W25dLG89KDAscy5nZXRVbmljb2RlRm9yR2x5cGgpKGkscik7LTEhPT1vJiYoYVtuXT1TdHJpbmcuZnJvbUNoYXJDb2RlKG8pKX1hLmxlbmd0aD4wJiZlLnRvVW5pY29kZS5hbWVuZChhKX0oYSxhLmJ1aWx0SW5FbmNvZGluZyk7bGV0IG49MTt0IGluc3RhbmNlb2YgdS5DRkZGb250JiYobj10Lm51bUdseXBocy0xKTtjb25zdCBsPXQuZ2V0R2x5cGhNYXBwaW5nKGEpO2xldCBkPW51bGwsZj1sLGc9bnVsbDtpZighYS5jc3NGb250SW5mbyl7ZD1hZGp1c3RNYXBwaW5nKGwsdC5oYXNHbHlwaElkLmJpbmQodCksbix0aGlzLnRvVW5pY29kZSk7dGhpcy50b0ZvbnRDaGFyPWQudG9Gb250Q2hhcjtmPWQuY2hhckNvZGVUb0dseXBoSWQ7Zz1kLnRvVW5pY29kZUV4dHJhTWFwfWNvbnN0IHA9dC5udW1HbHlwaHM7ZnVuY3Rpb24gZ2V0Q2hhckNvZGVzKGUsdCl7bGV0IGE9bnVsbDtmb3IoY29uc3QgciBpbiBlKXQ9PT1lW3JdJiYoYXx8PVtdKS5wdXNoKDB8cik7cmV0dXJuIGF9ZnVuY3Rpb24gY3JlYXRlQ2hhckNvZGUoZSx0KXtmb3IoY29uc3QgYSBpbiBlKWlmKHQ9PT1lW2FdKXJldHVybiAwfGE7ZC5jaGFyQ29kZVRvR2x5cGhJZFtkLm5leHRBdmFpbGFibGVGb250Q2hhckNvZGVdPXQ7cmV0dXJuIGQubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSsrfWNvbnN0IGI9dC5zZWFjcztpZihkJiZpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCYmYj8ubGVuZ3RoKXtjb25zdCBlPWEuZm9udE1hdHJpeHx8ci5GT05UX0lERU5USVRZX01BVFJJWCxuPXQuZ2V0Q2hhcnNldCgpLGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHQgaW4gYil7dHw9MDtjb25zdCBhPWJbdF0scj1jLlN0YW5kYXJkRW5jb2RpbmdbYVsyXV0scz1jLlN0YW5kYXJkRW5jb2RpbmdbYVszXV0sbz1uLmluZGV4T2YociksaD1uLmluZGV4T2Yocyk7aWYobzwwfHxoPDApY29udGludWU7Y29uc3QgdT17eDphWzBdKmVbMF0rYVsxXSplWzJdK2VbNF0seTphWzBdKmVbMV0rYVsxXSplWzNdK2VbNV19LGY9Z2V0Q2hhckNvZGVzKGwsdCk7aWYoZilmb3IoY29uc3QgZSBvZiBmKXtjb25zdCB0PWQuY2hhckNvZGVUb0dseXBoSWQsYT1jcmVhdGVDaGFyQ29kZSh0LG8pLHI9Y3JlYXRlQ2hhckNvZGUodCxoKTtpW2VdPXtiYXNlRm9udENoYXJDb2RlOmEsYWNjZW50Rm9udENoYXJDb2RlOnIsYWNjZW50T2Zmc2V0OnV9fX1hLnNlYWNNYXA9aX1jb25zdCB5PTEvKGEuZm9udE1hdHJpeHx8ci5GT05UX0lERU5USVRZX01BVFJJWClbMF0sdz1uZXcgbS5PcGVuVHlwZUZpbGVCdWlsZGVyKCJPVFRPIik7dy5hZGRUYWJsZSgiQ0ZGICIsdC5kYXRhKTt3LmFkZFRhYmxlKCJPUy8yIixjcmVhdGVPUzJUYWJsZShhLGYpKTt3LmFkZFRhYmxlKCJjbWFwIixjcmVhdGVDbWFwVGFibGUoZixnLHApKTt3LmFkZFRhYmxlKCJoZWFkIiwiXDABXDBcMFwwXDAQXDBcMFwwXDBcMF8PPMO1XDBcMCIrc2FmZVN0cmluZzE2KHkpKyJcMFwwXDBcMMKeXHZ+J1wwXDBcMFwwwp5cdn4nXDBcMCIrc2FmZVN0cmluZzE2KGEuZGVzY2VudCkrIg/DvyIrc2FmZVN0cmluZzE2KGEuYXNjZW50KStzdHJpbmcxNihhLml0YWxpY0FuZ2xlPzI6MCkrIlwwEVwwXDBcMFwwXDBcMCIpO3cuYWRkVGFibGUoImhoZWEiLCJcMAFcMFwwIitzYWZlU3RyaW5nMTYoYS5hc2NlbnQpK3NhZmVTdHJpbmcxNihhLmRlc2NlbnQpKyJcMFwww7/Dv1wwXDBcMFwwXDBcMCIrc2FmZVN0cmluZzE2KGEuY2FwSGVpZ2h0KStzYWZlU3RyaW5nMTYoTWF0aC50YW4oYS5pdGFsaWNBbmdsZSkqYS54SGVpZ2h0KSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIitzdHJpbmcxNihwKSk7dy5hZGRUYWJsZSgiaG10eCIsZnVuY3Rpb24gZm9udEZpZWxkc0htdHgoKXtjb25zdCBlPXQuY2hhcnN0cmluZ3MsYT10LmNmZj90LmNmZi53aWR0aHM6bnVsbDtsZXQgcj0iXDBcMFwwXDAiO2ZvcihsZXQgdD0xLG49cDt0PG47dCsrKXtsZXQgbj0wO2lmKGUpe2NvbnN0IGE9ZVt0LTFdO249IndpZHRoImluIGE/YS53aWR0aDowfWVsc2UgYSYmKG49TWF0aC5jZWlsKGFbdF18fDApKTtyKz1zdHJpbmcxNihuKStzdHJpbmcxNigwKX1yZXR1cm4gcn0oKSk7dy5hZGRUYWJsZSgibWF4cCIsIlwwXDBQXDAiK3N0cmluZzE2KHApKTt3LmFkZFRhYmxlKCJuYW1lIixjcmVhdGVOYW1lVGFibGUoZSkpO3cuYWRkVGFibGUoInBvc3QiLGNyZWF0ZVBvc3RUYWJsZShhKSk7cmV0dXJuIHcudG9BcnJheSgpfWdldCBzcGFjZVdpZHRoKCl7Y29uc3QgZT1bInNwYWNlIiwibWludXMiLCJvbmUiLCJpIiwiSSJdO2xldCB0O2Zvcihjb25zdCBhIG9mIGUpe2lmKGEgaW4gdGhpcy53aWR0aHMpe3Q9dGhpcy53aWR0aHNbYV07YnJlYWt9Y29uc3QgZT0oMCxvLmdldEdseXBoc1VuaWNvZGUpKClbYV07bGV0IHI9MDtpZih0aGlzLmNvbXBvc2l0ZSYmdGhpcy5jTWFwLmNvbnRhaW5zKGUpKXtyPXRoaXMuY01hcC5sb29rdXAoZSk7InN0cmluZyI9PXR5cGVvZiByJiYocj1jb252ZXJ0Q2lkU3RyaW5nKGUscikpfSFyJiZ0aGlzLnRvVW5pY29kZSYmKHI9dGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihlKSk7cjw9MCYmKHI9ZSk7dD10aGlzLndpZHRoc1tyXTtpZih0KWJyZWFrfXJldHVybigwLHIuc2hhZG93KSh0aGlzLCJzcGFjZVdpZHRoIix0fHx0aGlzLmRlZmF1bHRXaWR0aCl9X2NoYXJUb0dseXBoKGUsdD0hMSl7bGV0IGEsbixpLG89dGhpcy5fZ2x5cGhDYWNoZVtlXTtpZihvPy5pc1NwYWNlPT09dClyZXR1cm4gbztsZXQgYz1lO2lmKHRoaXMuY01hcD8uY29udGFpbnMoZSkpe2M9dGhpcy5jTWFwLmxvb2t1cChlKTsic3RyaW5nIj09dHlwZW9mIGMmJihjPWNvbnZlcnRDaWRTdHJpbmcoZSxjKSl9bj10aGlzLndpZHRoc1tjXTsibnVtYmVyIiE9dHlwZW9mIG4mJihuPXRoaXMuZGVmYXVsdFdpZHRoKTtjb25zdCBsPXRoaXMudm1ldHJpY3M/LltjXTtsZXQgaD10aGlzLnRvVW5pY29kZS5nZXQoZSl8fGU7Im51bWJlciI9PXR5cGVvZiBoJiYoaD1TdHJpbmcuZnJvbUNoYXJDb2RlKGgpKTtsZXQgdT12b2lkIDAhPT10aGlzLnRvRm9udENoYXJbZV07YT10aGlzLnRvRm9udENoYXJbZV18fGU7aWYodGhpcy5taXNzaW5nRmlsZSl7Y29uc3QgdD10aGlzLmRpZmZlcmVuY2VzW2VdfHx0aGlzLmRlZmF1bHRFbmNvZGluZ1tlXTsiLm5vdGRlZiIhPT10JiYiIiE9PXR8fCJUeXBlMSIhPT10aGlzLnR5cGV8fChhPTMyKTthPSgwLHMubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMpKGEpfXRoaXMuaXNUeXBlM0ZvbnQmJihpPWEpO2xldCBkPW51bGw7aWYodGhpcy5zZWFjTWFwPy5bZV0pe3U9ITA7Y29uc3QgdD10aGlzLnNlYWNNYXBbZV07YT10LmJhc2VGb250Q2hhckNvZGU7ZD17Zm9udENoYXI6U3RyaW5nLmZyb21Db2RlUG9pbnQodC5hY2NlbnRGb250Q2hhckNvZGUpLG9mZnNldDp0LmFjY2VudE9mZnNldH19bGV0IGY9IiI7Im51bWJlciI9PXR5cGVvZiBhJiYoYTw9MTExNDExMT9mPVN0cmluZy5mcm9tQ29kZVBvaW50KGEpOigwLHIud2FybikoYGNoYXJUb0dseXBoIC0gaW52YWxpZCBmb250Q2hhckNvZGU6ICR7YX1gKSk7bz1uZXcgR2x5cGgoZSxmLGgsZCxuLGwsaSx0LHUpO3JldHVybiB0aGlzLl9nbHlwaENhY2hlW2VdPW99Y2hhcnNUb0dseXBocyhlKXtsZXQgdD10aGlzLl9jaGFyc0NhY2hlW2VdO2lmKHQpcmV0dXJuIHQ7dD1bXTtpZih0aGlzLmNNYXApe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKSxyPWUubGVuZ3RoO2xldCBuPTA7Zm9yKDtuPHI7KXt0aGlzLmNNYXAucmVhZENoYXJDb2RlKGUsbixhKTtjb25zdHtjaGFyY29kZTpyLGxlbmd0aDppfT1hO24rPWk7Y29uc3Qgcz10aGlzLl9jaGFyVG9HbHlwaChyLDE9PT1pJiYzMj09PWUuY2hhckNvZGVBdChuLTEpKTt0LnB1c2gocyl9fWVsc2UgZm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7KythKXtjb25zdCByPWUuY2hhckNvZGVBdChhKSxuPXRoaXMuX2NoYXJUb0dseXBoKHIsMzI9PT1yKTt0LnB1c2gobil9cmV0dXJuIHRoaXMuX2NoYXJzQ2FjaGVbZV09dH1nZXRDaGFyUG9zaXRpb25zKGUpe2NvbnN0IHQ9W107aWYodGhpcy5jTWFwKXtjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHI9MDtmb3IoO3I8ZS5sZW5ndGg7KXt0aGlzLmNNYXAucmVhZENoYXJDb2RlKGUscixhKTtjb25zdCBuPWEubGVuZ3RoO3QucHVzaChbcixyK25dKTtyKz1ufX1lbHNlIGZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyOysrYSl0LnB1c2goW2EsYSsxXSk7cmV0dXJuIHR9Z2V0IGdseXBoQ2FjaGVWYWx1ZXMoKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9nbHlwaENhY2hlKX1lbmNvZGVTdHJpbmcoZSl7Y29uc3QgdD1bXSxhPVtdLGhhc0N1cnJlbnRCdWZFcnJvcnM9KCk9PnQubGVuZ3RoJTI9PTEscj10aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXA/ZT0+dGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihlKTplPT50aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKFN0cmluZy5mcm9tQ29kZVBvaW50KGUpKTtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9ZS5jb2RlUG9pbnRBdChuKTtpPjU1Mjk1JiYoaTw1NzM0NHx8aT42NTUzMykmJm4rKztpZih0aGlzLnRvVW5pY29kZSl7Y29uc3QgZT1yKGkpO2lmKC0xIT09ZSl7aWYoaGFzQ3VycmVudEJ1ZkVycm9ycygpKXt0LnB1c2goYS5qb2luKCIiKSk7YS5sZW5ndGg9MH1mb3IobGV0IHQ9KHRoaXMuY01hcD90aGlzLmNNYXAuZ2V0Q2hhckNvZGVMZW5ndGgoZSk6MSktMTt0Pj0wO3QtLSlhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlPj44KnQmMjU1KSk7Y29udGludWV9fWlmKCFoYXNDdXJyZW50QnVmRXJyb3JzKCkpe3QucHVzaChhLmpvaW4oIiIpKTthLmxlbmd0aD0wfWEucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChpKSl9dC5wdXNoKGEuam9pbigiIikpO3JldHVybiB0fX07dC5FcnJvckZvbnQ9Y2xhc3MgRXJyb3JGb250e2NvbnN0cnVjdG9yKGUpe3RoaXMuZXJyb3I9ZTt0aGlzLmxvYWRlZE5hbWU9ImdfZm9udF9lcnJvciI7dGhpcy5taXNzaW5nRmlsZT0hMH1jaGFyc1RvR2x5cGhzKCl7cmV0dXJuW119ZW5jb2RlU3RyaW5nKGUpe3JldHVybltlXX1leHBvcnREYXRhKGU9ITEpe3JldHVybntlcnJvcjp0aGlzLmVycm9yfX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ0ZGVG9wRGljdD10LkNGRlN0cmluZ3M9dC5DRkZTdGFuZGFyZFN0cmluZ3M9dC5DRkZQcml2YXRlRGljdD10LkNGRlBhcnNlcj10LkNGRkluZGV4PXQuQ0ZGSGVhZGVyPXQuQ0ZGRkRTZWxlY3Q9dC5DRkZDb21waWxlcj10LkNGRkNoYXJzZXQ9dC5DRkY9dm9pZCAwO3ZhciByPWEoMiksbj1hKDM2KSxpPWEoMzcpO2NvbnN0IHM9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsInF1ZXN0aW9uZG93biIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIkFFIiwib3JkZmVtaW5pbmUiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsImFlIiwiZG90bGVzc2kiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCJvbmVzdXBlcmlvciIsImxvZ2ljYWxub3QiLCJtdSIsInRyYWRlbWFyayIsIkV0aCIsIm9uZWhhbGYiLCJwbHVzbWludXMiLCJUaG9ybiIsIm9uZXF1YXJ0ZXIiLCJkaXZpZGUiLCJicm9rZW5iYXIiLCJkZWdyZWUiLCJ0aG9ybiIsInRocmVlcXVhcnRlcnMiLCJ0d29zdXBlcmlvciIsInJlZ2lzdGVyZWQiLCJtaW51cyIsImV0aCIsIm11bHRpcGx5IiwidGhyZWVzdXBlcmlvciIsImNvcHlyaWdodCIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQWRpZXJlc2lzIiwiQWdyYXZlIiwiQXJpbmciLCJBdGlsZGUiLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJOdGlsZGUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk9kaWVyZXNpcyIsIk9ncmF2ZSIsIk90aWxkZSIsIlNjYXJvbiIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiVWdyYXZlIiwiWWFjdXRlIiwiWWRpZXJlc2lzIiwiWmNhcm9uIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhZ3JhdmUiLCJhcmluZyIsImF0aWxkZSIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJlZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImlncmF2ZSIsIm50aWxkZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib2dyYXZlIiwib3RpbGRlIiwic2Nhcm9uIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ1Z3JhdmUiLCJ5YWN1dGUiLCJ5ZGllcmVzaXMiLCJ6Y2Fyb24iLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiaXN1cGVyaW9yIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiZmYiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiRG90YWNjZW50c21hbGwiLCJNYWNyb25zbWFsbCIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiemVyb3N1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIiwiMDAxLjAwMCIsIjAwMS4wMDEiLCIwMDEuMDAyIiwiMDAxLjAwMyIsIkJsYWNrIiwiQm9sZCIsIkJvb2siLCJMaWdodCIsIk1lZGl1bSIsIlJlZ3VsYXIiLCJSb21hbiIsIlNlbWlib2xkIl07dC5DRkZTdGFuZGFyZFN0cmluZ3M9cztjb25zdCBvPTM5MSxjPVtudWxsLHtpZDoiaHN0ZW0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0sbnVsbCx7aWQ6InZzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoidm1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybGluZXRvIixtaW46MixyZXNldFN0YWNrOiEwfSx7aWQ6ImhsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoidmxpbmV0byIsbWluOjEscmVzZXRTdGFjazohMH0se2lkOiJycmN1cnZldG8iLG1pbjo2LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsc3ViciIsbWluOjEsdW5kZWZTdGFjazohMH0se2lkOiJyZXR1cm4iLG1pbjowLHVuZGVmU3RhY2s6ITB9LG51bGwsbnVsbCx7aWQ6ImVuZGNoYXIiLG1pbjowLHN0YWNrQ2xlYXJpbmc6ITB9LG51bGwsbnVsbCxudWxsLHtpZDoiaHN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6ImhpbnRtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6ImNudHJtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6InJtb3ZldG8iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoiaG1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJ2c3RlbWhtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoicmN1cnZlbGluZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJybGluZWN1cnZlIixtaW46OCxyZXNldFN0YWNrOiEwfSx7aWQ6InZ2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJoaGN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsZ3N1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoidmhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSx7aWQ6Imh2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH1dLGw9W251bGwsbnVsbCxudWxsLHtpZDoiYW5kIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im9yIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im5vdCIsbWluOjEsc3RhY2tEZWx0YTowfSxudWxsLG51bGwsbnVsbCx7aWQ6ImFicyIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImFkZCIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXStlW3QtMV19fSx7aWQ6InN1YiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXS1lW3QtMV19fSx7aWQ6ImRpdiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXS9lW3QtMV19fSxudWxsLHtpZDoibmVnIixtaW46MSxzdGFja0RlbHRhOjAsc3RhY2tGbihlLHQpe2VbdC0xXT0tZVt0LTFdfX0se2lkOiJlcSIsbWluOjIsc3RhY2tEZWx0YTotMX0sbnVsbCxudWxsLHtpZDoiZHJvcCIsbWluOjEsc3RhY2tEZWx0YTotMX0sbnVsbCx7aWQ6InB1dCIsbWluOjIsc3RhY2tEZWx0YTotMn0se2lkOiJnZXQiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJpZmVsc2UiLG1pbjo0LHN0YWNrRGVsdGE6LTN9LHtpZDoicmFuZG9tIixtaW46MCxzdGFja0RlbHRhOjF9LHtpZDoibXVsIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdKmVbdC0xXX19LG51bGwse2lkOiJzcXJ0IixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiZHVwIixtaW46MSxzdGFja0RlbHRhOjF9LHtpZDoiZXhjaCIsbWluOjIsc3RhY2tEZWx0YTowfSx7aWQ6ImluZGV4IixtaW46MixzdGFja0RlbHRhOjB9LHtpZDoicm9sbCIsbWluOjMsc3RhY2tEZWx0YTotMn0sbnVsbCxudWxsLG51bGwse2lkOiJoZmxleCIsbWluOjcscmVzZXRTdGFjazohMH0se2lkOiJmbGV4IixtaW46MTMscmVzZXRTdGFjazohMH0se2lkOiJoZmxleDEiLG1pbjo5LHJlc2V0U3RhY2s6ITB9LHtpZDoiZmxleDEiLG1pbjoxMSxyZXNldFN0YWNrOiEwfV07dC5DRkZQYXJzZXI9Y2xhc3MgQ0ZGUGFyc2Vye2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmJ5dGVzPWUuZ2V0Qnl0ZXMoKTt0aGlzLnByb3BlcnRpZXM9dDt0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQ9ISFhfXBhcnNlKCl7Y29uc3QgZT10aGlzLnByb3BlcnRpZXMsdD1uZXcgQ0ZGO3RoaXMuY2ZmPXQ7Y29uc3QgYT10aGlzLnBhcnNlSGVhZGVyKCkscj10aGlzLnBhcnNlSW5kZXgoYS5lbmRQb3MpLG49dGhpcy5wYXJzZUluZGV4KHIuZW5kUG9zKSxpPXRoaXMucGFyc2VJbmRleChuLmVuZFBvcykscz10aGlzLnBhcnNlSW5kZXgoaS5lbmRQb3MpLG89dGhpcy5wYXJzZURpY3Qobi5vYmouZ2V0KDApKSxjPXRoaXMuY3JlYXRlRGljdChDRkZUb3BEaWN0LG8sdC5zdHJpbmdzKTt0LmhlYWRlcj1hLm9iajt0Lm5hbWVzPXRoaXMucGFyc2VOYW1lSW5kZXgoci5vYmopO3Quc3RyaW5ncz10aGlzLnBhcnNlU3RyaW5nSW5kZXgoaS5vYmopO3QudG9wRGljdD1jO3QuZ2xvYmFsU3VickluZGV4PXMub2JqO3RoaXMucGFyc2VQcml2YXRlRGljdCh0LnRvcERpY3QpO3QuaXNDSURGb250PWMuaGFzTmFtZSgiUk9TIik7Y29uc3QgbD1jLmdldEJ5TmFtZSgiQ2hhclN0cmluZ3MiKSxoPXRoaXMucGFyc2VJbmRleChsKS5vYmosdT1jLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpO3UmJihlLmZvbnRNYXRyaXg9dSk7Y29uc3QgZD1jLmdldEJ5TmFtZSgiRm9udEJCb3giKTtpZihkKXtlLmFzY2VudD1NYXRoLm1heChkWzNdLGRbMV0pO2UuZGVzY2VudD1NYXRoLm1pbihkWzFdLGRbM10pO2UuYXNjZW50U2NhbGVkPSEwfWxldCBmLGc7aWYodC5pc0NJREZvbnQpe2NvbnN0IGU9dGhpcy5wYXJzZUluZGV4KGMuZ2V0QnlOYW1lKCJGREFycmF5IikpLm9iajtmb3IobGV0IGE9MCxyPWUuY291bnQ7YTxyOysrYSl7Y29uc3Qgcj1lLmdldChhKSxuPXRoaXMuY3JlYXRlRGljdChDRkZUb3BEaWN0LHRoaXMucGFyc2VEaWN0KHIpLHQuc3RyaW5ncyk7dGhpcy5wYXJzZVByaXZhdGVEaWN0KG4pO3QuZmRBcnJheS5wdXNoKG4pfWc9bnVsbDtmPXRoaXMucGFyc2VDaGFyc2V0cyhjLmdldEJ5TmFtZSgiY2hhcnNldCIpLGguY291bnQsdC5zdHJpbmdzLCEwKTt0LmZkU2VsZWN0PXRoaXMucGFyc2VGRFNlbGVjdChjLmdldEJ5TmFtZSgiRkRTZWxlY3QiKSxoLmNvdW50KX1lbHNle2Y9dGhpcy5wYXJzZUNoYXJzZXRzKGMuZ2V0QnlOYW1lKCJjaGFyc2V0IiksaC5jb3VudCx0LnN0cmluZ3MsITEpO2c9dGhpcy5wYXJzZUVuY29kaW5nKGMuZ2V0QnlOYW1lKCJFbmNvZGluZyIpLGUsdC5zdHJpbmdzLGYuY2hhcnNldCl9dC5jaGFyc2V0PWY7dC5lbmNvZGluZz1nO2NvbnN0IHA9dGhpcy5wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczpoLGxvY2FsU3VickluZGV4OmMucHJpdmF0ZURpY3Quc3VicnNJbmRleCxnbG9iYWxTdWJySW5kZXg6cy5vYmosZmRTZWxlY3Q6dC5mZFNlbGVjdCxmZEFycmF5OnQuZmRBcnJheSxwcml2YXRlRGljdDpjLnByaXZhdGVEaWN0fSk7dC5jaGFyU3RyaW5ncz1wLmNoYXJTdHJpbmdzO3Quc2VhY3M9cC5zZWFjczt0LndpZHRocz1wLndpZHRocztyZXR1cm4gdH1wYXJzZUhlYWRlcigpe2xldCBlPXRoaXMuYnl0ZXM7Y29uc3QgdD1lLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTx0JiYxIT09ZVthXTspKythO2lmKGE+PXQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgQ0ZGIGhlYWRlciIpO2lmKDAhPT1hKXsoMCxyLmluZm8pKCJjZmYgZGF0YSBpcyBzaGlmdGVkIik7ZT1lLnN1YmFycmF5KGEpO3RoaXMuYnl0ZXM9ZX1jb25zdCBuPWVbMF0saT1lWzFdLHM9ZVsyXSxvPWVbM107cmV0dXJue29iajpuZXcgQ0ZGSGVhZGVyKG4saSxzLG8pLGVuZFBvczpzfX1wYXJzZURpY3QoZSl7bGV0IHQ9MDtmdW5jdGlvbiBwYXJzZU9wZXJhbmQoKXtsZXQgYT1lW3QrK107aWYoMzA9PT1hKXJldHVybiBmdW5jdGlvbiBwYXJzZUZsb2F0T3BlcmFuZCgpe2xldCBhPSIiO2NvbnN0IHI9MTUsbj1bIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIuIiwiRSIsIkUtIixudWxsLCItIl0saT1lLmxlbmd0aDtmb3IoO3Q8aTspe2NvbnN0IGk9ZVt0KytdLHM9aT4+NCxvPTE1Jmk7aWYocz09PXIpYnJlYWs7YSs9bltzXTtpZihvPT09cilicmVhazthKz1uW29dfXJldHVybiBwYXJzZUZsb2F0KGEpfSgpO2lmKDI4PT09YSl7YT1lW3QrK107YT0oYTw8MjR8ZVt0KytdPDwxNik+PjE2O3JldHVybiBhfWlmKDI5PT09YSl7YT1lW3QrK107YT1hPDw4fGVbdCsrXTthPWE8PDh8ZVt0KytdO2E9YTw8OHxlW3QrK107cmV0dXJuIGF9aWYoYT49MzImJmE8PTI0NilyZXR1cm4gYS0xMzk7aWYoYT49MjQ3JiZhPD0yNTApcmV0dXJuIDI1NiooYS0yNDcpK2VbdCsrXSsxMDg7aWYoYT49MjUxJiZhPD0yNTQpcmV0dXJuLTI1NiooYS0yNTEpLWVbdCsrXS0xMDg7KDAsci53YXJuKSgnQ0ZGUGFyc2VyX3BhcnNlRGljdDogIicrYSsnIiBpcyBhIHJlc2VydmVkIGNvbW1hbmQuJyk7cmV0dXJuIE5hTn1sZXQgYT1bXTtjb25zdCBuPVtdO3Q9MDtjb25zdCBpPWUubGVuZ3RoO2Zvcig7dDxpOyl7bGV0IHI9ZVt0XTtpZihyPD0yMSl7MTI9PT1yJiYocj1yPDw4fGVbKyt0XSk7bi5wdXNoKFtyLGFdKTthPVtdOysrdH1lbHNlIGEucHVzaChwYXJzZU9wZXJhbmQoKSl9cmV0dXJuIG59cGFyc2VJbmRleChlKXtjb25zdCB0PW5ldyBDRkZJbmRleCxhPXRoaXMuYnl0ZXMscj1hW2UrK108PDh8YVtlKytdLG49W107bGV0IGkscyxvPWU7aWYoMCE9PXIpe2NvbnN0IHQ9YVtlKytdLGM9ZSsocisxKSp0LTE7Zm9yKGk9MCxzPXIrMTtpPHM7KytpKXtsZXQgcj0wO2ZvcihsZXQgbj0wO248dDsrK24pe3I8PD04O3IrPWFbZSsrXX1uLnB1c2goYytyKX1vPW5bcl19Zm9yKGk9MCxzPW4ubGVuZ3RoLTE7aTxzOysraSl7Y29uc3QgZT1uW2ldLHI9bltpKzFdO3QuYWRkKGEuc3ViYXJyYXkoZSxyKSl9cmV0dXJue29iajp0LGVuZFBvczpvfX1wYXJzZU5hbWVJbmRleChlKXtjb25zdCB0PVtdO2ZvcihsZXQgYT0wLG49ZS5jb3VudDthPG47KythKXtjb25zdCBuPWUuZ2V0KGEpO3QucHVzaCgoMCxyLmJ5dGVzVG9TdHJpbmcpKG4pKX1yZXR1cm4gdH1wYXJzZVN0cmluZ0luZGV4KGUpe2NvbnN0IHQ9bmV3IENGRlN0cmluZ3M7Zm9yKGxldCBhPTAsbj1lLmNvdW50O2E8bjsrK2Epe2NvbnN0IG49ZS5nZXQoYSk7dC5hZGQoKDAsci5ieXRlc1RvU3RyaW5nKShuKSl9cmV0dXJuIHR9Y3JlYXRlRGljdChlLHQsYSl7Y29uc3Qgcj1uZXcgZShhKTtmb3IoY29uc3RbZSxhXW9mIHQpci5zZXRCeUtleShlLGEpO3JldHVybiByfXBhcnNlQ2hhclN0cmluZyhlLHQsYSxuKXtpZighdHx8ZS5jYWxsRGVwdGg+MTApcmV0dXJuITE7bGV0IGk9ZS5zdGFja1NpemU7Y29uc3Qgcz1lLnN0YWNrO2xldCBvPXQubGVuZ3RoO2ZvcihsZXQgaD0wO2g8bzspe2NvbnN0IHU9dFtoKytdO2xldCBkPW51bGw7aWYoMTI9PT11KXtjb25zdCBlPXRbaCsrXTtpZigwPT09ZSl7dFtoLTJdPTEzOTt0W2gtMV09MjI7aT0wfWVsc2UgZD1sW2VdfWVsc2UgaWYoMjg9PT11KXtzW2ldPSh0W2hdPDwyNHx0W2grMV08PDE2KT4+MTY7aCs9MjtpKyt9ZWxzZSBpZigxND09PXUpe2lmKGk+PTQpe2ktPTQ7aWYodGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKXtlLnNlYWM9cy5zbGljZShpLGkrNCk7cmV0dXJuITF9fWQ9Y1t1XX1lbHNlIGlmKHU+PTMyJiZ1PD0yNDYpe3NbaV09dS0xMzk7aSsrfWVsc2UgaWYodT49MjQ3JiZ1PD0yNTQpe3NbaV09dTwyNTE/KHUtMjQ3PDw4KSt0W2hdKzEwODotKHUtMjUxPDw4KS10W2hdLTEwODtoKys7aSsrfWVsc2UgaWYoMjU1PT09dSl7c1tpXT0odFtoXTw8MjR8dFtoKzFdPDwxNnx0W2grMl08PDh8dFtoKzNdKS82NTUzNjtoKz00O2krK31lbHNlIGlmKDE5PT09dXx8MjA9PT11KXtlLmhpbnRzKz1pPj4xO2lmKDA9PT1lLmhpbnRzKXt0LmNvcHlXaXRoaW4oaC0xLGgsLTEpO2gtPTE7by09MTtjb250aW51ZX1oKz1lLmhpbnRzKzc+PjM7aSU9MjtkPWNbdV19ZWxzZXtpZigxMD09PXV8fDI5PT09dSl7Y29uc3QgdD0xMD09PXU/YTpuO2lmKCF0KXtkPWNbdV07KDAsci53YXJuKSgiTWlzc2luZyBzdWJyc0luZGV4IGZvciAiK2QuaWQpO3JldHVybiExfWxldCBvPTMyNzY4O3QuY291bnQ8MTI0MD9vPTEwNzp0LmNvdW50PDMzOTAwJiYobz0xMTMxKTtjb25zdCBsPXNbLS1pXStvO2lmKGw8MHx8bD49dC5jb3VudHx8aXNOYU4obCkpe2Q9Y1t1XTsoMCxyLndhcm4pKCJPdXQgb2YgYm91bmRzIHN1YnJJbmRleCBmb3IgIitkLmlkKTtyZXR1cm4hMX1lLnN0YWNrU2l6ZT1pO2UuY2FsbERlcHRoKys7aWYoIXRoaXMucGFyc2VDaGFyU3RyaW5nKGUsdC5nZXQobCksYSxuKSlyZXR1cm4hMTtlLmNhbGxEZXB0aC0tO2k9ZS5zdGFja1NpemU7Y29udGludWV9aWYoMTE9PT11KXtlLnN0YWNrU2l6ZT1pO3JldHVybiEwfWlmKDA9PT11JiZoPT09dC5sZW5ndGgpe3RbaC0xXT0xNDtkPWNbMTRdfWVsc2V7aWYoOT09PXUpe3QuY29weVdpdGhpbihoLTEsaCwtMSk7aC09MTtvLT0xO2NvbnRpbnVlfWQ9Y1t1XX19aWYoZCl7aWYoZC5zdGVtKXtlLmhpbnRzKz1pPj4xO2lmKDM9PT11fHwyMz09PXUpZS5oYXNWU3RlbXM9ITA7ZWxzZSBpZihlLmhhc1ZTdGVtcyYmKDE9PT11fHwxOD09PXUpKXsoMCxyLndhcm4pKCJDRkYgc3RlbSBoaW50cyBhcmUgaW4gd3Jvbmcgb3JkZXIiKTt0W2gtMV09MT09PXU/MzoyM319aWYoIm1pbiJpbiBkJiYhZS51bmRlZlN0YWNrJiZpPGQubWluKXsoMCxyLndhcm4pKCJOb3QgZW5vdWdoIHBhcmFtZXRlcnMgZm9yICIrZC5pZCsiOyBhY3R1YWw6ICIraSsiLCBleHBlY3RlZDogIitkLm1pbik7aWYoMD09PWkpe3RbaC0xXT0xNDtyZXR1cm4hMH1yZXR1cm4hMX1pZihlLmZpcnN0U3RhY2tDbGVhcmluZyYmZC5zdGFja0NsZWFyaW5nKXtlLmZpcnN0U3RhY2tDbGVhcmluZz0hMTtpLT1kLm1pbjtpPj0yJiZkLnN0ZW0/aSU9MjppPjEmJigwLHIud2FybikoIkZvdW5kIHRvbyBtYW55IHBhcmFtZXRlcnMgZm9yIHN0YWNrLWNsZWFyaW5nIGNvbW1hbmQiKTtpPjAmJihlLndpZHRoPXNbaS0xXSl9aWYoInN0YWNrRGVsdGEiaW4gZCl7InN0YWNrRm4iaW4gZCYmZC5zdGFja0ZuKHMsaSk7aSs9ZC5zdGFja0RlbHRhfWVsc2UgaWYoZC5zdGFja0NsZWFyaW5nKWk9MDtlbHNlIGlmKGQucmVzZXRTdGFjayl7aT0wO2UudW5kZWZTdGFjaz0hMX1lbHNlIGlmKGQudW5kZWZTdGFjayl7aT0wO2UudW5kZWZTdGFjaz0hMDtlLmZpcnN0U3RhY2tDbGVhcmluZz0hMX19fW88dC5sZW5ndGgmJnQuZmlsbCgxNCxvKTtlLnN0YWNrU2l6ZT1pO3JldHVybiEwfXBhcnNlQ2hhclN0cmluZ3Moe2NoYXJTdHJpbmdzOmUsbG9jYWxTdWJySW5kZXg6dCxnbG9iYWxTdWJySW5kZXg6YSxmZFNlbGVjdDpuLGZkQXJyYXk6aSxwcml2YXRlRGljdDpzfSl7Y29uc3Qgbz1bXSxjPVtdLGw9ZS5jb3VudDtmb3IobGV0IGg9MDtoPGw7aCsrKXtjb25zdCBsPWUuZ2V0KGgpLHU9e2NhbGxEZXB0aDowLHN0YWNrU2l6ZTowLHN0YWNrOltdLHVuZGVmU3RhY2s6ITAsaGludHM6MCxmaXJzdFN0YWNrQ2xlYXJpbmc6ITAsc2VhYzpudWxsLHdpZHRoOm51bGwsaGFzVlN0ZW1zOiExfTtsZXQgZD0hMCxmPW51bGwsZz1zO2lmKG4mJmkubGVuZ3RoKXtjb25zdCBlPW4uZ2V0RkRJbmRleChoKTtpZigtMT09PWUpeygwLHIud2FybikoIkdseXBoIGluZGV4IGlzIG5vdCBpbiBmZCBzZWxlY3QuIik7ZD0hMX1pZihlPj1pLmxlbmd0aCl7KDAsci53YXJuKSgiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguIik7ZD0hMX1pZihkKXtnPWlbZV0ucHJpdmF0ZURpY3Q7Zj1nLnN1YnJzSW5kZXh9fWVsc2UgdCYmKGY9dCk7ZCYmKGQ9dGhpcy5wYXJzZUNoYXJTdHJpbmcodSxsLGYsYSkpO2lmKG51bGwhPT11LndpZHRoKXtjb25zdCBlPWcuZ2V0QnlOYW1lKCJub21pbmFsV2lkdGhYIik7Y1toXT1lK3Uud2lkdGh9ZWxzZXtjb25zdCBlPWcuZ2V0QnlOYW1lKCJkZWZhdWx0V2lkdGhYIik7Y1toXT1lfW51bGwhPT11LnNlYWMmJihvW2hdPXUuc2VhYyk7ZHx8ZS5zZXQoaCxuZXcgVWludDhBcnJheShbMTRdKSl9cmV0dXJue2NoYXJTdHJpbmdzOmUsc2VhY3M6byx3aWR0aHM6Y319ZW1wdHlQcml2YXRlRGljdGlvbmFyeShlKXtjb25zdCB0PXRoaXMuY3JlYXRlRGljdChDRkZQcml2YXRlRGljdCxbXSxlLnN0cmluZ3MpO2Uuc2V0QnlLZXkoMTgsWzAsMF0pO2UucHJpdmF0ZURpY3Q9dH1wYXJzZVByaXZhdGVEaWN0KGUpe2lmKCFlLmhhc05hbWUoIlByaXZhdGUiKSl7dGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO3JldHVybn1jb25zdCB0PWUuZ2V0QnlOYW1lKCJQcml2YXRlIik7aWYoIUFycmF5LmlzQXJyYXkodCl8fDIhPT10Lmxlbmd0aCl7ZS5yZW1vdmVCeU5hbWUoIlByaXZhdGUiKTtyZXR1cm59Y29uc3QgYT10WzBdLHI9dFsxXTtpZigwPT09YXx8cj49dGhpcy5ieXRlcy5sZW5ndGgpe3RoaXMuZW1wdHlQcml2YXRlRGljdGlvbmFyeShlKTtyZXR1cm59Y29uc3Qgbj1yK2EsaT10aGlzLmJ5dGVzLnN1YmFycmF5KHIsbikscz10aGlzLnBhcnNlRGljdChpKSxvPXRoaXMuY3JlYXRlRGljdChDRkZQcml2YXRlRGljdCxzLGUuc3RyaW5ncyk7ZS5wcml2YXRlRGljdD1vOzA9PT1vLmdldEJ5TmFtZSgiRXhwYW5zaW9uRmFjdG9yIikmJm8uc2V0QnlOYW1lKCJFeHBhbnNpb25GYWN0b3IiLC4wNik7aWYoIW8uZ2V0QnlOYW1lKCJTdWJycyIpKXJldHVybjtjb25zdCBjPW8uZ2V0QnlOYW1lKCJTdWJycyIpLGw9citjO2lmKDA9PT1jfHxsPj10aGlzLmJ5dGVzLmxlbmd0aCl7dGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO3JldHVybn1jb25zdCBoPXRoaXMucGFyc2VJbmRleChsKTtvLnN1YnJzSW5kZXg9aC5vYmp9cGFyc2VDaGFyc2V0cyhlLHQsYSxpKXtpZigwPT09ZSlyZXR1cm4gbmV3IENGRkNoYXJzZXQoITAsZC5JU09fQURPQkUsbi5JU09BZG9iZUNoYXJzZXQpO2lmKDE9PT1lKXJldHVybiBuZXcgQ0ZGQ2hhcnNldCghMCxkLkVYUEVSVCxuLkV4cGVydENoYXJzZXQpO2lmKDI9PT1lKXJldHVybiBuZXcgQ0ZGQ2hhcnNldCghMCxkLkVYUEVSVF9TVUJTRVQsbi5FeHBlcnRTdWJzZXRDaGFyc2V0KTtjb25zdCBzPXRoaXMuYnl0ZXMsbz1lLGM9c1tlKytdLGw9W2k/MDoiLm5vdGRlZiJdO2xldCBoLHUsZjt0LT0xO3N3aXRjaChjKXtjYXNlIDA6Zm9yKGY9MDtmPHQ7ZisrKXtoPXNbZSsrXTw8OHxzW2UrK107bC5wdXNoKGk/aDphLmdldChoKSl9YnJlYWs7Y2FzZSAxOmZvcig7bC5sZW5ndGg8PXQ7KXtoPXNbZSsrXTw8OHxzW2UrK107dT1zW2UrK107Zm9yKGY9MDtmPD11O2YrKylsLnB1c2goaT9oKys6YS5nZXQoaCsrKSl9YnJlYWs7Y2FzZSAyOmZvcig7bC5sZW5ndGg8PXQ7KXtoPXNbZSsrXTw8OHxzW2UrK107dT1zW2UrK108PDh8c1tlKytdO2ZvcihmPTA7Zjw9dTtmKyspbC5wdXNoKGk/aCsrOmEuZ2V0KGgrKykpfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVua25vd24gY2hhcnNldCBmb3JtYXQiKX1jb25zdCBnPWUscD1zLnN1YmFycmF5KG8sZyk7cmV0dXJuIG5ldyBDRkZDaGFyc2V0KCExLGMsbCxwKX1wYXJzZUVuY29kaW5nKGUsdCxhLG4pe2NvbnN0IHM9T2JqZWN0LmNyZWF0ZShudWxsKSxvPXRoaXMuYnl0ZXM7bGV0IGMsbCxoLHU9ITEsZD1udWxsO2lmKDA9PT1lfHwxPT09ZSl7dT0hMDtjPWU7Y29uc3QgdD1lP2kuRXhwZXJ0RW5jb2Rpbmc6aS5TdGFuZGFyZEVuY29kaW5nO2ZvcihsPTAsaD1uLmxlbmd0aDtsPGg7bCsrKXtjb25zdCBlPXQuaW5kZXhPZihuW2xdKTstMSE9PWUmJihzW2VdPWwpfX1lbHNle2NvbnN0IHQ9ZTtjPW9bZSsrXTtzd2l0Y2goMTI3JmMpe2Nhc2UgMDpjb25zdCB0PW9bZSsrXTtmb3IobD0xO2w8PXQ7bCsrKXNbb1tlKytdXT1sO2JyZWFrO2Nhc2UgMTpjb25zdCBhPW9bZSsrXTtsZXQgbj0xO2ZvcihsPTA7bDxhO2wrKyl7Y29uc3QgdD1vW2UrK10sYT1vW2UrK107Zm9yKGxldCBlPXQ7ZTw9dCthO2UrKylzW2VdPW4rK31icmVhaztkZWZhdWx0OnRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmtub3duIGVuY29kaW5nIGZvcm1hdDogJHtjfSBpbiBDRkZgKX1jb25zdCBpPWU7aWYoMTI4JmMpe29bdF0mPTEyNzshZnVuY3Rpb24gcmVhZFN1cHBsZW1lbnQoKXtjb25zdCB0PW9bZSsrXTtmb3IobD0wO2w8dDtsKyspe2NvbnN0IHQ9b1tlKytdLHI9KG9bZSsrXTw8OCkrKDI1NSZvW2UrK10pO3NbdF09bi5pbmRleE9mKGEuZ2V0KHIpKX19KCl9ZD1vLnN1YmFycmF5KHQsaSl9YyY9MTI3O3JldHVybiBuZXcgQ0ZGRW5jb2RpbmcodSxjLHMsZCl9cGFyc2VGRFNlbGVjdChlLHQpe2NvbnN0IGE9dGhpcy5ieXRlcyxuPWFbZSsrXSxpPVtdO2xldCBzO3N3aXRjaChuKXtjYXNlIDA6Zm9yKHM9MDtzPHQ7KytzKXtjb25zdCB0PWFbZSsrXTtpLnB1c2godCl9YnJlYWs7Y2FzZSAzOmNvbnN0IG89YVtlKytdPDw4fGFbZSsrXTtmb3Iocz0wO3M8bzsrK3Mpe2xldCB0PWFbZSsrXTw8OHxhW2UrK107aWYoMD09PXMmJjAhPT10KXsoMCxyLndhcm4pKCJwYXJzZUZEU2VsZWN0OiBUaGUgZmlyc3QgcmFuZ2UgbXVzdCBoYXZlIGEgZmlyc3QgR0lEIG9mIDAgLS0gdHJ5aW5nIHRvIHJlY292ZXIuIik7dD0wfWNvbnN0IG49YVtlKytdLG89YVtlXTw8OHxhW2UrMV07Zm9yKGxldCBlPXQ7ZTxvOysrZSlpLnB1c2gobil9ZSs9MjticmVhaztkZWZhdWx0OnRocm93IG5ldyByLkZvcm1hdEVycm9yKGBwYXJzZUZEU2VsZWN0OiBVbmtub3duIGZvcm1hdCAiJHtufSIuYCl9aWYoaS5sZW5ndGghPT10KXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS4iKTtyZXR1cm4gbmV3IENGRkZEU2VsZWN0KG4saSl9fTtjbGFzcyBDRkZ7Y29uc3RydWN0b3IoKXt0aGlzLmhlYWRlcj1udWxsO3RoaXMubmFtZXM9W107dGhpcy50b3BEaWN0PW51bGw7dGhpcy5zdHJpbmdzPW5ldyBDRkZTdHJpbmdzO3RoaXMuZ2xvYmFsU3VickluZGV4PW51bGw7dGhpcy5lbmNvZGluZz1udWxsO3RoaXMuY2hhcnNldD1udWxsO3RoaXMuY2hhclN0cmluZ3M9bnVsbDt0aGlzLmZkQXJyYXk9W107dGhpcy5mZFNlbGVjdD1udWxsO3RoaXMuaXNDSURGb250PSExfWR1cGxpY2F0ZUZpcnN0R2x5cGgoKXtpZih0aGlzLmNoYXJTdHJpbmdzLmNvdW50Pj02NTUzNSl7KDAsci53YXJuKSgiTm90IGVub3VnaCBzcGFjZSBpbiBjaGFyc3RyaW5ncyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIik7cmV0dXJufWNvbnN0IGU9dGhpcy5jaGFyU3RyaW5ncy5nZXQoMCk7dGhpcy5jaGFyU3RyaW5ncy5hZGQoZSk7dGhpcy5pc0NJREZvbnQmJnRoaXMuZmRTZWxlY3QuZmRTZWxlY3QucHVzaCh0aGlzLmZkU2VsZWN0LmZkU2VsZWN0WzBdKX1oYXNHbHlwaElkKGUpe2lmKGU8MHx8ZT49dGhpcy5jaGFyU3RyaW5ncy5jb3VudClyZXR1cm4hMTtyZXR1cm4gdGhpcy5jaGFyU3RyaW5ncy5nZXQoZSkubGVuZ3RoPjB9fXQuQ0ZGPUNGRjtjbGFzcyBDRkZIZWFkZXJ7Y29uc3RydWN0b3IoZSx0LGEscil7dGhpcy5tYWpvcj1lO3RoaXMubWlub3I9dDt0aGlzLmhkclNpemU9YTt0aGlzLm9mZlNpemU9cn19dC5DRkZIZWFkZXI9Q0ZGSGVhZGVyO2NsYXNzIENGRlN0cmluZ3N7Y29uc3RydWN0b3IoKXt0aGlzLnN0cmluZ3M9W119Z2V0KGUpe3JldHVybiBlPj0wJiZlPD0zOTA/c1tlXTplLW88PXRoaXMuc3RyaW5ncy5sZW5ndGg/dGhpcy5zdHJpbmdzW2Utb106c1swXX1nZXRTSUQoZSl7bGV0IHQ9cy5pbmRleE9mKGUpO2lmKC0xIT09dClyZXR1cm4gdDt0PXRoaXMuc3RyaW5ncy5pbmRleE9mKGUpO3JldHVybi0xIT09dD90K286LTF9YWRkKGUpe3RoaXMuc3RyaW5ncy5wdXNoKGUpfWdldCBjb3VudCgpe3JldHVybiB0aGlzLnN0cmluZ3MubGVuZ3RofX10LkNGRlN0cmluZ3M9Q0ZGU3RyaW5ncztjbGFzcyBDRkZJbmRleHtjb25zdHJ1Y3Rvcigpe3RoaXMub2JqZWN0cz1bXTt0aGlzLmxlbmd0aD0wfWFkZChlKXt0aGlzLmxlbmd0aCs9ZS5sZW5ndGg7dGhpcy5vYmplY3RzLnB1c2goZSl9c2V0KGUsdCl7dGhpcy5sZW5ndGgrPXQubGVuZ3RoLXRoaXMub2JqZWN0c1tlXS5sZW5ndGg7dGhpcy5vYmplY3RzW2VdPXR9Z2V0KGUpe3JldHVybiB0aGlzLm9iamVjdHNbZV19Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMub2JqZWN0cy5sZW5ndGh9fXQuQ0ZGSW5kZXg9Q0ZGSW5kZXg7Y2xhc3MgQ0ZGRGljdHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMua2V5VG9OYW1lTWFwPWUua2V5VG9OYW1lTWFwO3RoaXMubmFtZVRvS2V5TWFwPWUubmFtZVRvS2V5TWFwO3RoaXMuZGVmYXVsdHM9ZS5kZWZhdWx0czt0aGlzLnR5cGVzPWUudHlwZXM7dGhpcy5vcGNvZGVzPWUub3Bjb2Rlczt0aGlzLm9yZGVyPWUub3JkZXI7dGhpcy5zdHJpbmdzPXQ7dGhpcy52YWx1ZXM9T2JqZWN0LmNyZWF0ZShudWxsKX1zZXRCeUtleShlLHQpe2lmKCEoZSBpbiB0aGlzLmtleVRvTmFtZU1hcCkpcmV0dXJuITE7aWYoMD09PXQubGVuZ3RoKXJldHVybiEwO2Zvcihjb25zdCBhIG9mIHQpaWYoaXNOYU4oYSkpeygwLHIud2FybikoYEludmFsaWQgQ0ZGRGljdCB2YWx1ZTogIiR7dH0iIGZvciBrZXkgIiR7ZX0iLmApO3JldHVybiEwfWNvbnN0IGE9dGhpcy50eXBlc1tlXTsibnVtIiE9PWEmJiJzaWQiIT09YSYmIm9mZnNldCIhPT1hfHwodD10WzBdKTt0aGlzLnZhbHVlc1tlXT10O3JldHVybiEwfXNldEJ5TmFtZShlLHQpe2lmKCEoZSBpbiB0aGlzLm5hbWVUb0tleU1hcCkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgZGljdGlvbmFyeSBuYW1lICIke2V9ImApO3RoaXMudmFsdWVzW3RoaXMubmFtZVRvS2V5TWFwW2VdXT10fWhhc05hbWUoZSl7cmV0dXJuIHRoaXMubmFtZVRvS2V5TWFwW2VdaW4gdGhpcy52YWx1ZXN9Z2V0QnlOYW1lKGUpe2lmKCEoZSBpbiB0aGlzLm5hbWVUb0tleU1hcCkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgZGljdGlvbmFyeSBuYW1lICR7ZX0iYCk7Y29uc3QgdD10aGlzLm5hbWVUb0tleU1hcFtlXTtyZXR1cm4gdCBpbiB0aGlzLnZhbHVlcz90aGlzLnZhbHVlc1t0XTp0aGlzLmRlZmF1bHRzW3RdfXJlbW92ZUJ5TmFtZShlKXtkZWxldGUgdGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbZV1dfXN0YXRpYyBjcmVhdGVUYWJsZXMoZSl7Y29uc3QgdD17a2V5VG9OYW1lTWFwOnt9LG5hbWVUb0tleU1hcDp7fSxkZWZhdWx0czp7fSx0eXBlczp7fSxvcGNvZGVzOnt9LG9yZGVyOltdfTtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCBlPUFycmF5LmlzQXJyYXkoYVswXSk/KGFbMF1bMF08PDgpK2FbMF1bMV06YVswXTt0LmtleVRvTmFtZU1hcFtlXT1hWzFdO3QubmFtZVRvS2V5TWFwW2FbMV1dPWU7dC50eXBlc1tlXT1hWzJdO3QuZGVmYXVsdHNbZV09YVszXTt0Lm9wY29kZXNbZV09QXJyYXkuaXNBcnJheShhWzBdKT9hWzBdOlthWzBdXTt0Lm9yZGVyLnB1c2goZSl9cmV0dXJuIHR9fWNvbnN0IGg9W1tbMTIsMzBdLCJST1MiLFsic2lkIiwic2lkIiwibnVtIl0sbnVsbF0sW1sxMiwyMF0sIlN5bnRoZXRpY0Jhc2UiLCJudW0iLG51bGxdLFswLCJ2ZXJzaW9uIiwic2lkIixudWxsXSxbMSwiTm90aWNlIiwic2lkIixudWxsXSxbWzEyLDBdLCJDb3B5cmlnaHQiLCJzaWQiLG51bGxdLFsyLCJGdWxsTmFtZSIsInNpZCIsbnVsbF0sWzMsIkZhbWlseU5hbWUiLCJzaWQiLG51bGxdLFs0LCJXZWlnaHQiLCJzaWQiLG51bGxdLFtbMTIsMV0sImlzRml4ZWRQaXRjaCIsIm51bSIsMF0sW1sxMiwyXSwiSXRhbGljQW5nbGUiLCJudW0iLDBdLFtbMTIsM10sIlVuZGVybGluZVBvc2l0aW9uIiwibnVtIiwtMTAwXSxbWzEyLDRdLCJVbmRlcmxpbmVUaGlja25lc3MiLCJudW0iLDUwXSxbWzEyLDVdLCJQYWludFR5cGUiLCJudW0iLDBdLFtbMTIsNl0sIkNoYXJzdHJpbmdUeXBlIiwibnVtIiwyXSxbWzEyLDddLCJGb250TWF0cml4IixbIm51bSIsIm51bSIsIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFsuMDAxLDAsMCwuMDAxLDAsMF1dLFsxMywiVW5pcXVlSUQiLCJudW0iLG51bGxdLFs1LCJGb250QkJveCIsWyJudW0iLCJudW0iLCJudW0iLCJudW0iXSxbMCwwLDAsMF1dLFtbMTIsOF0sIlN0cm9rZVdpZHRoIiwibnVtIiwwXSxbMTQsIlhVSUQiLCJhcnJheSIsbnVsbF0sWzE1LCJjaGFyc2V0Iiwib2Zmc2V0IiwwXSxbMTYsIkVuY29kaW5nIiwib2Zmc2V0IiwwXSxbMTcsIkNoYXJTdHJpbmdzIiwib2Zmc2V0IiwwXSxbMTgsIlByaXZhdGUiLFsib2Zmc2V0Iiwib2Zmc2V0Il0sbnVsbF0sW1sxMiwyMV0sIlBvc3RTY3JpcHQiLCJzaWQiLG51bGxdLFtbMTIsMjJdLCJCYXNlRm9udE5hbWUiLCJzaWQiLG51bGxdLFtbMTIsMjNdLCJCYXNlRm9udEJsZW5kIiwiZGVsdGEiLG51bGxdLFtbMTIsMzFdLCJDSURGb250VmVyc2lvbiIsIm51bSIsMF0sW1sxMiwzMl0sIkNJREZvbnRSZXZpc2lvbiIsIm51bSIsMF0sW1sxMiwzM10sIkNJREZvbnRUeXBlIiwibnVtIiwwXSxbWzEyLDM0XSwiQ0lEQ291bnQiLCJudW0iLDg3MjBdLFtbMTIsMzVdLCJVSURCYXNlIiwibnVtIixudWxsXSxbWzEyLDM3XSwiRkRTZWxlY3QiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzZdLCJGREFycmF5Iiwib2Zmc2V0IixudWxsXSxbWzEyLDM4XSwiRm9udE5hbWUiLCJzaWQiLG51bGxdXTtjbGFzcyBDRkZUb3BEaWN0IGV4dGVuZHMgQ0ZGRGljdHtzdGF0aWMgZ2V0IHRhYmxlcygpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKGgpKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihDRkZUb3BEaWN0LnRhYmxlcyxlKTt0aGlzLnByaXZhdGVEaWN0PW51bGx9fXQuQ0ZGVG9wRGljdD1DRkZUb3BEaWN0O2NvbnN0IHU9W1s2LCJCbHVlVmFsdWVzIiwiZGVsdGEiLG51bGxdLFs3LCJPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFs4LCJGYW1pbHlCbHVlcyIsImRlbHRhIixudWxsXSxbOSwiRmFtaWx5T3RoZXJCbHVlcyIsImRlbHRhIixudWxsXSxbWzEyLDldLCJCbHVlU2NhbGUiLCJudW0iLC4wMzk2MjVdLFtbMTIsMTBdLCJCbHVlU2hpZnQiLCJudW0iLDddLFtbMTIsMTFdLCJCbHVlRnV6eiIsIm51bSIsMV0sWzEwLCJTdGRIVyIsIm51bSIsbnVsbF0sWzExLCJTdGRWVyIsIm51bSIsbnVsbF0sW1sxMiwxMl0sIlN0ZW1TbmFwSCIsImRlbHRhIixudWxsXSxbWzEyLDEzXSwiU3RlbVNuYXBWIiwiZGVsdGEiLG51bGxdLFtbMTIsMTRdLCJGb3JjZUJvbGQiLCJudW0iLDBdLFtbMTIsMTddLCJMYW5ndWFnZUdyb3VwIiwibnVtIiwwXSxbWzEyLDE4XSwiRXhwYW5zaW9uRmFjdG9yIiwibnVtIiwuMDZdLFtbMTIsMTldLCJpbml0aWFsUmFuZG9tU2VlZCIsIm51bSIsMF0sWzIwLCJkZWZhdWx0V2lkdGhYIiwibnVtIiwwXSxbMjEsIm5vbWluYWxXaWR0aFgiLCJudW0iLDBdLFsxOSwiU3VicnMiLCJvZmZzZXQiLG51bGxdXTtjbGFzcyBDRkZQcml2YXRlRGljdCBleHRlbmRzIENGRkRpY3R7c3RhdGljIGdldCB0YWJsZXMoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywidGFibGVzIix0aGlzLmNyZWF0ZVRhYmxlcyh1KSl9Y29uc3RydWN0b3IoZSl7c3VwZXIoQ0ZGUHJpdmF0ZURpY3QudGFibGVzLGUpO3RoaXMuc3VicnNJbmRleD1udWxsfX10LkNGRlByaXZhdGVEaWN0PUNGRlByaXZhdGVEaWN0O2NvbnN0IGQ9e0lTT19BRE9CRTowLEVYUEVSVDoxLEVYUEVSVF9TVUJTRVQ6Mn07Y2xhc3MgQ0ZGQ2hhcnNldHtjb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLnByZWRlZmluZWQ9ZTt0aGlzLmZvcm1hdD10O3RoaXMuY2hhcnNldD1hO3RoaXMucmF3PXJ9fXQuQ0ZGQ2hhcnNldD1DRkZDaGFyc2V0O2NsYXNzIENGRkVuY29kaW5ne2NvbnN0cnVjdG9yKGUsdCxhLHIpe3RoaXMucHJlZGVmaW5lZD1lO3RoaXMuZm9ybWF0PXQ7dGhpcy5lbmNvZGluZz1hO3RoaXMucmF3PXJ9fWNsYXNzIENGRkZEU2VsZWN0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mb3JtYXQ9ZTt0aGlzLmZkU2VsZWN0PXR9Z2V0RkRJbmRleChlKXtyZXR1cm4gZTwwfHxlPj10aGlzLmZkU2VsZWN0Lmxlbmd0aD8tMTp0aGlzLmZkU2VsZWN0W2VdfX10LkNGRkZEU2VsZWN0PUNGRkZEU2VsZWN0O2NsYXNzIENGRk9mZnNldFRyYWNrZXJ7Y29uc3RydWN0b3IoKXt0aGlzLm9mZnNldHM9T2JqZWN0LmNyZWF0ZShudWxsKX1pc1RyYWNraW5nKGUpe3JldHVybiBlIGluIHRoaXMub2Zmc2V0c310cmFjayhlLHQpe2lmKGUgaW4gdGhpcy5vZmZzZXRzKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBBbHJlYWR5IHRyYWNraW5nIGxvY2F0aW9uIG9mICR7ZX1gKTt0aGlzLm9mZnNldHNbZV09dH1vZmZzZXQoZSl7Zm9yKGNvbnN0IHQgaW4gdGhpcy5vZmZzZXRzKXRoaXMub2Zmc2V0c1t0XSs9ZX1zZXRFbnRyeUxvY2F0aW9uKGUsdCxhKXtpZighKGUgaW4gdGhpcy5vZmZzZXRzKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgTm90IHRyYWNraW5nIGxvY2F0aW9uIG9mICR7ZX1gKTtjb25zdCBuPWEuZGF0YSxpPXRoaXMub2Zmc2V0c1tlXTtmb3IobGV0IGU9MCxhPXQubGVuZ3RoO2U8YTsrK2Upe2NvbnN0IGE9NSplK2kscz1hKzEsbz1hKzIsYz1hKzMsbD1hKzQ7aWYoMjkhPT1uW2FdfHwwIT09bltzXXx8MCE9PW5bb118fDAhPT1uW2NdfHwwIT09bltsXSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigid3JpdGluZyB0byBhbiBvZmZzZXQgdGhhdCBpcyBub3QgZW1wdHkiKTtjb25zdCBoPXRbZV07blthXT0yOTtuW3NdPWg+PjI0JjI1NTtuW29dPWg+PjE2JjI1NTtuW2NdPWg+PjgmMjU1O25bbF09MjU1Jmh9fX1jbGFzcyBDRkZDb21waWxlcntjb25zdHJ1Y3RvcihlKXt0aGlzLmNmZj1lfWNvbXBpbGUoKXtjb25zdCBlPXRoaXMuY2ZmLHQ9e2RhdGE6W10sbGVuZ3RoOjAsYWRkKGUpe3RyeXt0aGlzLmRhdGEucHVzaCguLi5lKX1jYXRjaHt0aGlzLmRhdGE9dGhpcy5kYXRhLmNvbmNhdChlKX10aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RofX0sYT10aGlzLmNvbXBpbGVIZWFkZXIoZS5oZWFkZXIpO3QuYWRkKGEpO2NvbnN0IG49dGhpcy5jb21waWxlTmFtZUluZGV4KGUubmFtZXMpO3QuYWRkKG4pO2lmKGUuaXNDSURGb250JiZlLnRvcERpY3QuaGFzTmFtZSgiRm9udE1hdHJpeCIpKXtjb25zdCB0PWUudG9wRGljdC5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKTtlLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJGb250TWF0cml4Iik7Zm9yKGNvbnN0IGEgb2YgZS5mZEFycmF5KXtsZXQgZT10LnNsaWNlKDApO2EuaGFzTmFtZSgiRm9udE1hdHJpeCIpJiYoZT1yLlV0aWwudHJhbnNmb3JtKGUsYS5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKSkpO2Euc2V0QnlOYW1lKCJGb250TWF0cml4IixlKX19Y29uc3QgaT1lLnRvcERpY3QuZ2V0QnlOYW1lKCJYVUlEIik7aT8ubGVuZ3RoPjE2JiZlLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJYVUlEIik7ZS50b3BEaWN0LnNldEJ5TmFtZSgiY2hhcnNldCIsMCk7bGV0IHM9dGhpcy5jb21waWxlVG9wRGljdHMoW2UudG9wRGljdF0sdC5sZW5ndGgsZS5pc0NJREZvbnQpO3QuYWRkKHMub3V0cHV0KTtjb25zdCBvPXMudHJhY2tlcnNbMF0sYz10aGlzLmNvbXBpbGVTdHJpbmdJbmRleChlLnN0cmluZ3Muc3RyaW5ncyk7dC5hZGQoYyk7Y29uc3QgbD10aGlzLmNvbXBpbGVJbmRleChlLmdsb2JhbFN1YnJJbmRleCk7dC5hZGQobCk7aWYoZS5lbmNvZGluZyYmZS50b3BEaWN0Lmhhc05hbWUoIkVuY29kaW5nIikpaWYoZS5lbmNvZGluZy5wcmVkZWZpbmVkKW8uc2V0RW50cnlMb2NhdGlvbigiRW5jb2RpbmciLFtlLmVuY29kaW5nLmZvcm1hdF0sdCk7ZWxzZXtjb25zdCBhPXRoaXMuY29tcGlsZUVuY29kaW5nKGUuZW5jb2RpbmcpO28uc2V0RW50cnlMb2NhdGlvbigiRW5jb2RpbmciLFt0Lmxlbmd0aF0sdCk7dC5hZGQoYSl9Y29uc3QgaD10aGlzLmNvbXBpbGVDaGFyc2V0KGUuY2hhcnNldCxlLmNoYXJTdHJpbmdzLmNvdW50LGUuc3RyaW5ncyxlLmlzQ0lERm9udCk7by5zZXRFbnRyeUxvY2F0aW9uKCJjaGFyc2V0IixbdC5sZW5ndGhdLHQpO3QuYWRkKGgpO2NvbnN0IHU9dGhpcy5jb21waWxlQ2hhclN0cmluZ3MoZS5jaGFyU3RyaW5ncyk7by5zZXRFbnRyeUxvY2F0aW9uKCJDaGFyU3RyaW5ncyIsW3QubGVuZ3RoXSx0KTt0LmFkZCh1KTtpZihlLmlzQ0lERm9udCl7by5zZXRFbnRyeUxvY2F0aW9uKCJGRFNlbGVjdCIsW3QubGVuZ3RoXSx0KTtjb25zdCBhPXRoaXMuY29tcGlsZUZEU2VsZWN0KGUuZmRTZWxlY3QpO3QuYWRkKGEpO3M9dGhpcy5jb21waWxlVG9wRGljdHMoZS5mZEFycmF5LHQubGVuZ3RoLCEwKTtvLnNldEVudHJ5TG9jYXRpb24oIkZEQXJyYXkiLFt0Lmxlbmd0aF0sdCk7dC5hZGQocy5vdXRwdXQpO2NvbnN0IHI9cy50cmFja2Vyczt0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoZS5mZEFycmF5LHIsdCl9dGhpcy5jb21waWxlUHJpdmF0ZURpY3RzKFtlLnRvcERpY3RdLFtvXSx0KTt0LmFkZChbMF0pO3JldHVybiB0LmRhdGF9ZW5jb2RlTnVtYmVyKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpP3RoaXMuZW5jb2RlSW50ZWdlcihlKTp0aGlzLmVuY29kZUZsb2F0KGUpfXN0YXRpYyBnZXQgRW5jb2RlRmxvYXRSZWdFeHAoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiRW5jb2RlRmxvYXRSZWdFeHAiLC9cLihcZCo/KSg/Ojl7NSwyMH18MHs1LDIwfSlcZHswLDJ9KD86ZSguKyl8JCkvKX1lbmNvZGVGbG9hdChlKXtsZXQgdD1lLnRvU3RyaW5nKCk7Y29uc3QgYT1DRkZDb21waWxlci5FbmNvZGVGbG9hdFJlZ0V4cC5leGVjKHQpO2lmKGEpe2NvbnN0IHI9cGFyc2VGbG9hdCgiMWUiKygoYVsyXT8rYVsyXTowKSthWzFdLmxlbmd0aCkpO3Q9KE1hdGgucm91bmQoZSpyKS9yKS50b1N0cmluZygpfWxldCByLG4saT0iIjtmb3Iocj0wLG49dC5sZW5ndGg7cjxuOysrcil7Y29uc3QgZT10W3JdO2krPSJlIj09PWU/Ii0iPT09dFsrK3JdPyJjIjoiYiI6Ii4iPT09ZT8iYSI6Ii0iPT09ZT8iZSI6ZX1pKz0xJmkubGVuZ3RoPyJmIjoiZmYiO2NvbnN0IHM9WzMwXTtmb3Iocj0wLG49aS5sZW5ndGg7cjxuO3IrPTIpcy5wdXNoKHBhcnNlSW50KGkuc3Vic3RyaW5nKHIscisyKSwxNikpO3JldHVybiBzfWVuY29kZUludGVnZXIoZSl7bGV0IHQ7dD1lPj0tMTA3JiZlPD0xMDc/W2UrMTM5XTplPj0xMDgmJmU8PTExMzE/WzI0NysoKGUtPTEwOCk+PjgpLDI1NSZlXTplPj0tMTEzMSYmZTw9LTEwOD9bMjUxKygoZT0tZS0xMDgpPj44KSwyNTUmZV06ZT49LTMyNzY4JiZlPD0zMjc2Nz9bMjgsZT4+OCYyNTUsMjU1JmVdOlsyOSxlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXTtyZXR1cm4gdH1jb21waWxlSGVhZGVyKGUpe3JldHVybltlLm1ham9yLGUubWlub3IsNCxlLm9mZlNpemVdfWNvbXBpbGVOYW1lSW5kZXgoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgZT1NYXRoLm1pbihhLmxlbmd0aCwxMjcpO2xldCBuPW5ldyBBcnJheShlKTtmb3IobGV0IHQ9MDt0PGU7dCsrKXtsZXQgZT1hW3RdOyhlPCIhInx8ZT4ifiJ8fCJbIj09PWV8fCJdIj09PWV8fCIoIj09PWV8fCIpIj09PWV8fCJ7Ij09PWV8fCJ9Ij09PWV8fCI8Ij09PWV8fCI+Ij09PWV8fCIvIj09PWV8fCIlIj09PWUpJiYoZT0iXyIpO25bdF09ZX1uPW4uam9pbigiIik7IiI9PT1uJiYobj0iQmFkX0ZvbnRfTmFtZSIpO3QuYWRkKCgwLHIuc3RyaW5nVG9CeXRlcykobikpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX1jb21waWxlVG9wRGljdHMoZSx0LGEpe2NvbnN0IHI9W107bGV0IG49bmV3IENGRkluZGV4O2Zvcihjb25zdCBpIG9mIGUpe2lmKGEpe2kucmVtb3ZlQnlOYW1lKCJDSURGb250VmVyc2lvbiIpO2kucmVtb3ZlQnlOYW1lKCJDSURGb250UmV2aXNpb24iKTtpLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFR5cGUiKTtpLnJlbW92ZUJ5TmFtZSgiQ0lEQ291bnQiKTtpLnJlbW92ZUJ5TmFtZSgiVUlEQmFzZSIpfWNvbnN0IGU9bmV3IENGRk9mZnNldFRyYWNrZXIscz10aGlzLmNvbXBpbGVEaWN0KGksZSk7ci5wdXNoKGUpO24uYWRkKHMpO2Uub2Zmc2V0KHQpfW49dGhpcy5jb21waWxlSW5kZXgobixyKTtyZXR1cm57dHJhY2tlcnM6cixvdXRwdXQ6bn19Y29tcGlsZVByaXZhdGVEaWN0cyhlLHQsYSl7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKXtjb25zdCBpPWVbbl0scz1pLnByaXZhdGVEaWN0O2lmKCFzfHwhaS5oYXNOYW1lKCJQcml2YXRlIikpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlRoZXJlIG11c3QgYmUgYSBwcml2YXRlIGRpY3Rpb25hcnkuIik7Y29uc3Qgbz1uZXcgQ0ZGT2Zmc2V0VHJhY2tlcixjPXRoaXMuY29tcGlsZURpY3QocyxvKTtsZXQgbD1hLmxlbmd0aDtvLm9mZnNldChsKTtjLmxlbmd0aHx8KGw9MCk7dFtuXS5zZXRFbnRyeUxvY2F0aW9uKCJQcml2YXRlIixbYy5sZW5ndGgsbF0sYSk7YS5hZGQoYyk7aWYocy5zdWJyc0luZGV4JiZzLmhhc05hbWUoIlN1YnJzIikpe2NvbnN0IGU9dGhpcy5jb21waWxlSW5kZXgocy5zdWJyc0luZGV4KTtvLnNldEVudHJ5TG9jYXRpb24oIlN1YnJzIixbYy5sZW5ndGhdLGEpO2EuYWRkKGUpfX19Y29tcGlsZURpY3QoZSx0KXtjb25zdCBhPVtdO2Zvcihjb25zdCBuIG9mIGUub3JkZXIpe2lmKCEobiBpbiBlLnZhbHVlcykpY29udGludWU7bGV0IGk9ZS52YWx1ZXNbbl0scz1lLnR5cGVzW25dO0FycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7QXJyYXkuaXNBcnJheShpKXx8KGk9W2ldKTtpZigwIT09aS5sZW5ndGgpe2ZvcihsZXQgbz0wLGM9cy5sZW5ndGg7bzxjOysrbyl7Y29uc3QgYz1zW29dLGw9aVtvXTtzd2l0Y2goYyl7Y2FzZSJudW0iOmNhc2Uic2lkIjphLnB1c2goLi4udGhpcy5lbmNvZGVOdW1iZXIobCkpO2JyZWFrO2Nhc2Uib2Zmc2V0Ijpjb25zdCBzPWUua2V5VG9OYW1lTWFwW25dO3QuaXNUcmFja2luZyhzKXx8dC50cmFjayhzLGEubGVuZ3RoKTthLnB1c2goMjksMCwwLDAsMCk7YnJlYWs7Y2FzZSJhcnJheSI6Y2FzZSJkZWx0YSI6YS5wdXNoKC4uLnRoaXMuZW5jb2RlTnVtYmVyKGwpKTtmb3IobGV0IGU9MSx0PWkubGVuZ3RoO2U8dDsrK2UpYS5wdXNoKC4uLnRoaXMuZW5jb2RlTnVtYmVyKGlbZV0pKTticmVhaztkZWZhdWx0OnRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmtub3duIGRhdGEgdHlwZSBvZiAke2N9YCl9fWEucHVzaCguLi5lLm9wY29kZXNbbl0pfX1yZXR1cm4gYX1jb21waWxlU3RyaW5nSW5kZXgoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGNvbnN0IGEgb2YgZSl0LmFkZCgoMCxyLnN0cmluZ1RvQnl0ZXMpKGEpKTtyZXR1cm4gdGhpcy5jb21waWxlSW5kZXgodCl9Y29tcGlsZUNoYXJTdHJpbmdzKGUpe2NvbnN0IHQ9bmV3IENGRkluZGV4O2ZvcihsZXQgYT0wO2E8ZS5jb3VudDthKyspe2NvbnN0IHI9ZS5nZXQoYSk7MCE9PXIubGVuZ3RoP3QuYWRkKHIpOnQuYWRkKG5ldyBVaW50OEFycmF5KFsxMzksMTRdKSl9cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHQpfWNvbXBpbGVDaGFyc2V0KGUsdCxhLG4pe2xldCBpO2NvbnN0IHM9dC0xO2lmKG4paT1uZXcgVWludDhBcnJheShbMiwwLDAscz4+OCYyNTUsMjU1JnNdKTtlbHNle2k9bmV3IFVpbnQ4QXJyYXkoMSsyKnMpO2lbMF09MDtsZXQgdD0wO2NvbnN0IG49ZS5jaGFyc2V0Lmxlbmd0aDtsZXQgbz0hMTtmb3IobGV0IHM9MTtzPGkubGVuZ3RoO3MrPTIpe2xldCBjPTA7aWYodDxuKXtjb25zdCBuPWUuY2hhcnNldFt0KytdO2M9YS5nZXRTSUQobik7aWYoLTE9PT1jKXtjPTA7aWYoIW8pe289ITA7KDAsci53YXJuKShgQ291bGRuJ3QgZmluZCAke259IGluIENGRiBzdHJpbmdzYCl9fX1pW3NdPWM+PjgmMjU1O2lbcysxXT0yNTUmY319cmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkoaSl9Y29tcGlsZUVuY29kaW5nKGUpe3JldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KGUucmF3KX1jb21waWxlRkRTZWxlY3QoZSl7Y29uc3QgdD1lLmZvcm1hdDtsZXQgYSxyO3N3aXRjaCh0KXtjYXNlIDA6YT1uZXcgVWludDhBcnJheSgxK2UuZmRTZWxlY3QubGVuZ3RoKTthWzBdPXQ7Zm9yKHI9MDtyPGUuZmRTZWxlY3QubGVuZ3RoO3IrKylhW3IrMV09ZS5mZFNlbGVjdFtyXTticmVhaztjYXNlIDM6Y29uc3Qgbj0wO2xldCBpPWUuZmRTZWxlY3RbMF07Y29uc3Qgcz1bdCwwLDAsbj4+OCYyNTUsMjU1Jm4saV07Zm9yKHI9MTtyPGUuZmRTZWxlY3QubGVuZ3RoO3IrKyl7Y29uc3QgdD1lLmZkU2VsZWN0W3JdO2lmKHQhPT1pKXtzLnB1c2gocj4+OCYyNTUsMjU1JnIsdCk7aT10fX1jb25zdCBvPShzLmxlbmd0aC0zKS8zO3NbMV09bz4+OCYyNTU7c1syXT0yNTUmbztzLnB1c2gocj4+OCYyNTUsMjU1JnIpO2E9bmV3IFVpbnQ4QXJyYXkocyl9cmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkoYSl9Y29tcGlsZVR5cGVkQXJyYXkoZSl7cmV0dXJuIEFycmF5LmZyb20oZSl9Y29tcGlsZUluZGV4KGUsdD1bXSl7Y29uc3QgYT1lLm9iamVjdHMscj1hLmxlbmd0aDtpZigwPT09cilyZXR1cm5bMCwwXTtjb25zdCBuPVtyPj44JjI1NSwyNTUmcl07bGV0IGkscyxvPTE7Zm9yKGk9MDtpPHI7KytpKW8rPWFbaV0ubGVuZ3RoO3M9bzwyNTY/MTpvPDY1NTM2PzI6bzwxNjc3NzIxNj8zOjQ7bi5wdXNoKHMpO2xldCBjPTE7Zm9yKGk9MDtpPHIrMTtpKyspezE9PT1zP24ucHVzaCgyNTUmYyk6Mj09PXM/bi5wdXNoKGM+PjgmMjU1LDI1NSZjKTozPT09cz9uLnB1c2goYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjKTpuLnB1c2goYz4+PjI0JjI1NSxjPj4xNiYyNTUsYz4+OCYyNTUsMjU1JmMpO2FbaV0mJihjKz1hW2ldLmxlbmd0aCl9Zm9yKGk9MDtpPHI7aSsrKXt0W2ldJiZ0W2ldLm9mZnNldChuLmxlbmd0aCk7bi5wdXNoKC4uLmFbaV0pfXJldHVybiBufX10LkNGRkNvbXBpbGVyPUNGRkNvbXBpbGVyfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LklTT0Fkb2JlQ2hhcnNldD10LkV4cGVydFN1YnNldENoYXJzZXQ9dC5FeHBlcnRDaGFyc2V0PXZvaWQgMDt0LklTT0Fkb2JlQ2hhcnNldD1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiJdO3QuRXhwZXJ0Q2hhcnNldD1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiRG90YWNjZW50c21hbGwiLCJNYWNyb25zbWFsbCIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiemVyb3N1cGVyaW9yIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiXTt0LkV4cGVydFN1YnNldENoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiaHlwaGVuc3VwZXJpb3IiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiY2VudG9sZHN0eWxlIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIl19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuWmFwZkRpbmdiYXRzRW5jb2Rpbmc9dC5XaW5BbnNpRW5jb2Rpbmc9dC5TeW1ib2xTZXRFbmNvZGluZz10LlN0YW5kYXJkRW5jb2Rpbmc9dC5NYWNSb21hbkVuY29kaW5nPXQuRXhwZXJ0RW5jb2Rpbmc9dm9pZCAwO3QuZ2V0RW5jb2Rpbmc9ZnVuY3Rpb24gZ2V0RW5jb2RpbmcoZSl7c3dpdGNoKGUpe2Nhc2UiV2luQW5zaUVuY29kaW5nIjpyZXR1cm4gcztjYXNlIlN0YW5kYXJkRW5jb2RpbmciOnJldHVybiBpO2Nhc2UiTWFjUm9tYW5FbmNvZGluZyI6cmV0dXJuIG47Y2FzZSJTeW1ib2xTZXRFbmNvZGluZyI6cmV0dXJuIG87Y2FzZSJaYXBmRGluZ2JhdHNFbmNvZGluZyI6cmV0dXJuIGM7Y2FzZSJFeHBlcnRFbmNvZGluZyI6cmV0dXJuIGE7Y2FzZSJNYWNFeHBlcnRFbmNvZGluZyI6cmV0dXJuIHI7ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2NvbnN0IGE9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCIiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCIiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCIiLCIiLCIiLCJpc3VwZXJpb3IiLCIiLCIiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCIiLCIiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCIiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsIiIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCIiLCIiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiIiwiRG90YWNjZW50c21hbGwiLCIiLCIiLCJNYWNyb25zbWFsbCIsIiIsIiIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIiIsIiIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwiIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiIiwiIiwiemVyb3N1cGVyaW9yIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiXTt0LkV4cGVydEVuY29kaW5nPWE7Y29uc3Qgcj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImNlbnRvbGRzdHlsZSIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCIiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwiIiwicXVlc3Rpb25zbWFsbCIsIiIsIiIsIiIsIiIsIkV0aHNtYWxsIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsIiIsIiIsIiIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuaW5mZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCJhc3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJBYWN1dGVzbWFsbCIsIkFncmF2ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXRpbGRlc21hbGwiLCJBcmluZ3NtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJYWN1dGVzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiTnRpbGRlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT3RpbGRlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiIiwiZWlnaHRzdXBlcmlvciIsImZvdXJpbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiU2Nhcm9uc21hbGwiLCIiLCJjZW50aW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsIiIsIkRpZXJlc2lzc21hbGwiLCIiLCJDYXJvbnNtYWxsIiwib3N1cGVyaW9yIiwiZml2ZWluZmVyaW9yIiwiIiwiY29tbWFpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiWWFjdXRlc21hbGwiLCIiLCJkb2xsYXJpbmZlcmlvciIsIiIsIiIsIlRob3Juc21hbGwiLCIiLCJuaW5laW5mZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJaY2Fyb25zbWFsbCIsIkFFc21hbGwiLCJPc2xhc2hzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25laW5mZXJpb3IiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIk9Fc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuc3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCIiLCJZZGllcmVzaXNzbWFsbCIsIiIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb3N1cGVyaW9yIiwiIiwiZXN1cGVyaW9yIiwicnN1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiIiwiaXN1cGVyaW9yIiwic3N1cGVyaW9yIiwiZHN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiIiwibHN1cGVyaW9yIiwiT2dvbmVrc21hbGwiLCJCcmV2ZXNtYWxsIiwiTWFjcm9uc21hbGwiLCJic3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJjb21tYXN1cGVyaW9yIiwicGVyaW9kc3VwZXJpb3IiLCJEb3RhY2NlbnRzbWFsbCIsIlJpbmdzbWFsbCIsIiIsIiIsIiIsIiJdLG49WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIk50aWxkZSIsIk9kaWVyZXNpcyIsIlVkaWVyZXNpcyIsImFhY3V0ZSIsImFncmF2ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYXRpbGRlIiwiYXJpbmciLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVncmF2ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWFjdXRlIiwiaWdyYXZlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJudGlsZGUiLCJvYWN1dGUiLCJvZ3JhdmUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm90aWxkZSIsInVhY3V0ZSIsInVncmF2ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwiZGFnZ2VyIiwiZGVncmVlIiwiY2VudCIsInN0ZXJsaW5nIiwic2VjdGlvbiIsImJ1bGxldCIsInBhcmFncmFwaCIsImdlcm1hbmRibHMiLCJyZWdpc3RlcmVkIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiYWN1dGUiLCJkaWVyZXNpcyIsIm5vdGVxdWFsIiwiQUUiLCJPc2xhc2giLCJpbmZpbml0eSIsInBsdXNtaW51cyIsImxlc3NlcXVhbCIsImdyZWF0ZXJlcXVhbCIsInllbiIsIm11IiwicGFydGlhbGRpZmYiLCJzdW1tYXRpb24iLCJwcm9kdWN0IiwicGkiLCJpbnRlZ3JhbCIsIm9yZGZlbWluaW5lIiwib3JkbWFzY3VsaW5lIiwiT21lZ2EiLCJhZSIsIm9zbGFzaCIsInF1ZXN0aW9uZG93biIsImV4Y2xhbWRvd24iLCJsb2dpY2Fsbm90IiwicmFkaWNhbCIsImZsb3JpbiIsImFwcHJveGVxdWFsIiwiRGVsdGEiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInNwYWNlIiwiQWdyYXZlIiwiQXRpbGRlIiwiT3RpbGRlIiwiT0UiLCJvZSIsImVuZGFzaCIsImVtZGFzaCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwiZGl2aWRlIiwibG96ZW5nZSIsInlkaWVyZXNpcyIsIllkaWVyZXNpcyIsImZyYWN0aW9uIiwiY3VycmVuY3kiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInBlcnRob3VzYW5kIiwiQWNpcmN1bWZsZXgiLCJFY2lyY3VtZmxleCIsIkFhY3V0ZSIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJhcHBsZSIsIk9ncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWdyYXZlIiwiZG90bGVzc2kiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iXTt0Lk1hY1JvbWFuRW5jb2Rpbmc9bjtjb25zdCBpPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCIiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsIiIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsIiIsInF1ZXN0aW9uZG93biIsIiIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwiIiwicmluZyIsImNlZGlsbGEiLCIiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIkFFIiwiIiwib3JkZmVtaW5pbmUiLCIiLCIiLCIiLCIiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsIiIsIiIsIiIsIiIsIiIsImFlIiwiIiwiIiwiIiwiZG90bGVzc2kiLCIiLCIiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCIiLCIiLCIiLCIiXTt0LlN0YW5kYXJkRW5jb2Rpbmc9aTtjb25zdCBzPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVzaW5nbGUiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsImdyYXZlIiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImJ1bGxldCIsIkV1cm8iLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsImZsb3JpbiIsInF1b3RlZGJsYmFzZSIsImVsbGlwc2lzIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwiY2lyY3VtZmxleCIsInBlcnRob3VzYW5kIiwiU2Nhcm9uIiwiZ3VpbHNpbmdsbGVmdCIsIk9FIiwiYnVsbGV0IiwiWmNhcm9uIiwiYnVsbGV0IiwiYnVsbGV0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJidWxsZXQiLCJlbmRhc2giLCJlbWRhc2giLCJ0aWxkZSIsInRyYWRlbWFyayIsInNjYXJvbiIsImd1aWxzaW5nbHJpZ2h0Iiwib2UiLCJidWxsZXQiLCJ6Y2Fyb24iLCJZZGllcmVzaXMiLCJzcGFjZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJjdXJyZW5jeSIsInllbiIsImJyb2tlbmJhciIsInNlY3Rpb24iLCJkaWVyZXNpcyIsImNvcHlyaWdodCIsIm9yZGZlbWluaW5lIiwiZ3VpbGxlbW90bGVmdCIsImxvZ2ljYWxub3QiLCJoeXBoZW4iLCJyZWdpc3RlcmVkIiwibWFjcm9uIiwiZGVncmVlIiwicGx1c21pbnVzIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiYWN1dGUiLCJtdSIsInBhcmFncmFwaCIsInBlcmlvZGNlbnRlcmVkIiwiY2VkaWxsYSIsIm9uZXN1cGVyaW9yIiwib3JkbWFzY3VsaW5lIiwiZ3VpbGxlbW90cmlnaHQiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd24iLCJBZ3JhdmUiLCJBYWN1dGUiLCJBY2lyY3VtZmxleCIsIkF0aWxkZSIsIkFkaWVyZXNpcyIsIkFyaW5nIiwiQUUiLCJDY2VkaWxsYSIsIkVncmF2ZSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiSWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJFdGgiLCJOdGlsZGUiLCJPZ3JhdmUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk90aWxkZSIsIk9kaWVyZXNpcyIsIm11bHRpcGx5IiwiT3NsYXNoIiwiVWdyYXZlIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJZYWN1dGUiLCJUaG9ybiIsImdlcm1hbmRibHMiLCJhZ3JhdmUiLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImF0aWxkZSIsImFkaWVyZXNpcyIsImFyaW5nIiwiYWUiLCJjY2VkaWxsYSIsImVncmF2ZSIsImVhY3V0ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWdyYXZlIiwiaWFjdXRlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJldGgiLCJudGlsZGUiLCJvZ3JhdmUiLCJvYWN1dGUiLCJvY2lyY3VtZmxleCIsIm90aWxkZSIsIm9kaWVyZXNpcyIsImRpdmlkZSIsIm9zbGFzaCIsInVncmF2ZSIsInVhY3V0ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwieWFjdXRlIiwidGhvcm4iLCJ5ZGllcmVzaXMiXTt0LldpbkFuc2lFbmNvZGluZz1zO2NvbnN0IG89WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInVuaXZlcnNhbCIsIm51bWJlcnNpZ24iLCJleGlzdGVudGlhbCIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJzdWNodGhhdCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3Rlcmlza21hdGgiLCJwbHVzIiwiY29tbWEiLCJtaW51cyIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiY29uZ3J1ZW50IiwiQWxwaGEiLCJCZXRhIiwiQ2hpIiwiRGVsdGEiLCJFcHNpbG9uIiwiUGhpIiwiR2FtbWEiLCJFdGEiLCJJb3RhIiwidGhldGExIiwiS2FwcGEiLCJMYW1iZGEiLCJNdSIsIk51IiwiT21pY3JvbiIsIlBpIiwiVGhldGEiLCJSaG8iLCJTaWdtYSIsIlRhdSIsIlVwc2lsb24iLCJzaWdtYTEiLCJPbWVnYSIsIlhpIiwiUHNpIiwiWmV0YSIsImJyYWNrZXRsZWZ0IiwidGhlcmVmb3JlIiwiYnJhY2tldHJpZ2h0IiwicGVycGVuZGljdWxhciIsInVuZGVyc2NvcmUiLCJyYWRpY2FsZXgiLCJhbHBoYSIsImJldGEiLCJjaGkiLCJkZWx0YSIsImVwc2lsb24iLCJwaGkiLCJnYW1tYSIsImV0YSIsImlvdGEiLCJwaGkxIiwia2FwcGEiLCJsYW1iZGEiLCJtdSIsIm51Iiwib21pY3JvbiIsInBpIiwidGhldGEiLCJyaG8iLCJzaWdtYSIsInRhdSIsInVwc2lsb24iLCJvbWVnYTEiLCJvbWVnYSIsInhpIiwicHNpIiwiemV0YSIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJzaW1pbGFyIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiRXVybyIsIlVwc2lsb24xIiwibWludXRlIiwibGVzc2VxdWFsIiwiZnJhY3Rpb24iLCJpbmZpbml0eSIsImZsb3JpbiIsImNsdWIiLCJkaWFtb25kIiwiaGVhcnQiLCJzcGFkZSIsImFycm93Ym90aCIsImFycm93bGVmdCIsImFycm93dXAiLCJhcnJvd3JpZ2h0IiwiYXJyb3dkb3duIiwiZGVncmVlIiwicGx1c21pbnVzIiwic2Vjb25kIiwiZ3JlYXRlcmVxdWFsIiwibXVsdGlwbHkiLCJwcm9wb3J0aW9uYWwiLCJwYXJ0aWFsZGlmZiIsImJ1bGxldCIsImRpdmlkZSIsIm5vdGVxdWFsIiwiZXF1aXZhbGVuY2UiLCJhcHByb3hlcXVhbCIsImVsbGlwc2lzIiwiYXJyb3d2ZXJ0ZXgiLCJhcnJvd2hvcml6ZXgiLCJjYXJyaWFnZXJldHVybiIsImFsZXBoIiwiSWZyYWt0dXIiLCJSZnJha3R1ciIsIndlaWVyc3RyYXNzIiwiY2lyY2xlbXVsdGlwbHkiLCJjaXJjbGVwbHVzIiwiZW1wdHlzZXQiLCJpbnRlcnNlY3Rpb24iLCJ1bmlvbiIsInByb3BlcnN1cGVyc2V0IiwicmVmbGV4c3VwZXJzZXQiLCJub3RzdWJzZXQiLCJwcm9wZXJzdWJzZXQiLCJyZWZsZXhzdWJzZXQiLCJlbGVtZW50Iiwibm90ZWxlbWVudCIsImFuZ2xlIiwiZ3JhZGllbnQiLCJyZWdpc3RlcnNlcmlmIiwiY29weXJpZ2h0c2VyaWYiLCJ0cmFkZW1hcmtzZXJpZiIsInByb2R1Y3QiLCJyYWRpY2FsIiwiZG90bWF0aCIsImxvZ2ljYWxub3QiLCJsb2dpY2FsYW5kIiwibG9naWNhbG9yIiwiYXJyb3dkYmxib3RoIiwiYXJyb3dkYmxsZWZ0IiwiYXJyb3dkYmx1cCIsImFycm93ZGJscmlnaHQiLCJhcnJvd2RibGRvd24iLCJsb3plbmdlIiwiYW5nbGVsZWZ0IiwicmVnaXN0ZXJzYW5zIiwiY29weXJpZ2h0c2FucyIsInRyYWRlbWFya3NhbnMiLCJzdW1tYXRpb24iLCJwYXJlbmxlZnR0cCIsInBhcmVubGVmdGV4IiwicGFyZW5sZWZ0YnQiLCJicmFja2V0bGVmdHRwIiwiYnJhY2tldGxlZnRleCIsImJyYWNrZXRsZWZ0YnQiLCJicmFjZWxlZnR0cCIsImJyYWNlbGVmdG1pZCIsImJyYWNlbGVmdGJ0IiwiYnJhY2VleCIsIiIsImFuZ2xlcmlnaHQiLCJpbnRlZ3JhbCIsImludGVncmFsdHAiLCJpbnRlZ3JhbGV4IiwiaW50ZWdyYWxidCIsInBhcmVucmlnaHR0cCIsInBhcmVucmlnaHRleCIsInBhcmVucmlnaHRidCIsImJyYWNrZXRyaWdodHRwIiwiYnJhY2tldHJpZ2h0ZXgiLCJicmFja2V0cmlnaHRidCIsImJyYWNlcmlnaHR0cCIsImJyYWNlcmlnaHRtaWQiLCJicmFjZXJpZ2h0YnQiLCIiXTt0LlN5bWJvbFNldEVuY29kaW5nPW87Y29uc3QgYz1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiYTEiLCJhMiIsImEyMDIiLCJhMyIsImE0IiwiYTUiLCJhMTE5IiwiYTExOCIsImExMTciLCJhMTEiLCJhMTIiLCJhMTMiLCJhMTQiLCJhMTUiLCJhMTYiLCJhMTA1IiwiYTE3IiwiYTE4IiwiYTE5IiwiYTIwIiwiYTIxIiwiYTIyIiwiYTIzIiwiYTI0IiwiYTI1IiwiYTI2IiwiYTI3IiwiYTI4IiwiYTYiLCJhNyIsImE4IiwiYTkiLCJhMTAiLCJhMjkiLCJhMzAiLCJhMzEiLCJhMzIiLCJhMzMiLCJhMzQiLCJhMzUiLCJhMzYiLCJhMzciLCJhMzgiLCJhMzkiLCJhNDAiLCJhNDEiLCJhNDIiLCJhNDMiLCJhNDQiLCJhNDUiLCJhNDYiLCJhNDciLCJhNDgiLCJhNDkiLCJhNTAiLCJhNTEiLCJhNTIiLCJhNTMiLCJhNTQiLCJhNTUiLCJhNTYiLCJhNTciLCJhNTgiLCJhNTkiLCJhNjAiLCJhNjEiLCJhNjIiLCJhNjMiLCJhNjQiLCJhNjUiLCJhNjYiLCJhNjciLCJhNjgiLCJhNjkiLCJhNzAiLCJhNzEiLCJhNzIiLCJhNzMiLCJhNzQiLCJhMjAzIiwiYTc1IiwiYTIwNCIsImE3NiIsImE3NyIsImE3OCIsImE3OSIsImE4MSIsImE4MiIsImE4MyIsImE4NCIsImE5NyIsImE5OCIsImE5OSIsImExMDAiLCIiLCJhODkiLCJhOTAiLCJhOTMiLCJhOTQiLCJhOTEiLCJhOTIiLCJhMjA1IiwiYTg1IiwiYTIwNiIsImE4NiIsImE4NyIsImE4OCIsImE5NSIsImE5NiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImExMDEiLCJhMTAyIiwiYTEwMyIsImExMDQiLCJhMTA2IiwiYTEwNyIsImExMDgiLCJhMTEyIiwiYTExMSIsImExMTAiLCJhMTA5IiwiYTEyMCIsImExMjEiLCJhMTIyIiwiYTEyMyIsImExMjQiLCJhMTI1IiwiYTEyNiIsImExMjciLCJhMTI4IiwiYTEyOSIsImExMzAiLCJhMTMxIiwiYTEzMiIsImExMzMiLCJhMTM0IiwiYTEzNSIsImExMzYiLCJhMTM3IiwiYTEzOCIsImExMzkiLCJhMTQwIiwiYTE0MSIsImExNDIiLCJhMTQzIiwiYTE0NCIsImExNDUiLCJhMTQ2IiwiYTE0NyIsImExNDgiLCJhMTQ5IiwiYTE1MCIsImExNTEiLCJhMTUyIiwiYTE1MyIsImExNTQiLCJhMTU1IiwiYTE1NiIsImExNTciLCJhMTU4IiwiYTE1OSIsImExNjAiLCJhMTYxIiwiYTE2MyIsImExNjQiLCJhMTk2IiwiYTE2NSIsImExOTIiLCJhMTY2IiwiYTE2NyIsImExNjgiLCJhMTY5IiwiYTE3MCIsImExNzEiLCJhMTcyIiwiYTE3MyIsImExNjIiLCJhMTc0IiwiYTE3NSIsImExNzYiLCJhMTc3IiwiYTE3OCIsImExNzkiLCJhMTkzIiwiYTE4MCIsImExOTkiLCJhMTgxIiwiYTIwMCIsImExODIiLCIiLCJhMjAxIiwiYTE4MyIsImExODQiLCJhMTk3IiwiYTE4NSIsImExOTQiLCJhMTk4IiwiYTE4NiIsImExOTUiLCJhMTg3IiwiYTE4OCIsImExODkiLCJhMTkwIiwiYTE5MSIsIiJdO3QuWmFwZkRpbmdiYXRzRW5jb2Rpbmc9Y30sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlNFQUNfQU5BTFlTSVNfRU5BQkxFRD10Lk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZz10LkZvbnRGbGFncz12b2lkIDA7dC5ub3JtYWxpemVGb250TmFtZT1mdW5jdGlvbiBub3JtYWxpemVGb250TmFtZShlKXtyZXR1cm4gZS5yZXBsYWNlQWxsKC9bLF9dL2csIi0iKS5yZXBsYWNlQWxsKC9ccy9nLCIiKX07dC5yZWNvdmVyR2x5cGhOYW1lPXJlY292ZXJHbHlwaE5hbWU7dC50eXBlMUZvbnRHbHlwaE1hcHBpbmc9ZnVuY3Rpb24gdHlwZTFGb250R2x5cGhNYXBwaW5nKGUsdCxhKXtjb25zdCBpPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHMsYyxsO2NvbnN0IGg9ISEoZS5mbGFncyZvLlN5bWJvbGljKTtpZihlLmlzSW50ZXJuYWxGb250KXtsPXQ7Zm9yKGM9MDtjPGwubGVuZ3RoO2MrKyl7cz1hLmluZGV4T2YobFtjXSk7aVtjXT1zPj0wP3M6MH19ZWxzZSBpZihlLmJhc2VFbmNvZGluZ05hbWUpe2w9KDAsci5nZXRFbmNvZGluZykoZS5iYXNlRW5jb2RpbmdOYW1lKTtmb3IoYz0wO2M8bC5sZW5ndGg7YysrKXtzPWEuaW5kZXhPZihsW2NdKTtpW2NdPXM+PTA/czowfX1lbHNlIGlmKGgpZm9yKGMgaW4gdClpW2NdPXRbY107ZWxzZXtsPXIuU3RhbmRhcmRFbmNvZGluZztmb3IoYz0wO2M8bC5sZW5ndGg7YysrKXtzPWEuaW5kZXhPZihsW2NdKTtpW2NdPXM+PTA/czowfX1jb25zdCB1PWUuZGlmZmVyZW5jZXM7bGV0IGQ7aWYodSlmb3IoYyBpbiB1KXtjb25zdCBlPXVbY107cz1hLmluZGV4T2YoZSk7aWYoLTE9PT1zKXtkfHwoZD0oMCxuLmdldEdseXBoc1VuaWNvZGUpKCkpO2NvbnN0IHQ9cmVjb3ZlckdseXBoTmFtZShlLGQpO3QhPT1lJiYocz1hLmluZGV4T2YodCkpfWlbY109cz49MD9zOjB9cmV0dXJuIGl9O3ZhciByPWEoMzcpLG49YSgzOSksaT1hKDQwKSxzPWEoMik7dC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9ITA7Y29uc3Qgbz17Rml4ZWRQaXRjaDoxLFNlcmlmOjIsU3ltYm9saWM6NCxTY3JpcHQ6OCxOb25zeW1ib2xpYzozMixJdGFsaWM6NjQsQWxsQ2FwOjY1NTM2LFNtYWxsQ2FwOjEzMTA3MixGb3JjZUJvbGQ6MjYyMTQ0fTt0LkZvbnRGbGFncz1vO3QuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nPVsiLm5vdGRlZiIsIi5udWxsIiwibm9ubWFya2luZ3JldHVybiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwibm9uYnJlYWtpbmdzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiTHNsYXNoIiwibHNsYXNoIiwiU2Nhcm9uIiwic2Nhcm9uIiwiWmNhcm9uIiwiemNhcm9uIiwiYnJva2VuYmFyIiwiRXRoIiwiZXRoIiwiWWFjdXRlIiwieWFjdXRlIiwiVGhvcm4iLCJ0aG9ybiIsIm1pbnVzIiwibXVsdGlwbHkiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsIm9uZWhhbGYiLCJvbmVxdWFydGVyIiwidGhyZWVxdWFydGVycyIsImZyYW5jIiwiR2JyZXZlIiwiZ2JyZXZlIiwiSWRvdGFjY2VudCIsIlNjZWRpbGxhIiwic2NlZGlsbGEiLCJDYWN1dGUiLCJjYWN1dGUiLCJDY2Fyb24iLCJjY2Fyb24iLCJkY3JvYXQiXTtmdW5jdGlvbiByZWNvdmVyR2x5cGhOYW1lKGUsdCl7aWYodm9pZCAwIT09dFtlXSlyZXR1cm4gZTtjb25zdCBhPSgwLGkuZ2V0VW5pY29kZUZvckdseXBoKShlLHQpO2lmKC0xIT09YSlmb3IoY29uc3QgZSBpbiB0KWlmKHRbZV09PT1hKXJldHVybiBlOygwLHMuaW5mbykoIlVuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6ICIrZSk7cmV0dXJuIGV9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuZ2V0R2x5cGhzVW5pY29kZT10LmdldERpbmdiYXRzR2x5cGhzVW5pY29kZT12b2lkIDA7dmFyIHI9YSgzKTtjb25zdCBuPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5BPTY1O2UuQUU9MTk4O2UuQUVhY3V0ZT01MDg7ZS5BRW1hY3Jvbj00ODI7ZS5BRXNtYWxsPTYzNDYyO2UuQWFjdXRlPTE5MztlLkFhY3V0ZXNtYWxsPTYzNDU3O2UuQWJyZXZlPTI1ODtlLkFicmV2ZWFjdXRlPTc4NTQ7ZS5BYnJldmVjeXJpbGxpYz0xMjMyO2UuQWJyZXZlZG90YmVsb3c9Nzg2MjtlLkFicmV2ZWdyYXZlPTc4NTY7ZS5BYnJldmVob29rYWJvdmU9Nzg1ODtlLkFicmV2ZXRpbGRlPTc4NjA7ZS5BY2Fyb249NDYxO2UuQWNpcmNsZT05Mzk4O2UuQWNpcmN1bWZsZXg9MTk0O2UuQWNpcmN1bWZsZXhhY3V0ZT03ODQ0O2UuQWNpcmN1bWZsZXhkb3RiZWxvdz03ODUyO2UuQWNpcmN1bWZsZXhncmF2ZT03ODQ2O2UuQWNpcmN1bWZsZXhob29rYWJvdmU9Nzg0ODtlLkFjaXJjdW1mbGV4c21hbGw9NjM0NTg7ZS5BY2lyY3VtZmxleHRpbGRlPTc4NTA7ZS5BY3V0ZT02MzE3NztlLkFjdXRlc21hbGw9NjM0MTI7ZS5BY3lyaWxsaWM9MTA0MDtlLkFkYmxncmF2ZT01MTI7ZS5BZGllcmVzaXM9MTk2O2UuQWRpZXJlc2lzY3lyaWxsaWM9MTIzNDtlLkFkaWVyZXNpc21hY3Jvbj00Nzg7ZS5BZGllcmVzaXNzbWFsbD02MzQ2MDtlLkFkb3RiZWxvdz03ODQwO2UuQWRvdG1hY3Jvbj00ODA7ZS5BZ3JhdmU9MTkyO2UuQWdyYXZlc21hbGw9NjM0NTY7ZS5BaG9va2Fib3ZlPTc4NDI7ZS5BaWVjeXJpbGxpYz0xMjM2O2UuQWludmVydGVkYnJldmU9NTE0O2UuQWxwaGE9OTEzO2UuQWxwaGF0b25vcz05MDI7ZS5BbWFjcm9uPTI1NjtlLkFtb25vc3BhY2U9NjUzMTM7ZS5Bb2dvbmVrPTI2MDtlLkFyaW5nPTE5NztlLkFyaW5nYWN1dGU9NTA2O2UuQXJpbmdiZWxvdz03NjgwO2UuQXJpbmdzbWFsbD02MzQ2MTtlLkFzbWFsbD02MzMyOTtlLkF0aWxkZT0xOTU7ZS5BdGlsZGVzbWFsbD02MzQ1OTtlLkF5YmFybWVuaWFuPTEzMjk7ZS5CPTY2O2UuQmNpcmNsZT05Mzk5O2UuQmRvdGFjY2VudD03NjgyO2UuQmRvdGJlbG93PTc2ODQ7ZS5CZWN5cmlsbGljPTEwNDE7ZS5CZW5hcm1lbmlhbj0xMzMwO2UuQmV0YT05MTQ7ZS5CaG9vaz0zODU7ZS5CbGluZWJlbG93PTc2ODY7ZS5CbW9ub3NwYWNlPTY1MzE0O2UuQnJldmVzbWFsbD02MzIyMDtlLkJzbWFsbD02MzMzMDtlLkJ0b3BiYXI9Mzg2O2UuQz02NztlLkNhYXJtZW5pYW49MTM0MjtlLkNhY3V0ZT0yNjI7ZS5DYXJvbj02MzE3ODtlLkNhcm9uc21hbGw9NjMyMjE7ZS5DY2Fyb249MjY4O2UuQ2NlZGlsbGE9MTk5O2UuQ2NlZGlsbGFhY3V0ZT03Njg4O2UuQ2NlZGlsbGFzbWFsbD02MzQ2MztlLkNjaXJjbGU9OTQwMDtlLkNjaXJjdW1mbGV4PTI2NDtlLkNkb3Q9MjY2O2UuQ2RvdGFjY2VudD0yNjY7ZS5DZWRpbGxhc21hbGw9NjM0MTY7ZS5DaGFhcm1lbmlhbj0xMzUzO2UuQ2hlYWJraGFzaWFuY3lyaWxsaWM9MTIxMjtlLkNoZWN5cmlsbGljPTEwNjM7ZS5DaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYz0xMjE0O2UuQ2hlZGVzY2VuZGVyY3lyaWxsaWM9MTIwNjtlLkNoZWRpZXJlc2lzY3lyaWxsaWM9MTI2ODtlLkNoZWhhcm1lbmlhbj0xMzQ3O2UuQ2hla2hha2Fzc2lhbmN5cmlsbGljPTEyMjc7ZS5DaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljPTEyMDg7ZS5DaGk9OTM1O2UuQ2hvb2s9MzkxO2UuQ2lyY3VtZmxleHNtYWxsPTYzMjIyO2UuQ21vbm9zcGFjZT02NTMxNTtlLkNvYXJtZW5pYW49MTM2MTtlLkNzbWFsbD02MzMzMTtlLkQ9Njg7ZS5EWj00OTc7ZS5EWmNhcm9uPTQ1MjtlLkRhYXJtZW5pYW49MTMzMjtlLkRhZnJpY2FuPTM5MztlLkRjYXJvbj0yNzA7ZS5EY2VkaWxsYT03Njk2O2UuRGNpcmNsZT05NDAxO2UuRGNpcmN1bWZsZXhiZWxvdz03Njk4O2UuRGNyb2F0PTI3MjtlLkRkb3RhY2NlbnQ9NzY5MDtlLkRkb3RiZWxvdz03NjkyO2UuRGVjeXJpbGxpYz0xMDQ0O2UuRGVpY29wdGljPTEwMDY7ZS5EZWx0YT04NzEwO2UuRGVsdGFncmVlaz05MTY7ZS5EaG9vaz0zOTQ7ZS5EaWVyZXNpcz02MzE3OTtlLkRpZXJlc2lzQWN1dGU9NjMxODA7ZS5EaWVyZXNpc0dyYXZlPTYzMTgxO2UuRGllcmVzaXNzbWFsbD02MzQwMDtlLkRpZ2FtbWFncmVlaz05ODg7ZS5EamVjeXJpbGxpYz0xMDI2O2UuRGxpbmViZWxvdz03Njk0O2UuRG1vbm9zcGFjZT02NTMxNjtlLkRvdGFjY2VudHNtYWxsPTYzMjIzO2UuRHNsYXNoPTI3MjtlLkRzbWFsbD02MzMzMjtlLkR0b3BiYXI9Mzk1O2UuRHo9NDk4O2UuRHpjYXJvbj00NTM7ZS5EemVhYmtoYXNpYW5jeXJpbGxpYz0xMjQ4O2UuRHplY3lyaWxsaWM9MTAyOTtlLkR6aGVjeXJpbGxpYz0xMDM5O2UuRT02OTtlLkVhY3V0ZT0yMDE7ZS5FYWN1dGVzbWFsbD02MzQ2NTtlLkVicmV2ZT0yNzY7ZS5FY2Fyb249MjgyO2UuRWNlZGlsbGFicmV2ZT03NzA4O2UuRWNoYXJtZW5pYW49MTMzMztlLkVjaXJjbGU9OTQwMjtlLkVjaXJjdW1mbGV4PTIwMjtlLkVjaXJjdW1mbGV4YWN1dGU9Nzg3MDtlLkVjaXJjdW1mbGV4YmVsb3c9NzcwNDtlLkVjaXJjdW1mbGV4ZG90YmVsb3c9Nzg3ODtlLkVjaXJjdW1mbGV4Z3JhdmU9Nzg3MjtlLkVjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NzQ7ZS5FY2lyY3VtZmxleHNtYWxsPTYzNDY2O2UuRWNpcmN1bWZsZXh0aWxkZT03ODc2O2UuRWN5cmlsbGljPTEwMjg7ZS5FZGJsZ3JhdmU9NTE2O2UuRWRpZXJlc2lzPTIwMztlLkVkaWVyZXNpc3NtYWxsPTYzNDY3O2UuRWRvdD0yNzg7ZS5FZG90YWNjZW50PTI3ODtlLkVkb3RiZWxvdz03ODY0O2UuRWZjeXJpbGxpYz0xMDYwO2UuRWdyYXZlPTIwMDtlLkVncmF2ZXNtYWxsPTYzNDY0O2UuRWhhcm1lbmlhbj0xMzM1O2UuRWhvb2thYm92ZT03ODY2O2UuRWlnaHRyb21hbj04NTUxO2UuRWludmVydGVkYnJldmU9NTE4O2UuRWlvdGlmaWVkY3lyaWxsaWM9MTEyNDtlLkVsY3lyaWxsaWM9MTA1MTtlLkVsZXZlbnJvbWFuPTg1NTQ7ZS5FbWFjcm9uPTI3NDtlLkVtYWNyb25hY3V0ZT03NzAyO2UuRW1hY3JvbmdyYXZlPTc3MDA7ZS5FbWN5cmlsbGljPTEwNTI7ZS5FbW9ub3NwYWNlPTY1MzE3O2UuRW5jeXJpbGxpYz0xMDUzO2UuRW5kZXNjZW5kZXJjeXJpbGxpYz0xMTg2O2UuRW5nPTMzMDtlLkVuZ2hlY3lyaWxsaWM9MTE4ODtlLkVuaG9va2N5cmlsbGljPTEyMjM7ZS5Fb2dvbmVrPTI4MDtlLkVvcGVuPTQwMDtlLkVwc2lsb249OTE3O2UuRXBzaWxvbnRvbm9zPTkwNDtlLkVyY3lyaWxsaWM9MTA1NjtlLkVyZXZlcnNlZD0zOTg7ZS5FcmV2ZXJzZWRjeXJpbGxpYz0xMDY5O2UuRXNjeXJpbGxpYz0xMDU3O2UuRXNkZXNjZW5kZXJjeXJpbGxpYz0xMTk0O2UuRXNoPTQyNTtlLkVzbWFsbD02MzMzMztlLkV0YT05MTk7ZS5FdGFybWVuaWFuPTEzMzY7ZS5FdGF0b25vcz05MDU7ZS5FdGg9MjA4O2UuRXRoc21hbGw9NjM0NzI7ZS5FdGlsZGU9Nzg2ODtlLkV0aWxkZWJlbG93PTc3MDY7ZS5FdXJvPTgzNjQ7ZS5Femg9NDM5O2UuRXpoY2Fyb249NDk0O2UuRXpocmV2ZXJzZWQ9NDQwO2UuRj03MDtlLkZjaXJjbGU9OTQwMztlLkZkb3RhY2NlbnQ9NzcxMDtlLkZlaGFybWVuaWFuPTEzNjY7ZS5GZWljb3B0aWM9OTk2O2UuRmhvb2s9NDAxO2UuRml0YWN5cmlsbGljPTExMzg7ZS5GaXZlcm9tYW49ODU0ODtlLkZtb25vc3BhY2U9NjUzMTg7ZS5Gb3Vycm9tYW49ODU0NztlLkZzbWFsbD02MzMzNDtlLkc9NzE7ZS5HQnNxdWFyZT0xMzE5MTtlLkdhY3V0ZT01MDA7ZS5HYW1tYT05MTU7ZS5HYW1tYWFmcmljYW49NDA0O2UuR2FuZ2lhY29wdGljPTEwMDI7ZS5HYnJldmU9Mjg2O2UuR2Nhcm9uPTQ4NjtlLkdjZWRpbGxhPTI5MDtlLkdjaXJjbGU9OTQwNDtlLkdjaXJjdW1mbGV4PTI4NDtlLkdjb21tYWFjY2VudD0yOTA7ZS5HZG90PTI4ODtlLkdkb3RhY2NlbnQ9Mjg4O2UuR2VjeXJpbGxpYz0xMDQzO2UuR2hhZGFybWVuaWFuPTEzNDY7ZS5HaGVtaWRkbGVob29rY3lyaWxsaWM9MTE3MjtlLkdoZXN0cm9rZWN5cmlsbGljPTExNzA7ZS5HaGV1cHR1cm5jeXJpbGxpYz0xMTY4O2UuR2hvb2s9NDAzO2UuR2ltYXJtZW5pYW49MTMzMTtlLkdqZWN5cmlsbGljPTEwMjc7ZS5HbWFjcm9uPTc3MTI7ZS5HbW9ub3NwYWNlPTY1MzE5O2UuR3JhdmU9NjMxODI7ZS5HcmF2ZXNtYWxsPTYzMzI4O2UuR3NtYWxsPTYzMzM1O2UuR3NtYWxsaG9vaz02Njc7ZS5Hc3Ryb2tlPTQ4NDtlLkg9NzI7ZS5IMTg1MzM9OTY3OTtlLkgxODU0Mz05NjQyO2UuSDE4NTUxPTk2NDM7ZS5IMjIwNzM9OTYzMztlLkhQc3F1YXJlPTEzMjU5O2UuSGFhYmtoYXNpYW5jeXJpbGxpYz0xMTkyO2UuSGFkZXNjZW5kZXJjeXJpbGxpYz0xMjAyO2UuSGFyZHNpZ25jeXJpbGxpYz0xMDY2O2UuSGJhcj0yOTQ7ZS5IYnJldmViZWxvdz03NzIyO2UuSGNlZGlsbGE9NzcyMDtlLkhjaXJjbGU9OTQwNTtlLkhjaXJjdW1mbGV4PTI5MjtlLkhkaWVyZXNpcz03NzE4O2UuSGRvdGFjY2VudD03NzE0O2UuSGRvdGJlbG93PTc3MTY7ZS5IbW9ub3NwYWNlPTY1MzIwO2UuSG9hcm1lbmlhbj0xMzQ0O2UuSG9yaWNvcHRpYz0xZTM7ZS5Ic21hbGw9NjMzMzY7ZS5IdW5nYXJ1bWxhdXQ9NjMxODM7ZS5IdW5nYXJ1bWxhdXRzbWFsbD02MzIyNDtlLkh6c3F1YXJlPTEzMjAwO2UuST03MztlLklBY3lyaWxsaWM9MTA3MTtlLklKPTMwNjtlLklVY3lyaWxsaWM9MTA3MDtlLklhY3V0ZT0yMDU7ZS5JYWN1dGVzbWFsbD02MzQ2OTtlLklicmV2ZT0zMDA7ZS5JY2Fyb249NDYzO2UuSWNpcmNsZT05NDA2O2UuSWNpcmN1bWZsZXg9MjA2O2UuSWNpcmN1bWZsZXhzbWFsbD02MzQ3MDtlLkljeXJpbGxpYz0xMDMwO2UuSWRibGdyYXZlPTUyMDtlLklkaWVyZXNpcz0yMDc7ZS5JZGllcmVzaXNhY3V0ZT03NzI2O2UuSWRpZXJlc2lzY3lyaWxsaWM9MTI1MjtlLklkaWVyZXNpc3NtYWxsPTYzNDcxO2UuSWRvdD0zMDQ7ZS5JZG90YWNjZW50PTMwNDtlLklkb3RiZWxvdz03ODgyO2UuSWVicmV2ZWN5cmlsbGljPTEyMzg7ZS5JZWN5cmlsbGljPTEwNDU7ZS5JZnJha3R1cj04NDY1O2UuSWdyYXZlPTIwNDtlLklncmF2ZXNtYWxsPTYzNDY4O2UuSWhvb2thYm92ZT03ODgwO2UuSWljeXJpbGxpYz0xMDQ4O2UuSWludmVydGVkYnJldmU9NTIyO2UuSWlzaG9ydGN5cmlsbGljPTEwNDk7ZS5JbWFjcm9uPTI5ODtlLkltYWNyb25jeXJpbGxpYz0xMjUwO2UuSW1vbm9zcGFjZT02NTMyMTtlLkluaWFybWVuaWFuPTEzMzk7ZS5Jb2N5cmlsbGljPTEwMjU7ZS5Jb2dvbmVrPTMwMjtlLklvdGE9OTIxO2UuSW90YWFmcmljYW49NDA2O2UuSW90YWRpZXJlc2lzPTkzODtlLklvdGF0b25vcz05MDY7ZS5Jc21hbGw9NjMzMzc7ZS5Jc3Ryb2tlPTQwNztlLkl0aWxkZT0yOTY7ZS5JdGlsZGViZWxvdz03NzI0O2UuSXpoaXRzYWN5cmlsbGljPTExNDA7ZS5JemhpdHNhZGJsZ3JhdmVjeXJpbGxpYz0xMTQyO2UuSj03NDtlLkphYXJtZW5pYW49MTM0NTtlLkpjaXJjbGU9OTQwNztlLkpjaXJjdW1mbGV4PTMwODtlLkplY3lyaWxsaWM9MTAzMjtlLkpoZWhhcm1lbmlhbj0xMzU1O2UuSm1vbm9zcGFjZT02NTMyMjtlLkpzbWFsbD02MzMzODtlLks9NzU7ZS5LQnNxdWFyZT0xMzE4OTtlLktLc3F1YXJlPTEzMjYxO2UuS2FiYXNoa2lyY3lyaWxsaWM9MTE4NDtlLkthY3V0ZT03NzI4O2UuS2FjeXJpbGxpYz0xMDUwO2UuS2FkZXNjZW5kZXJjeXJpbGxpYz0xMTc4O2UuS2Fob29rY3lyaWxsaWM9MTIxOTtlLkthcHBhPTkyMjtlLkthc3Ryb2tlY3lyaWxsaWM9MTE4MjtlLkthdmVydGljYWxzdHJva2VjeXJpbGxpYz0xMTgwO2UuS2Nhcm9uPTQ4ODtlLktjZWRpbGxhPTMxMDtlLktjaXJjbGU9OTQwODtlLktjb21tYWFjY2VudD0zMTA7ZS5LZG90YmVsb3c9NzczMDtlLktlaGFybWVuaWFuPTEzNjQ7ZS5LZW5hcm1lbmlhbj0xMzQzO2UuS2hhY3lyaWxsaWM9MTA2MTtlLktoZWljb3B0aWM9OTk4O2UuS2hvb2s9NDA4O2UuS2plY3lyaWxsaWM9MTAzNjtlLktsaW5lYmVsb3c9NzczMjtlLkttb25vc3BhY2U9NjUzMjM7ZS5Lb3BwYWN5cmlsbGljPTExNTI7ZS5Lb3BwYWdyZWVrPTk5MDtlLktzaWN5cmlsbGljPTExMzQ7ZS5Lc21hbGw9NjMzMzk7ZS5MPTc2O2UuTEo9NDU1O2UuTEw9NjMxNjc7ZS5MYWN1dGU9MzEzO2UuTGFtYmRhPTkyMztlLkxjYXJvbj0zMTc7ZS5MY2VkaWxsYT0zMTU7ZS5MY2lyY2xlPTk0MDk7ZS5MY2lyY3VtZmxleGJlbG93PTc3NDA7ZS5MY29tbWFhY2NlbnQ9MzE1O2UuTGRvdD0zMTk7ZS5MZG90YWNjZW50PTMxOTtlLkxkb3RiZWxvdz03NzM0O2UuTGRvdGJlbG93bWFjcm9uPTc3MzY7ZS5MaXduYXJtZW5pYW49MTM0MDtlLkxqPTQ1NjtlLkxqZWN5cmlsbGljPTEwMzM7ZS5MbGluZWJlbG93PTc3Mzg7ZS5MbW9ub3NwYWNlPTY1MzI0O2UuTHNsYXNoPTMyMTtlLkxzbGFzaHNtYWxsPTYzMjI1O2UuTHNtYWxsPTYzMzQwO2UuTT03NztlLk1Cc3F1YXJlPTEzMTkwO2UuTWFjcm9uPTYzMTg0O2UuTWFjcm9uc21hbGw9NjM0MDc7ZS5NYWN1dGU9Nzc0MjtlLk1jaXJjbGU9OTQxMDtlLk1kb3RhY2NlbnQ9Nzc0NDtlLk1kb3RiZWxvdz03NzQ2O2UuTWVuYXJtZW5pYW49MTM0ODtlLk1tb25vc3BhY2U9NjUzMjU7ZS5Nc21hbGw9NjMzNDE7ZS5NdHVybmVkPTQxMjtlLk11PTkyNDtlLk49Nzg7ZS5OSj00NTg7ZS5OYWN1dGU9MzIzO2UuTmNhcm9uPTMyNztlLk5jZWRpbGxhPTMyNTtlLk5jaXJjbGU9OTQxMTtlLk5jaXJjdW1mbGV4YmVsb3c9Nzc1NDtlLk5jb21tYWFjY2VudD0zMjU7ZS5OZG90YWNjZW50PTc3NDg7ZS5OZG90YmVsb3c9Nzc1MDtlLk5ob29rbGVmdD00MTM7ZS5OaW5lcm9tYW49ODU1MjtlLk5qPTQ1OTtlLk5qZWN5cmlsbGljPTEwMzQ7ZS5ObGluZWJlbG93PTc3NTI7ZS5ObW9ub3NwYWNlPTY1MzI2O2UuTm93YXJtZW5pYW49MTM1MDtlLk5zbWFsbD02MzM0MjtlLk50aWxkZT0yMDk7ZS5OdGlsZGVzbWFsbD02MzQ3MztlLk51PTkyNTtlLk89Nzk7ZS5PRT0zMzg7ZS5PRXNtYWxsPTYzMjI2O2UuT2FjdXRlPTIxMTtlLk9hY3V0ZXNtYWxsPTYzNDc1O2UuT2JhcnJlZGN5cmlsbGljPTEyNTY7ZS5PYmFycmVkZGllcmVzaXNjeXJpbGxpYz0xMjU4O2UuT2JyZXZlPTMzNDtlLk9jYXJvbj00NjU7ZS5PY2VudGVyZWR0aWxkZT00MTU7ZS5PY2lyY2xlPTk0MTI7ZS5PY2lyY3VtZmxleD0yMTI7ZS5PY2lyY3VtZmxleGFjdXRlPTc4ODg7ZS5PY2lyY3VtZmxleGRvdGJlbG93PTc4OTY7ZS5PY2lyY3VtZmxleGdyYXZlPTc4OTA7ZS5PY2lyY3VtZmxleGhvb2thYm92ZT03ODkyO2UuT2NpcmN1bWZsZXhzbWFsbD02MzQ3NjtlLk9jaXJjdW1mbGV4dGlsZGU9Nzg5NDtlLk9jeXJpbGxpYz0xMDU0O2UuT2RibGFjdXRlPTMzNjtlLk9kYmxncmF2ZT01MjQ7ZS5PZGllcmVzaXM9MjE0O2UuT2RpZXJlc2lzY3lyaWxsaWM9MTI1NDtlLk9kaWVyZXNpc3NtYWxsPTYzNDc4O2UuT2RvdGJlbG93PTc4ODQ7ZS5PZ29uZWtzbWFsbD02MzIyNztlLk9ncmF2ZT0yMTA7ZS5PZ3JhdmVzbWFsbD02MzQ3NDtlLk9oYXJtZW5pYW49MTM2NTtlLk9obT04NDg2O2UuT2hvb2thYm92ZT03ODg2O2UuT2hvcm49NDE2O2UuT2hvcm5hY3V0ZT03ODk4O2UuT2hvcm5kb3RiZWxvdz03OTA2O2UuT2hvcm5ncmF2ZT03OTAwO2UuT2hvcm5ob29rYWJvdmU9NzkwMjtlLk9ob3JudGlsZGU9NzkwNDtlLk9odW5nYXJ1bWxhdXQ9MzM2O2UuT2k9NDE4O2UuT2ludmVydGVkYnJldmU9NTI2O2UuT21hY3Jvbj0zMzI7ZS5PbWFjcm9uYWN1dGU9Nzc2MjtlLk9tYWNyb25ncmF2ZT03NzYwO2UuT21lZ2E9ODQ4NjtlLk9tZWdhY3lyaWxsaWM9MTEyMDtlLk9tZWdhZ3JlZWs9OTM3O2UuT21lZ2Fyb3VuZGN5cmlsbGljPTExNDY7ZS5PbWVnYXRpdGxvY3lyaWxsaWM9MTE0ODtlLk9tZWdhdG9ub3M9OTExO2UuT21pY3Jvbj05Mjc7ZS5PbWljcm9udG9ub3M9OTA4O2UuT21vbm9zcGFjZT02NTMyNztlLk9uZXJvbWFuPTg1NDQ7ZS5Pb2dvbmVrPTQ5MDtlLk9vZ29uZWttYWNyb249NDkyO2UuT29wZW49MzkwO2UuT3NsYXNoPTIxNjtlLk9zbGFzaGFjdXRlPTUxMDtlLk9zbGFzaHNtYWxsPTYzNDgwO2UuT3NtYWxsPTYzMzQzO2UuT3N0cm9rZWFjdXRlPTUxMDtlLk90Y3lyaWxsaWM9MTE1MDtlLk90aWxkZT0yMTM7ZS5PdGlsZGVhY3V0ZT03NzU2O2UuT3RpbGRlZGllcmVzaXM9Nzc1ODtlLk90aWxkZXNtYWxsPTYzNDc3O2UuUD04MDtlLlBhY3V0ZT03NzY0O2UuUGNpcmNsZT05NDEzO2UuUGRvdGFjY2VudD03NzY2O2UuUGVjeXJpbGxpYz0xMDU1O2UuUGVoYXJtZW5pYW49MTM1NDtlLlBlbWlkZGxlaG9va2N5cmlsbGljPTExOTA7ZS5QaGk9OTM0O2UuUGhvb2s9NDIwO2UuUGk9OTI4O2UuUGl3cmFybWVuaWFuPTEzNjM7ZS5QbW9ub3NwYWNlPTY1MzI4O2UuUHNpPTkzNjtlLlBzaWN5cmlsbGljPTExMzY7ZS5Qc21hbGw9NjMzNDQ7ZS5RPTgxO2UuUWNpcmNsZT05NDE0O2UuUW1vbm9zcGFjZT02NTMyOTtlLlFzbWFsbD02MzM0NTtlLlI9ODI7ZS5SYWFybWVuaWFuPTEzNTY7ZS5SYWN1dGU9MzQwO2UuUmNhcm9uPTM0NDtlLlJjZWRpbGxhPTM0MjtlLlJjaXJjbGU9OTQxNTtlLlJjb21tYWFjY2VudD0zNDI7ZS5SZGJsZ3JhdmU9NTI4O2UuUmRvdGFjY2VudD03NzY4O2UuUmRvdGJlbG93PTc3NzA7ZS5SZG90YmVsb3dtYWNyb249Nzc3MjtlLlJlaGFybWVuaWFuPTEzNjA7ZS5SZnJha3R1cj04NDc2O2UuUmhvPTkyOTtlLlJpbmdzbWFsbD02MzIyODtlLlJpbnZlcnRlZGJyZXZlPTUzMDtlLlJsaW5lYmVsb3c9Nzc3NDtlLlJtb25vc3BhY2U9NjUzMzA7ZS5Sc21hbGw9NjMzNDY7ZS5Sc21hbGxpbnZlcnRlZD02NDE7ZS5Sc21hbGxpbnZlcnRlZHN1cGVyaW9yPTY5NDtlLlM9ODM7ZS5TRjAxMDAwMD05NDg0O2UuU0YwMjAwMDA9OTQ5MjtlLlNGMDMwMDAwPTk0ODg7ZS5TRjA0MDAwMD05NDk2O2UuU0YwNTAwMDA9OTUzMjtlLlNGMDYwMDAwPTk1MTY7ZS5TRjA3MDAwMD05NTI0O2UuU0YwODAwMDA9OTUwMDtlLlNGMDkwMDAwPTk1MDg7ZS5TRjEwMDAwMD05NDcyO2UuU0YxMTAwMDA9OTQ3NDtlLlNGMTkwMDAwPTk1Njk7ZS5TRjIwMDAwMD05NTcwO2UuU0YyMTAwMDA9OTU1ODtlLlNGMjIwMDAwPTk1NTc7ZS5TRjIzMDAwMD05NTcxO2UuU0YyNDAwMDA9OTU1MztlLlNGMjUwMDAwPTk1NTk7ZS5TRjI2MDAwMD05NTY1O2UuU0YyNzAwMDA9OTU2NDtlLlNGMjgwMDAwPTk1NjM7ZS5TRjM2MDAwMD05NTY2O2UuU0YzNzAwMDA9OTU2NztlLlNGMzgwMDAwPTk1NjI7ZS5TRjM5MDAwMD05NTU2O2UuU0Y0MDAwMDA9OTU3NztlLlNGNDEwMDAwPTk1NzQ7ZS5TRjQyMDAwMD05NTY4O2UuU0Y0MzAwMDA9OTU1MjtlLlNGNDQwMDAwPTk1ODA7ZS5TRjQ1MDAwMD05NTc1O2UuU0Y0NjAwMDA9OTU3NjtlLlNGNDcwMDAwPTk1NzI7ZS5TRjQ4MDAwMD05NTczO2UuU0Y0OTAwMDA9OTU2MTtlLlNGNTAwMDAwPTk1NjA7ZS5TRjUxMDAwMD05NTU0O2UuU0Y1MjAwMDA9OTU1NTtlLlNGNTMwMDAwPTk1Nzk7ZS5TRjU0MDAwMD05NTc4O2UuU2FjdXRlPTM0NjtlLlNhY3V0ZWRvdGFjY2VudD03NzgwO2UuU2FtcGlncmVlaz05OTI7ZS5TY2Fyb249MzUyO2UuU2Nhcm9uZG90YWNjZW50PTc3ODI7ZS5TY2Fyb25zbWFsbD02MzIyOTtlLlNjZWRpbGxhPTM1MDtlLlNjaHdhPTM5OTtlLlNjaHdhY3lyaWxsaWM9MTI0MDtlLlNjaHdhZGllcmVzaXNjeXJpbGxpYz0xMjQyO2UuU2NpcmNsZT05NDE2O2UuU2NpcmN1bWZsZXg9MzQ4O2UuU2NvbW1hYWNjZW50PTUzNjtlLlNkb3RhY2NlbnQ9Nzc3NjtlLlNkb3RiZWxvdz03Nzc4O2UuU2RvdGJlbG93ZG90YWNjZW50PTc3ODQ7ZS5TZWhhcm1lbmlhbj0xMzU3O2UuU2V2ZW5yb21hbj04NTUwO2UuU2hhYXJtZW5pYW49MTM1MTtlLlNoYWN5cmlsbGljPTEwNjQ7ZS5TaGNoYWN5cmlsbGljPTEwNjU7ZS5TaGVpY29wdGljPTk5NDtlLlNoaGFjeXJpbGxpYz0xMjEwO2UuU2hpbWFjb3B0aWM9MTAwNDtlLlNpZ21hPTkzMTtlLlNpeHJvbWFuPTg1NDk7ZS5TbW9ub3NwYWNlPTY1MzMxO2UuU29mdHNpZ25jeXJpbGxpYz0xMDY4O2UuU3NtYWxsPTYzMzQ3O2UuU3RpZ21hZ3JlZWs9OTg2O2UuVD04NDtlLlRhdT05MzI7ZS5UYmFyPTM1ODtlLlRjYXJvbj0zNTY7ZS5UY2VkaWxsYT0zNTQ7ZS5UY2lyY2xlPTk0MTc7ZS5UY2lyY3VtZmxleGJlbG93PTc3OTI7ZS5UY29tbWFhY2NlbnQ9MzU0O2UuVGRvdGFjY2VudD03Nzg2O2UuVGRvdGJlbG93PTc3ODg7ZS5UZWN5cmlsbGljPTEwNTg7ZS5UZWRlc2NlbmRlcmN5cmlsbGljPTExOTY7ZS5UZW5yb21hbj04NTUzO2UuVGV0c2VjeXJpbGxpYz0xMjA0O2UuVGhldGE9OTIwO2UuVGhvb2s9NDI4O2UuVGhvcm49MjIyO2UuVGhvcm5zbWFsbD02MzQ4NjtlLlRocmVlcm9tYW49ODU0NjtlLlRpbGRlc21hbGw9NjMyMzA7ZS5UaXduYXJtZW5pYW49MTM1OTtlLlRsaW5lYmVsb3c9Nzc5MDtlLlRtb25vc3BhY2U9NjUzMzI7ZS5Ub2FybWVuaWFuPTEzMzc7ZS5Ub25lZml2ZT00NDQ7ZS5Ub25lc2l4PTM4ODtlLlRvbmV0d289NDIzO2UuVHJldHJvZmxleGhvb2s9NDMwO2UuVHNlY3lyaWxsaWM9MTA2MjtlLlRzaGVjeXJpbGxpYz0xMDM1O2UuVHNtYWxsPTYzMzQ4O2UuVHdlbHZlcm9tYW49ODU1NTtlLlR3b3JvbWFuPTg1NDU7ZS5VPTg1O2UuVWFjdXRlPTIxODtlLlVhY3V0ZXNtYWxsPTYzNDgyO2UuVWJyZXZlPTM2NDtlLlVjYXJvbj00Njc7ZS5VY2lyY2xlPTk0MTg7ZS5VY2lyY3VtZmxleD0yMTk7ZS5VY2lyY3VtZmxleGJlbG93PTc3OTg7ZS5VY2lyY3VtZmxleHNtYWxsPTYzNDgzO2UuVWN5cmlsbGljPTEwNTk7ZS5VZGJsYWN1dGU9MzY4O2UuVWRibGdyYXZlPTUzMjtlLlVkaWVyZXNpcz0yMjA7ZS5VZGllcmVzaXNhY3V0ZT00NzE7ZS5VZGllcmVzaXNiZWxvdz03Nzk0O2UuVWRpZXJlc2lzY2Fyb249NDczO2UuVWRpZXJlc2lzY3lyaWxsaWM9MTI2NDtlLlVkaWVyZXNpc2dyYXZlPTQ3NTtlLlVkaWVyZXNpc21hY3Jvbj00Njk7ZS5VZGllcmVzaXNzbWFsbD02MzQ4NDtlLlVkb3RiZWxvdz03OTA4O2UuVWdyYXZlPTIxNztlLlVncmF2ZXNtYWxsPTYzNDgxO2UuVWhvb2thYm92ZT03OTEwO2UuVWhvcm49NDMxO2UuVWhvcm5hY3V0ZT03OTEyO2UuVWhvcm5kb3RiZWxvdz03OTIwO2UuVWhvcm5ncmF2ZT03OTE0O2UuVWhvcm5ob29rYWJvdmU9NzkxNjtlLlVob3JudGlsZGU9NzkxODtlLlVodW5nYXJ1bWxhdXQ9MzY4O2UuVWh1bmdhcnVtbGF1dGN5cmlsbGljPTEyNjY7ZS5VaW52ZXJ0ZWRicmV2ZT01MzQ7ZS5Va2N5cmlsbGljPTExNDQ7ZS5VbWFjcm9uPTM2MjtlLlVtYWNyb25jeXJpbGxpYz0xMjYyO2UuVW1hY3JvbmRpZXJlc2lzPTc4MDI7ZS5VbW9ub3NwYWNlPTY1MzMzO2UuVW9nb25laz0zNzA7ZS5VcHNpbG9uPTkzMztlLlVwc2lsb24xPTk3ODtlLlVwc2lsb25hY3V0ZWhvb2tzeW1ib2xncmVlaz05Nzk7ZS5VcHNpbG9uYWZyaWNhbj00MzM7ZS5VcHNpbG9uZGllcmVzaXM9OTM5O2UuVXBzaWxvbmRpZXJlc2lzaG9va3N5bWJvbGdyZWVrPTk4MDtlLlVwc2lsb25ob29rc3ltYm9sPTk3ODtlLlVwc2lsb250b25vcz05MTA7ZS5VcmluZz0zNjY7ZS5Vc2hvcnRjeXJpbGxpYz0xMDM4O2UuVXNtYWxsPTYzMzQ5O2UuVXN0cmFpZ2h0Y3lyaWxsaWM9MTE5ODtlLlVzdHJhaWdodHN0cm9rZWN5cmlsbGljPTEyMDA7ZS5VdGlsZGU9MzYwO2UuVXRpbGRlYWN1dGU9NzgwMDtlLlV0aWxkZWJlbG93PTc3OTY7ZS5WPTg2O2UuVmNpcmNsZT05NDE5O2UuVmRvdGJlbG93PTc4MDY7ZS5WZWN5cmlsbGljPTEwNDI7ZS5WZXdhcm1lbmlhbj0xMzU4O2UuVmhvb2s9NDM0O2UuVm1vbm9zcGFjZT02NTMzNDtlLlZvYXJtZW5pYW49MTM1MjtlLlZzbWFsbD02MzM1MDtlLlZ0aWxkZT03ODA0O2UuVz04NztlLldhY3V0ZT03ODEwO2UuV2NpcmNsZT05NDIwO2UuV2NpcmN1bWZsZXg9MzcyO2UuV2RpZXJlc2lzPTc4MTI7ZS5XZG90YWNjZW50PTc4MTQ7ZS5XZG90YmVsb3c9NzgxNjtlLldncmF2ZT03ODA4O2UuV21vbm9zcGFjZT02NTMzNTtlLldzbWFsbD02MzM1MTtlLlg9ODg7ZS5YY2lyY2xlPTk0MjE7ZS5YZGllcmVzaXM9NzgyMDtlLlhkb3RhY2NlbnQ9NzgxODtlLlhlaGFybWVuaWFuPTEzNDE7ZS5YaT05MjY7ZS5YbW9ub3NwYWNlPTY1MzM2O2UuWHNtYWxsPTYzMzUyO2UuWT04OTtlLllhY3V0ZT0yMjE7ZS5ZYWN1dGVzbWFsbD02MzQ4NTtlLllhdGN5cmlsbGljPTExMjI7ZS5ZY2lyY2xlPTk0MjI7ZS5ZY2lyY3VtZmxleD0zNzQ7ZS5ZZGllcmVzaXM9Mzc2O2UuWWRpZXJlc2lzc21hbGw9NjM0ODc7ZS5ZZG90YWNjZW50PTc4MjI7ZS5ZZG90YmVsb3c9NzkyNDtlLlllcmljeXJpbGxpYz0xMDY3O2UuWWVydWRpZXJlc2lzY3lyaWxsaWM9MTI3MjtlLllncmF2ZT03OTIyO2UuWWhvb2s9NDM1O2UuWWhvb2thYm92ZT03OTI2O2UuWWlhcm1lbmlhbj0xMzQ5O2UuWWljeXJpbGxpYz0xMDMxO2UuWWl3bmFybWVuaWFuPTEzNjI7ZS5ZbW9ub3NwYWNlPTY1MzM3O2UuWXNtYWxsPTYzMzUzO2UuWXRpbGRlPTc5Mjg7ZS5ZdXNiaWdjeXJpbGxpYz0xMTMwO2UuWXVzYmlnaW90aWZpZWRjeXJpbGxpYz0xMTMyO2UuWXVzbGl0dGxlY3lyaWxsaWM9MTEyNjtlLll1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWM9MTEyODtlLlo9OTA7ZS5aYWFybWVuaWFuPTEzMzQ7ZS5aYWN1dGU9Mzc3O2UuWmNhcm9uPTM4MTtlLlpjYXJvbnNtYWxsPTYzMjMxO2UuWmNpcmNsZT05NDIzO2UuWmNpcmN1bWZsZXg9NzgyNDtlLlpkb3Q9Mzc5O2UuWmRvdGFjY2VudD0zNzk7ZS5aZG90YmVsb3c9NzgyNjtlLlplY3lyaWxsaWM9MTA0NztlLlplZGVzY2VuZGVyY3lyaWxsaWM9MTE3NjtlLlplZGllcmVzaXNjeXJpbGxpYz0xMjQ2O2UuWmV0YT05MTg7ZS5aaGVhcm1lbmlhbj0xMzM4O2UuWmhlYnJldmVjeXJpbGxpYz0xMjE3O2UuWmhlY3lyaWxsaWM9MTA0NjtlLlpoZWRlc2NlbmRlcmN5cmlsbGljPTExNzQ7ZS5aaGVkaWVyZXNpc2N5cmlsbGljPTEyNDQ7ZS5abGluZWJlbG93PTc4Mjg7ZS5abW9ub3NwYWNlPTY1MzM4O2UuWnNtYWxsPTYzMzU0O2UuWnN0cm9rZT00Mzc7ZS5hPTk3O2UuYWFiZW5nYWxpPTI0Mzg7ZS5hYWN1dGU9MjI1O2UuYWFkZXZhPTIzMTA7ZS5hYWd1amFyYXRpPTI2OTQ7ZS5hYWd1cm11a2hpPTI1NjY7ZS5hYW1hdHJhZ3VybXVraGk9MjYyMjtlLmFhcnVzcXVhcmU9MTMwNTk7ZS5hYXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NDtlLmFhdm93ZWxzaWduZGV2YT0yMzY2O2UuYWF2b3dlbHNpZ25ndWphcmF0aT0yNzUwO2UuYWJicmV2aWF0aW9ubWFya2FybWVuaWFuPTEzNzU7ZS5hYmJyZXZpYXRpb25zaWduZGV2YT0yNDE2O2UuYWJlbmdhbGk9MjQzNztlLmFib3BvbW9mbz0xMjU3MDtlLmFicmV2ZT0yNTk7ZS5hYnJldmVhY3V0ZT03ODU1O2UuYWJyZXZlY3lyaWxsaWM9MTIzMztlLmFicmV2ZWRvdGJlbG93PTc4NjM7ZS5hYnJldmVncmF2ZT03ODU3O2UuYWJyZXZlaG9va2Fib3ZlPTc4NTk7ZS5hYnJldmV0aWxkZT03ODYxO2UuYWNhcm9uPTQ2MjtlLmFjaXJjbGU9OTQyNDtlLmFjaXJjdW1mbGV4PTIyNjtlLmFjaXJjdW1mbGV4YWN1dGU9Nzg0NTtlLmFjaXJjdW1mbGV4ZG90YmVsb3c9Nzg1MztlLmFjaXJjdW1mbGV4Z3JhdmU9Nzg0NztlLmFjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NDk7ZS5hY2lyY3VtZmxleHRpbGRlPTc4NTE7ZS5hY3V0ZT0xODA7ZS5hY3V0ZWJlbG93Y21iPTc5MTtlLmFjdXRlY21iPTc2OTtlLmFjdXRlY29tYj03Njk7ZS5hY3V0ZWRldmE9MjM4ODtlLmFjdXRlbG93bW9kPTcxOTtlLmFjdXRldG9uZWNtYj04MzM7ZS5hY3lyaWxsaWM9MTA3MjtlLmFkYmxncmF2ZT01MTM7ZS5hZGRha2d1cm11a2hpPTI2NzM7ZS5hZGV2YT0yMzA5O2UuYWRpZXJlc2lzPTIyODtlLmFkaWVyZXNpc2N5cmlsbGljPTEyMzU7ZS5hZGllcmVzaXNtYWNyb249NDc5O2UuYWRvdGJlbG93PTc4NDE7ZS5hZG90bWFjcm9uPTQ4MTtlLmFlPTIzMDtlLmFlYWN1dGU9NTA5O2UuYWVrb3JlYW49MTI2MjQ7ZS5hZW1hY3Jvbj00ODM7ZS5hZmlpMDAyMDg9ODIxMztlLmFmaWkwODk0MT04MzU2O2UuYWZpaTEwMDE3PTEwNDA7ZS5hZmlpMTAwMTg9MTA0MTtlLmFmaWkxMDAxOT0xMDQyO2UuYWZpaTEwMDIwPTEwNDM7ZS5hZmlpMTAwMjE9MTA0NDtlLmFmaWkxMDAyMj0xMDQ1O2UuYWZpaTEwMDIzPTEwMjU7ZS5hZmlpMTAwMjQ9MTA0NjtlLmFmaWkxMDAyNT0xMDQ3O2UuYWZpaTEwMDI2PTEwNDg7ZS5hZmlpMTAwMjc9MTA0OTtlLmFmaWkxMDAyOD0xMDUwO2UuYWZpaTEwMDI5PTEwNTE7ZS5hZmlpMTAwMzA9MTA1MjtlLmFmaWkxMDAzMT0xMDUzO2UuYWZpaTEwMDMyPTEwNTQ7ZS5hZmlpMTAwMzM9MTA1NTtlLmFmaWkxMDAzND0xMDU2O2UuYWZpaTEwMDM1PTEwNTc7ZS5hZmlpMTAwMzY9MTA1ODtlLmFmaWkxMDAzNz0xMDU5O2UuYWZpaTEwMDM4PTEwNjA7ZS5hZmlpMTAwMzk9MTA2MTtlLmFmaWkxMDA0MD0xMDYyO2UuYWZpaTEwMDQxPTEwNjM7ZS5hZmlpMTAwNDI9MTA2NDtlLmFmaWkxMDA0Mz0xMDY1O2UuYWZpaTEwMDQ0PTEwNjY7ZS5hZmlpMTAwNDU9MTA2NztlLmFmaWkxMDA0Nj0xMDY4O2UuYWZpaTEwMDQ3PTEwNjk7ZS5hZmlpMTAwNDg9MTA3MDtlLmFmaWkxMDA0OT0xMDcxO2UuYWZpaTEwMDUwPTExNjg7ZS5hZmlpMTAwNTE9MTAyNjtlLmFmaWkxMDA1Mj0xMDI3O2UuYWZpaTEwMDUzPTEwMjg7ZS5hZmlpMTAwNTQ9MTAyOTtlLmFmaWkxMDA1NT0xMDMwO2UuYWZpaTEwMDU2PTEwMzE7ZS5hZmlpMTAwNTc9MTAzMjtlLmFmaWkxMDA1OD0xMDMzO2UuYWZpaTEwMDU5PTEwMzQ7ZS5hZmlpMTAwNjA9MTAzNTtlLmFmaWkxMDA2MT0xMDM2O2UuYWZpaTEwMDYyPTEwMzg7ZS5hZmlpMTAwNjM9NjMxNzI7ZS5hZmlpMTAwNjQ9NjMxNzM7ZS5hZmlpMTAwNjU9MTA3MjtlLmFmaWkxMDA2Nj0xMDczO2UuYWZpaTEwMDY3PTEwNzQ7ZS5hZmlpMTAwNjg9MTA3NTtlLmFmaWkxMDA2OT0xMDc2O2UuYWZpaTEwMDcwPTEwNzc7ZS5hZmlpMTAwNzE9MTEwNTtlLmFmaWkxMDA3Mj0xMDc4O2UuYWZpaTEwMDczPTEwNzk7ZS5hZmlpMTAwNzQ9MTA4MDtlLmFmaWkxMDA3NT0xMDgxO2UuYWZpaTEwMDc2PTEwODI7ZS5hZmlpMTAwNzc9MTA4MztlLmFmaWkxMDA3OD0xMDg0O2UuYWZpaTEwMDc5PTEwODU7ZS5hZmlpMTAwODA9MTA4NjtlLmFmaWkxMDA4MT0xMDg3O2UuYWZpaTEwMDgyPTEwODg7ZS5hZmlpMTAwODM9MTA4OTtlLmFmaWkxMDA4ND0xMDkwO2UuYWZpaTEwMDg1PTEwOTE7ZS5hZmlpMTAwODY9MTA5MjtlLmFmaWkxMDA4Nz0xMDkzO2UuYWZpaTEwMDg4PTEwOTQ7ZS5hZmlpMTAwODk9MTA5NTtlLmFmaWkxMDA5MD0xMDk2O2UuYWZpaTEwMDkxPTEwOTc7ZS5hZmlpMTAwOTI9MTA5ODtlLmFmaWkxMDA5Mz0xMDk5O2UuYWZpaTEwMDk0PTExMDA7ZS5hZmlpMTAwOTU9MTEwMTtlLmFmaWkxMDA5Nj0xMTAyO2UuYWZpaTEwMDk3PTExMDM7ZS5hZmlpMTAwOTg9MTE2OTtlLmFmaWkxMDA5OT0xMTA2O2UuYWZpaTEwMTAwPTExMDc7ZS5hZmlpMTAxMDE9MTEwODtlLmFmaWkxMDEwMj0xMTA5O2UuYWZpaTEwMTAzPTExMTA7ZS5hZmlpMTAxMDQ9MTExMTtlLmFmaWkxMDEwNT0xMTEyO2UuYWZpaTEwMTA2PTExMTM7ZS5hZmlpMTAxMDc9MTExNDtlLmFmaWkxMDEwOD0xMTE1O2UuYWZpaTEwMTA5PTExMTY7ZS5hZmlpMTAxMTA9MTExODtlLmFmaWkxMDE0NT0xMDM5O2UuYWZpaTEwMTQ2PTExMjI7ZS5hZmlpMTAxNDc9MTEzODtlLmFmaWkxMDE0OD0xMTQwO2UuYWZpaTEwMTkyPTYzMTc0O2UuYWZpaTEwMTkzPTExMTk7ZS5hZmlpMTAxOTQ9MTEyMztlLmFmaWkxMDE5NT0xMTM5O2UuYWZpaTEwMTk2PTExNDE7ZS5hZmlpMTA4MzE9NjMxNzU7ZS5hZmlpMTA4MzI9NjMxNzY7ZS5hZmlpMTA4NDY9MTI0MTtlLmFmaWkyOTk9ODIwNjtlLmFmaWkzMDA9ODIwNztlLmFmaWkzMDE9ODIwNTtlLmFmaWk1NzM4MT0xNjQyO2UuYWZpaTU3Mzg4PTE1NDg7ZS5hZmlpNTczOTI9MTYzMjtlLmFmaWk1NzM5Mz0xNjMzO2UuYWZpaTU3Mzk0PTE2MzQ7ZS5hZmlpNTczOTU9MTYzNTtlLmFmaWk1NzM5Nj0xNjM2O2UuYWZpaTU3Mzk3PTE2Mzc7ZS5hZmlpNTczOTg9MTYzODtlLmFmaWk1NzM5OT0xNjM5O2UuYWZpaTU3NDAwPTE2NDA7ZS5hZmlpNTc0MDE9MTY0MTtlLmFmaWk1NzQwMz0xNTYzO2UuYWZpaTU3NDA3PTE1Njc7ZS5hZmlpNTc0MDk9MTU2OTtlLmFmaWk1NzQxMD0xNTcwO2UuYWZpaTU3NDExPTE1NzE7ZS5hZmlpNTc0MTI9MTU3MjtlLmFmaWk1NzQxMz0xNTczO2UuYWZpaTU3NDE0PTE1NzQ7ZS5hZmlpNTc0MTU9MTU3NTtlLmFmaWk1NzQxNj0xNTc2O2UuYWZpaTU3NDE3PTE1Nzc7ZS5hZmlpNTc0MTg9MTU3ODtlLmFmaWk1NzQxOT0xNTc5O2UuYWZpaTU3NDIwPTE1ODA7ZS5hZmlpNTc0MjE9MTU4MTtlLmFmaWk1NzQyMj0xNTgyO2UuYWZpaTU3NDIzPTE1ODM7ZS5hZmlpNTc0MjQ9MTU4NDtlLmFmaWk1NzQyNT0xNTg1O2UuYWZpaTU3NDI2PTE1ODY7ZS5hZmlpNTc0Mjc9MTU4NztlLmFmaWk1NzQyOD0xNTg4O2UuYWZpaTU3NDI5PTE1ODk7ZS5hZmlpNTc0MzA9MTU5MDtlLmFmaWk1NzQzMT0xNTkxO2UuYWZpaTU3NDMyPTE1OTI7ZS5hZmlpNTc0MzM9MTU5MztlLmFmaWk1NzQzND0xNTk0O2UuYWZpaTU3NDQwPTE2MDA7ZS5hZmlpNTc0NDE9MTYwMTtlLmFmaWk1NzQ0Mj0xNjAyO2UuYWZpaTU3NDQzPTE2MDM7ZS5hZmlpNTc0NDQ9MTYwNDtlLmFmaWk1NzQ0NT0xNjA1O2UuYWZpaTU3NDQ2PTE2MDY7ZS5hZmlpNTc0NDg9MTYwODtlLmFmaWk1NzQ0OT0xNjA5O2UuYWZpaTU3NDUwPTE2MTA7ZS5hZmlpNTc0NTE9MTYxMTtlLmFmaWk1NzQ1Mj0xNjEyO2UuYWZpaTU3NDUzPTE2MTM7ZS5hZmlpNTc0NTQ9MTYxNDtlLmFmaWk1NzQ1NT0xNjE1O2UuYWZpaTU3NDU2PTE2MTY7ZS5hZmlpNTc0NTc9MTYxNztlLmFmaWk1NzQ1OD0xNjE4O2UuYWZpaTU3NDcwPTE2MDc7ZS5hZmlpNTc1MDU9MTcwMDtlLmFmaWk1NzUwNj0xNjYyO2UuYWZpaTU3NTA3PTE2NzA7ZS5hZmlpNTc1MDg9MTY4ODtlLmFmaWk1NzUwOT0xNzExO2UuYWZpaTU3NTExPTE2NTc7ZS5hZmlpNTc1MTI9MTY3MjtlLmFmaWk1NzUxMz0xNjgxO2UuYWZpaTU3NTE0PTE3MjI7ZS5hZmlpNTc1MTk9MTc0NjtlLmFmaWk1NzUzND0xNzQ5O2UuYWZpaTU3NjM2PTgzNjI7ZS5hZmlpNTc2NDU9MTQ3MDtlLmFmaWk1NzY1OD0xNDc1O2UuYWZpaTU3NjY0PTE0ODg7ZS5hZmlpNTc2NjU9MTQ4OTtlLmFmaWk1NzY2Nj0xNDkwO2UuYWZpaTU3NjY3PTE0OTE7ZS5hZmlpNTc2Njg9MTQ5MjtlLmFmaWk1NzY2OT0xNDkzO2UuYWZpaTU3NjcwPTE0OTQ7ZS5hZmlpNTc2NzE9MTQ5NTtlLmFmaWk1NzY3Mj0xNDk2O2UuYWZpaTU3NjczPTE0OTc7ZS5hZmlpNTc2NzQ9MTQ5ODtlLmFmaWk1NzY3NT0xNDk5O2UuYWZpaTU3Njc2PTE1MDA7ZS5hZmlpNTc2Nzc9MTUwMTtlLmFmaWk1NzY3OD0xNTAyO2UuYWZpaTU3Njc5PTE1MDM7ZS5hZmlpNTc2ODA9MTUwNDtlLmFmaWk1NzY4MT0xNTA1O2UuYWZpaTU3NjgyPTE1MDY7ZS5hZmlpNTc2ODM9MTUwNztlLmFmaWk1NzY4ND0xNTA4O2UuYWZpaTU3Njg1PTE1MDk7ZS5hZmlpNTc2ODY9MTUxMDtlLmFmaWk1NzY4Nz0xNTExO2UuYWZpaTU3Njg4PTE1MTI7ZS5hZmlpNTc2ODk9MTUxMztlLmFmaWk1NzY5MD0xNTE0O2UuYWZpaTU3Njk0PTY0Mjk4O2UuYWZpaTU3Njk1PTY0Mjk5O2UuYWZpaTU3NzAwPTY0MzMxO2UuYWZpaTU3NzA1PTY0Mjg3O2UuYWZpaTU3NzE2PTE1MjA7ZS5hZmlpNTc3MTc9MTUyMTtlLmFmaWk1NzcxOD0xNTIyO2UuYWZpaTU3NzIzPTY0MzA5O2UuYWZpaTU3NzkzPTE0NjA7ZS5hZmlpNTc3OTQ9MTQ2MTtlLmFmaWk1Nzc5NT0xNDYyO2UuYWZpaTU3Nzk2PTE0Njc7ZS5hZmlpNTc3OTc9MTQ2NDtlLmFmaWk1Nzc5OD0xNDYzO2UuYWZpaTU3Nzk5PTE0NTY7ZS5hZmlpNTc4MDA9MTQ1ODtlLmFmaWk1NzgwMT0xNDU3O2UuYWZpaTU3ODAyPTE0NTk7ZS5hZmlpNTc4MDM9MTQ3NDtlLmFmaWk1NzgwND0xNDczO2UuYWZpaTU3ODA2PTE0NjU7ZS5hZmlpNTc4MDc9MTQ2ODtlLmFmaWk1NzgzOT0xNDY5O2UuYWZpaTU3ODQxPTE0NzE7ZS5hZmlpNTc4NDI9MTQ3MjtlLmFmaWk1NzkyOT03MDA7ZS5hZmlpNjEyNDg9ODQ1MztlLmFmaWk2MTI4OT04NDY3O2UuYWZpaTYxMzUyPTg0NzA7ZS5hZmlpNjE1NzM9ODIzNjtlLmFmaWk2MTU3ND04MjM3O2UuYWZpaTYxNTc1PTgyMzg7ZS5hZmlpNjE2NjQ9ODIwNDtlLmFmaWk2MzE2Nz0xNjQ1O2UuYWZpaTY0OTM3PTcwMTtlLmFncmF2ZT0yMjQ7ZS5hZ3VqYXJhdGk9MjY5MztlLmFndXJtdWtoaT0yNTY1O2UuYWhpcmFnYW5hPTEyMzU0O2UuYWhvb2thYm92ZT03ODQzO2UuYWliZW5nYWxpPTI0NDg7ZS5haWJvcG9tb2ZvPTEyNTc0O2UuYWlkZXZhPTIzMjA7ZS5haWVjeXJpbGxpYz0xMjM3O2UuYWlndWphcmF0aT0yNzA0O2UuYWlndXJtdWtoaT0yNTc2O2UuYWltYXRyYWd1cm11a2hpPTI2MzI7ZS5haW5hcmFiaWM9MTU5MztlLmFpbmZpbmFsYXJhYmljPTY1MjI2O2UuYWluaW5pdGlhbGFyYWJpYz02NTIyNztlLmFpbm1lZGlhbGFyYWJpYz02NTIyODtlLmFpbnZlcnRlZGJyZXZlPTUxNTtlLmFpdm93ZWxzaWduYmVuZ2FsaT0yNTA0O2UuYWl2b3dlbHNpZ25kZXZhPTIzNzY7ZS5haXZvd2Vsc2lnbmd1amFyYXRpPTI3NjA7ZS5ha2F0YWthbmE9MTI0NTA7ZS5ha2F0YWthbmFoYWxmd2lkdGg9NjUzOTM7ZS5ha29yZWFuPTEyNjIzO2UuYWxlZj0xNDg4O2UuYWxlZmFyYWJpYz0xNTc1O2UuYWxlZmRhZ2VzaGhlYnJldz02NDMwNDtlLmFsZWZmaW5hbGFyYWJpYz02NTE2NjtlLmFsZWZoYW16YWFib3ZlYXJhYmljPTE1NzE7ZS5hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MTU2O2UuYWxlZmhhbXphYmVsb3dhcmFiaWM9MTU3MztlLmFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWM9NjUxNjA7ZS5hbGVmaGVicmV3PTE0ODg7ZS5hbGVmbGFtZWRoZWJyZXc9NjQzMzU7ZS5hbGVmbWFkZGFhYm92ZWFyYWJpYz0xNTcwO2UuYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYz02NTE1NDtlLmFsZWZtYWtzdXJhYXJhYmljPTE2MDk7ZS5hbGVmbWFrc3VyYWZpbmFsYXJhYmljPTY1MjY0O2UuYWxlZm1ha3N1cmFpbml0aWFsYXJhYmljPTY1MjY3O2UuYWxlZm1ha3N1cmFtZWRpYWxhcmFiaWM9NjUyNjg7ZS5hbGVmcGF0YWhoZWJyZXc9NjQzMDI7ZS5hbGVmcWFtYXRzaGVicmV3PTY0MzAzO2UuYWxlcGg9ODUwMTtlLmFsbGVxdWFsPTg3ODA7ZS5hbHBoYT05NDU7ZS5hbHBoYXRvbm9zPTk0MDtlLmFtYWNyb249MjU3O2UuYW1vbm9zcGFjZT02NTM0NTtlLmFtcGVyc2FuZD0zODtlLmFtcGVyc2FuZG1vbm9zcGFjZT02NTI4NjtlLmFtcGVyc2FuZHNtYWxsPTYzMjcwO2UuYW1zcXVhcmU9MTMyNTA7ZS5hbmJvcG9tb2ZvPTEyNTc4O2UuYW5nYm9wb21vZm89MTI1ODA7ZS5hbmdicmFja2V0bGVmdD0xMjI5NjtlLmFuZ2JyYWNrZXRyaWdodD0xMjI5NztlLmFuZ2toYW5raHV0aGFpPTM2NzQ7ZS5hbmdsZT04NzM2O2UuYW5nbGVicmFja2V0bGVmdD0xMjI5NjtlLmFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NztlLmFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk3O2UuYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4ODtlLmFuZ2xlbGVmdD05MDAxO2UuYW5nbGVyaWdodD05MDAyO2UuYW5nc3Ryb209ODQ5MTtlLmFub3RlbGVpYT05MDM7ZS5hbnVkYXR0YWRldmE9MjM4NjtlLmFudXN2YXJhYmVuZ2FsaT0yNDM0O2UuYW51c3ZhcmFkZXZhPTIzMDY7ZS5hbnVzdmFyYWd1amFyYXRpPTI2OTA7ZS5hb2dvbmVrPTI2MTtlLmFwYWF0b3NxdWFyZT0xMzA1NjtlLmFwYXJlbj05MzcyO2UuYXBvc3Ryb3BoZWFybWVuaWFuPTEzNzA7ZS5hcG9zdHJvcGhlbW9kPTcwMDtlLmFwcGxlPTYzNzQzO2UuYXBwcm9hY2hlcz04Nzg0O2UuYXBwcm94ZXF1YWw9ODc3NjtlLmFwcHJveGVxdWFsb3JpbWFnZT04Nzg2O2UuYXBwcm94aW1hdGVseWVxdWFsPTg3NzM7ZS5hcmFlYWVrb3JlYW49MTI2ODY7ZS5hcmFlYWtvcmVhbj0xMjY4NTtlLmFyYz04OTc4O2UuYXJpZ2h0aGFsZnJpbmc9NzgzNDtlLmFyaW5nPTIyOTtlLmFyaW5nYWN1dGU9NTA3O2UuYXJpbmdiZWxvdz03NjgxO2UuYXJyb3dib3RoPTg1OTY7ZS5hcnJvd2Rhc2hkb3duPTg2NzU7ZS5hcnJvd2Rhc2hsZWZ0PTg2NzI7ZS5hcnJvd2Rhc2hyaWdodD04Njc0O2UuYXJyb3dkYXNodXA9ODY3MztlLmFycm93ZGJsYm90aD04NjYwO2UuYXJyb3dkYmxkb3duPTg2NTk7ZS5hcnJvd2RibGxlZnQ9ODY1NjtlLmFycm93ZGJscmlnaHQ9ODY1ODtlLmFycm93ZGJsdXA9ODY1NztlLmFycm93ZG93bj04NTk1O2UuYXJyb3dkb3dubGVmdD04NjAxO2UuYXJyb3dkb3ducmlnaHQ9ODYwMDtlLmFycm93ZG93bndoaXRlPTg2ODE7ZS5hcnJvd2hlYWRkb3dubW9kPTcwOTtlLmFycm93aGVhZGxlZnRtb2Q9NzA2O2UuYXJyb3doZWFkcmlnaHRtb2Q9NzA3O2UuYXJyb3doZWFkdXBtb2Q9NzA4O2UuYXJyb3dob3JpemV4PTYzNzE5O2UuYXJyb3dsZWZ0PTg1OTI7ZS5hcnJvd2xlZnRkYmw9ODY1NjtlLmFycm93bGVmdGRibHN0cm9rZT04NjUzO2UuYXJyb3dsZWZ0b3ZlcnJpZ2h0PTg2NDY7ZS5hcnJvd2xlZnR3aGl0ZT04Njc4O2UuYXJyb3dyaWdodD04NTk0O2UuYXJyb3dyaWdodGRibHN0cm9rZT04NjU1O2UuYXJyb3dyaWdodGhlYXZ5PTEwMTQyO2UuYXJyb3dyaWdodG92ZXJsZWZ0PTg2NDQ7ZS5hcnJvd3JpZ2h0d2hpdGU9ODY4MDtlLmFycm93dGFibGVmdD04Njc2O2UuYXJyb3d0YWJyaWdodD04Njc3O2UuYXJyb3d1cD04NTkzO2UuYXJyb3d1cGRuPTg1OTc7ZS5hcnJvd3VwZG5ic2U9ODYxNjtlLmFycm93dXBkb3duYmFzZT04NjE2O2UuYXJyb3d1cGxlZnQ9ODU5ODtlLmFycm93dXBsZWZ0b2Zkb3duPTg2NDU7ZS5hcnJvd3VwcmlnaHQ9ODU5OTtlLmFycm93dXB3aGl0ZT04Njc5O2UuYXJyb3d2ZXJ0ZXg9NjM3MTg7ZS5hc2NpaWNpcmN1bT05NDtlLmFzY2lpY2lyY3VtbW9ub3NwYWNlPTY1MzQyO2UuYXNjaWl0aWxkZT0xMjY7ZS5hc2NpaXRpbGRlbW9ub3NwYWNlPTY1Mzc0O2UuYXNjcmlwdD01OTM7ZS5hc2NyaXB0dHVybmVkPTU5NDtlLmFzbWFsbGhpcmFnYW5hPTEyMzUzO2UuYXNtYWxsa2F0YWthbmE9MTI0NDk7ZS5hc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4MztlLmFzdGVyaXNrPTQyO2UuYXN0ZXJpc2thbHRvbmVhcmFiaWM9MTY0NTtlLmFzdGVyaXNrYXJhYmljPTE2NDU7ZS5hc3Rlcmlza21hdGg9ODcyNztlLmFzdGVyaXNrbW9ub3NwYWNlPTY1MjkwO2UuYXN0ZXJpc2tzbWFsbD02NTEyMTtlLmFzdGVyaXNtPTgyNTg7ZS5hc3VwZXJpb3I9NjMyMDk7ZS5hc3ltcHRvdGljYWxseWVxdWFsPTg3NzE7ZS5hdD02NDtlLmF0aWxkZT0yMjc7ZS5hdG1vbm9zcGFjZT02NTMxMjtlLmF0c21hbGw9NjUxMzE7ZS5hdHVybmVkPTU5MjtlLmF1YmVuZ2FsaT0yNDUyO2UuYXVib3BvbW9mbz0xMjU3NjtlLmF1ZGV2YT0yMzI0O2UuYXVndWphcmF0aT0yNzA4O2UuYXVndXJtdWtoaT0yNTgwO2UuYXVsZW5ndGhtYXJrYmVuZ2FsaT0yNTE5O2UuYXVtYXRyYWd1cm11a2hpPTI2MzY7ZS5hdXZvd2Vsc2lnbmJlbmdhbGk9MjUwODtlLmF1dm93ZWxzaWduZGV2YT0yMzgwO2UuYXV2b3dlbHNpZ25ndWphcmF0aT0yNzY0O2UuYXZhZ3JhaGFkZXZhPTIzNjU7ZS5heWJhcm1lbmlhbj0xMzc3O2UuYXlpbj0xNTA2O2UuYXlpbmFsdG9uZWhlYnJldz02NDI4ODtlLmF5aW5oZWJyZXc9MTUwNjtlLmI9OTg7ZS5iYWJlbmdhbGk9MjQ3NjtlLmJhY2tzbGFzaD05MjtlLmJhY2tzbGFzaG1vbm9zcGFjZT02NTM0MDtlLmJhZGV2YT0yMzQ4O2UuYmFndWphcmF0aT0yNzMyO2UuYmFndXJtdWtoaT0yNjA0O2UuYmFoaXJhZ2FuYT0xMjQwMDtlLmJhaHR0aGFpPTM2NDc7ZS5iYWthdGFrYW5hPTEyNDk2O2UuYmFyPTEyNDtlLmJhcm1vbm9zcGFjZT02NTM3MjtlLmJib3BvbW9mbz0xMjU0OTtlLmJjaXJjbGU9OTQyNTtlLmJkb3RhY2NlbnQ9NzY4MztlLmJkb3RiZWxvdz03Njg1O2UuYmVhbWVkc2l4dGVlbnRobm90ZXM9OTgzNjtlLmJlY2F1c2U9ODc1NztlLmJlY3lyaWxsaWM9MTA3MztlLmJlaGFyYWJpYz0xNTc2O2UuYmVoZmluYWxhcmFiaWM9NjUxNjg7ZS5iZWhpbml0aWFsYXJhYmljPTY1MTY5O2UuYmVoaXJhZ2FuYT0xMjQwOTtlLmJlaG1lZGlhbGFyYWJpYz02NTE3MDtlLmJlaG1lZW1pbml0aWFsYXJhYmljPTY0NjcxO2UuYmVobWVlbWlzb2xhdGVkYXJhYmljPTY0NTIwO2UuYmVobm9vbmZpbmFsYXJhYmljPTY0NjIxO2UuYmVrYXRha2FuYT0xMjUwNTtlLmJlbmFybWVuaWFuPTEzNzg7ZS5iZXQ9MTQ4OTtlLmJldGE9OTQ2O2UuYmV0YXN5bWJvbGdyZWVrPTk3NjtlLmJldGRhZ2VzaD02NDMwNTtlLmJldGRhZ2VzaGhlYnJldz02NDMwNTtlLmJldGhlYnJldz0xNDg5O2UuYmV0cmFmZWhlYnJldz02NDMzMjtlLmJoYWJlbmdhbGk9MjQ3NztlLmJoYWRldmE9MjM0OTtlLmJoYWd1amFyYXRpPTI3MzM7ZS5iaGFndXJtdWtoaT0yNjA1O2UuYmhvb2s9NTk1O2UuYmloaXJhZ2FuYT0xMjQwMztlLmJpa2F0YWthbmE9MTI0OTk7ZS5iaWxhYmlhbGNsaWNrPTY2NDtlLmJpbmRpZ3VybXVraGk9MjU2MjtlLmJpcnVzcXVhcmU9MTMxMDU7ZS5ibGFja2NpcmNsZT05Njc5O2UuYmxhY2tkaWFtb25kPTk2NzA7ZS5ibGFja2Rvd25wb2ludGluZ3RyaWFuZ2xlPTk2NjA7ZS5ibGFja2xlZnRwb2ludGluZ3BvaW50ZXI9OTY2ODtlLmJsYWNrbGVmdHBvaW50aW5ndHJpYW5nbGU9OTY2NDtlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRsZWZ0PTEyMzA0O2UuYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4MztlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodD0xMjMwNTtlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDg0O2UuYmxhY2tsb3dlcmxlZnR0cmlhbmdsZT05Njk5O2UuYmxhY2tsb3dlcnJpZ2h0dHJpYW5nbGU9OTY5ODtlLmJsYWNrcmVjdGFuZ2xlPTk2NDQ7ZS5ibGFja3JpZ2h0cG9pbnRpbmdwb2ludGVyPTk2NTg7ZS5ibGFja3JpZ2h0cG9pbnRpbmd0cmlhbmdsZT05NjU0O2UuYmxhY2tzbWFsbHNxdWFyZT05NjQyO2UuYmxhY2tzbWlsaW5nZmFjZT05Nzg3O2UuYmxhY2tzcXVhcmU9OTYzMjtlLmJsYWNrc3Rhcj05NzMzO2UuYmxhY2t1cHBlcmxlZnR0cmlhbmdsZT05NzAwO2UuYmxhY2t1cHBlcnJpZ2h0dHJpYW5nbGU9OTcwMTtlLmJsYWNrdXBwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY1MjtlLmJsYWNrdXBwb2ludGluZ3RyaWFuZ2xlPTk2NTA7ZS5ibGFuaz05MjUxO2UuYmxpbmViZWxvdz03Njg3O2UuYmxvY2s9OTYwODtlLmJtb25vc3BhY2U9NjUzNDY7ZS5ib2JhaW1haXRoYWk9MzYxMDtlLmJvaGlyYWdhbmE9MTI0MTI7ZS5ib2thdGFrYW5hPTEyNTA4O2UuYnBhcmVuPTkzNzM7ZS5icXNxdWFyZT0xMzI1MTtlLmJyYWNlZXg9NjM3MzI7ZS5icmFjZWxlZnQ9MTIzO2UuYnJhY2VsZWZ0YnQ9NjM3MzE7ZS5icmFjZWxlZnRtaWQ9NjM3MzA7ZS5icmFjZWxlZnRtb25vc3BhY2U9NjUzNzE7ZS5icmFjZWxlZnRzbWFsbD02NTExNTtlLmJyYWNlbGVmdHRwPTYzNzI5O2UuYnJhY2VsZWZ0dmVydGljYWw9NjUwNzk7ZS5icmFjZXJpZ2h0PTEyNTtlLmJyYWNlcmlnaHRidD02Mzc0MjtlLmJyYWNlcmlnaHRtaWQ9NjM3NDE7ZS5icmFjZXJpZ2h0bW9ub3NwYWNlPTY1MzczO2UuYnJhY2VyaWdodHNtYWxsPTY1MTE2O2UuYnJhY2VyaWdodHRwPTYzNzQwO2UuYnJhY2VyaWdodHZlcnRpY2FsPTY1MDgwO2UuYnJhY2tldGxlZnQ9OTE7ZS5icmFja2V0bGVmdGJ0PTYzNzI4O2UuYnJhY2tldGxlZnRleD02MzcyNztlLmJyYWNrZXRsZWZ0bW9ub3NwYWNlPTY1MzM5O2UuYnJhY2tldGxlZnR0cD02MzcyNjtlLmJyYWNrZXRyaWdodD05MztlLmJyYWNrZXRyaWdodGJ0PTYzNzM5O2UuYnJhY2tldHJpZ2h0ZXg9NjM3Mzg7ZS5icmFja2V0cmlnaHRtb25vc3BhY2U9NjUzNDE7ZS5icmFja2V0cmlnaHR0cD02MzczNztlLmJyZXZlPTcyODtlLmJyZXZlYmVsb3djbWI9ODE0O2UuYnJldmVjbWI9Nzc0O2UuYnJldmVpbnZlcnRlZGJlbG93Y21iPTgxNTtlLmJyZXZlaW52ZXJ0ZWRjbWI9Nzg1O2UuYnJldmVpbnZlcnRlZGRvdWJsZWNtYj04NjU7ZS5icmlkZ2ViZWxvd2NtYj04MTA7ZS5icmlkZ2VpbnZlcnRlZGJlbG93Y21iPTgyNjtlLmJyb2tlbmJhcj0xNjY7ZS5ic3Ryb2tlPTM4NDtlLmJzdXBlcmlvcj02MzIxMDtlLmJ0b3BiYXI9Mzg3O2UuYnVoaXJhZ2FuYT0xMjQwNjtlLmJ1a2F0YWthbmE9MTI1MDI7ZS5idWxsZXQ9ODIyNjtlLmJ1bGxldGludmVyc2U9OTY4ODtlLmJ1bGxldG9wZXJhdG9yPTg3Mjk7ZS5idWxsc2V5ZT05Njc4O2UuYz05OTtlLmNhYXJtZW5pYW49MTM5MDtlLmNhYmVuZ2FsaT0yNDU4O2UuY2FjdXRlPTI2MztlLmNhZGV2YT0yMzMwO2UuY2FndWphcmF0aT0yNzE0O2UuY2FndXJtdWtoaT0yNTg2O2UuY2Fsc3F1YXJlPTEzMTkyO2UuY2FuZHJhYmluZHViZW5nYWxpPTI0MzM7ZS5jYW5kcmFiaW5kdWNtYj03ODQ7ZS5jYW5kcmFiaW5kdWRldmE9MjMwNTtlLmNhbmRyYWJpbmR1Z3VqYXJhdGk9MjY4OTtlLmNhcHNsb2NrPTg2ODI7ZS5jYXJlb2Y9ODQ1MztlLmNhcm9uPTcxMTtlLmNhcm9uYmVsb3djbWI9ODEyO2UuY2Fyb25jbWI9NzgwO2UuY2FycmlhZ2VyZXR1cm49ODYyOTtlLmNib3BvbW9mbz0xMjU2ODtlLmNjYXJvbj0yNjk7ZS5jY2VkaWxsYT0yMzE7ZS5jY2VkaWxsYWFjdXRlPTc2ODk7ZS5jY2lyY2xlPTk0MjY7ZS5jY2lyY3VtZmxleD0yNjU7ZS5jY3VybD01OTc7ZS5jZG90PTI2NztlLmNkb3RhY2NlbnQ9MjY3O2UuY2RzcXVhcmU9MTMyNTM7ZS5jZWRpbGxhPTE4NDtlLmNlZGlsbGFjbWI9ODA3O2UuY2VudD0xNjI7ZS5jZW50aWdyYWRlPTg0NTE7ZS5jZW50aW5mZXJpb3I9NjMxOTk7ZS5jZW50bW9ub3NwYWNlPTY1NTA0O2UuY2VudG9sZHN0eWxlPTYzMzk0O2UuY2VudHN1cGVyaW9yPTYzMjAwO2UuY2hhYXJtZW5pYW49MTQwMTtlLmNoYWJlbmdhbGk9MjQ1OTtlLmNoYWRldmE9MjMzMTtlLmNoYWd1amFyYXRpPTI3MTU7ZS5jaGFndXJtdWtoaT0yNTg3O2UuY2hib3BvbW9mbz0xMjU2NDtlLmNoZWFia2hhc2lhbmN5cmlsbGljPTEyMTM7ZS5jaGVja21hcms9MTAwMDM7ZS5jaGVjeXJpbGxpYz0xMDk1O2UuY2hlZGVzY2VuZGVyYWJraGFzaWFuY3lyaWxsaWM9MTIxNTtlLmNoZWRlc2NlbmRlcmN5cmlsbGljPTEyMDc7ZS5jaGVkaWVyZXNpc2N5cmlsbGljPTEyNjk7ZS5jaGVoYXJtZW5pYW49MTM5NTtlLmNoZWtoYWthc3NpYW5jeXJpbGxpYz0xMjI4O2UuY2hldmVydGljYWxzdHJva2VjeXJpbGxpYz0xMjA5O2UuY2hpPTk2NztlLmNoaWV1Y2hhY2lyY2xla29yZWFuPTEyOTE5O2UuY2hpZXVjaGFwYXJlbmtvcmVhbj0xMjgyMztlLmNoaWV1Y2hjaXJjbGVrb3JlYW49MTI5MDU7ZS5jaGlldWNoa29yZWFuPTEyNjE4O2UuY2hpZXVjaHBhcmVua29yZWFuPTEyODA5O2UuY2hvY2hhbmd0aGFpPTM1OTQ7ZS5jaG9jaGFudGhhaT0zNTkyO2UuY2hvY2hpbmd0aGFpPTM1OTM7ZS5jaG9jaG9ldGhhaT0zNTk2O2UuY2hvb2s9MzkyO2UuY2lldWNhY2lyY2xla29yZWFuPTEyOTE4O2UuY2lldWNhcGFyZW5rb3JlYW49MTI4MjI7ZS5jaWV1Y2NpcmNsZWtvcmVhbj0xMjkwNDtlLmNpZXVja29yZWFuPTEyNjE2O2UuY2lldWNwYXJlbmtvcmVhbj0xMjgwODtlLmNpZXVjdXBhcmVua29yZWFuPTEyODI4O2UuY2lyY2xlPTk2NzU7ZS5jaXJjbGVjb3B5cnQ9MTY5O2UuY2lyY2xlbXVsdGlwbHk9ODg1NTtlLmNpcmNsZW90PTg4NTc7ZS5jaXJjbGVwbHVzPTg4NTM7ZS5jaXJjbGVwb3N0YWxtYXJrPTEyMzQyO2UuY2lyY2xld2l0aGxlZnRoYWxmYmxhY2s9OTY4MDtlLmNpcmNsZXdpdGhyaWdodGhhbGZibGFjaz05NjgxO2UuY2lyY3VtZmxleD03MTA7ZS5jaXJjdW1mbGV4YmVsb3djbWI9ODEzO2UuY2lyY3VtZmxleGNtYj03NzA7ZS5jbGVhcj04OTk5O2UuY2xpY2thbHZlb2xhcj00NTA7ZS5jbGlja2RlbnRhbD00NDg7ZS5jbGlja2xhdGVyYWw9NDQ5O2UuY2xpY2tyZXRyb2ZsZXg9NDUxO2UuY2x1Yj05ODI3O2UuY2x1YnN1aXRibGFjaz05ODI3O2UuY2x1YnN1aXR3aGl0ZT05ODMxO2UuY21jdWJlZHNxdWFyZT0xMzIyMDtlLmNtb25vc3BhY2U9NjUzNDc7ZS5jbXNxdWFyZWRzcXVhcmU9MTMyMTY7ZS5jb2FybWVuaWFuPTE0MDk7ZS5jb2xvbj01ODtlLmNvbG9ubW9uZXRhcnk9ODM1MztlLmNvbG9ubW9ub3NwYWNlPTY1MzA2O2UuY29sb25zaWduPTgzNTM7ZS5jb2xvbnNtYWxsPTY1MTA5O2UuY29sb250cmlhbmd1bGFyaGFsZm1vZD03MjE7ZS5jb2xvbnRyaWFuZ3VsYXJtb2Q9NzIwO2UuY29tbWE9NDQ7ZS5jb21tYWFib3ZlY21iPTc4NztlLmNvbW1hYWJvdmVyaWdodGNtYj03ODk7ZS5jb21tYWFjY2VudD02MzE3MTtlLmNvbW1hYXJhYmljPTE1NDg7ZS5jb21tYWFybWVuaWFuPTEzNzM7ZS5jb21tYWluZmVyaW9yPTYzMjAxO2UuY29tbWFtb25vc3BhY2U9NjUyOTI7ZS5jb21tYXJldmVyc2VkYWJvdmVjbWI9Nzg4O2UuY29tbWFyZXZlcnNlZG1vZD03MDE7ZS5jb21tYXNtYWxsPTY1MTA0O2UuY29tbWFzdXBlcmlvcj02MzIwMjtlLmNvbW1hdHVybmVkYWJvdmVjbWI9Nzg2O2UuY29tbWF0dXJuZWRtb2Q9Njk5O2UuY29tcGFzcz05Nzg4O2UuY29uZ3J1ZW50PTg3NzM7ZS5jb250b3VyaW50ZWdyYWw9ODc1MDtlLmNvbnRyb2w9ODk2MztlLmNvbnRyb2xBQ0s9NjtlLmNvbnRyb2xCRUw9NztlLmNvbnRyb2xCUz04O2UuY29udHJvbENBTj0yNDtlLmNvbnRyb2xDUj0xMztlLmNvbnRyb2xEQzE9MTc7ZS5jb250cm9sREMyPTE4O2UuY29udHJvbERDMz0xOTtlLmNvbnRyb2xEQzQ9MjA7ZS5jb250cm9sREVMPTEyNztlLmNvbnRyb2xETEU9MTY7ZS5jb250cm9sRU09MjU7ZS5jb250cm9sRU5RPTU7ZS5jb250cm9sRU9UPTQ7ZS5jb250cm9sRVNDPTI3O2UuY29udHJvbEVUQj0yMztlLmNvbnRyb2xFVFg9MztlLmNvbnRyb2xGRj0xMjtlLmNvbnRyb2xGUz0yODtlLmNvbnRyb2xHUz0yOTtlLmNvbnRyb2xIVD05O2UuY29udHJvbExGPTEwO2UuY29udHJvbE5BSz0yMTtlLmNvbnRyb2xOVUxMPTA7ZS5jb250cm9sUlM9MzA7ZS5jb250cm9sU0k9MTU7ZS5jb250cm9sU089MTQ7ZS5jb250cm9sU09UPTI7ZS5jb250cm9sU1RYPTE7ZS5jb250cm9sU1VCPTI2O2UuY29udHJvbFNZTj0yMjtlLmNvbnRyb2xVUz0zMTtlLmNvbnRyb2xWVD0xMTtlLmNvcHlyaWdodD0xNjk7ZS5jb3B5cmlnaHRzYW5zPTYzNzIxO2UuY29weXJpZ2h0c2VyaWY9NjMxOTM7ZS5jb3JuZXJicmFja2V0bGVmdD0xMjMwMDtlLmNvcm5lcmJyYWNrZXRsZWZ0aGFsZndpZHRoPTY1Mzc4O2UuY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4OTtlLmNvcm5lcmJyYWNrZXRyaWdodD0xMjMwMTtlLmNvcm5lcmJyYWNrZXRyaWdodGhhbGZ3aWR0aD02NTM3OTtlLmNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDkwO2UuY29ycG9yYXRpb25zcXVhcmU9MTMxODM7ZS5jb3NxdWFyZT0xMzI1NTtlLmNvdmVya2dzcXVhcmU9MTMyNTQ7ZS5jcGFyZW49OTM3NDtlLmNydXplaXJvPTgzNTQ7ZS5jc3RyZXRjaGVkPTY2MztlLmN1cmx5YW5kPTg5MTE7ZS5jdXJseW9yPTg5MTA7ZS5jdXJyZW5jeT0xNjQ7ZS5jeXJCcmV2ZT02MzE4NTtlLmN5ckZsZXg9NjMxODY7ZS5jeXJicmV2ZT02MzE4ODtlLmN5cmZsZXg9NjMxODk7ZS5kPTEwMDtlLmRhYXJtZW5pYW49MTM4MDtlLmRhYmVuZ2FsaT0yNDcwO2UuZGFkYXJhYmljPTE1OTA7ZS5kYWRldmE9MjM0MjtlLmRhZGZpbmFsYXJhYmljPTY1MjE0O2UuZGFkaW5pdGlhbGFyYWJpYz02NTIxNTtlLmRhZG1lZGlhbGFyYWJpYz02NTIxNjtlLmRhZ2VzaD0xNDY4O2UuZGFnZXNoaGVicmV3PTE0Njg7ZS5kYWdnZXI9ODIyNDtlLmRhZ2dlcmRibD04MjI1O2UuZGFndWphcmF0aT0yNzI2O2UuZGFndXJtdWtoaT0yNTk4O2UuZGFoaXJhZ2FuYT0xMjM4NDtlLmRha2F0YWthbmE9MTI0ODA7ZS5kYWxhcmFiaWM9MTU4MztlLmRhbGV0PTE0OTE7ZS5kYWxldGRhZ2VzaD02NDMwNztlLmRhbGV0ZGFnZXNoaGVicmV3PTY0MzA3O2UuZGFsZXRoZWJyZXc9MTQ5MTtlLmRhbGZpbmFsYXJhYmljPTY1MTk0O2UuZGFtbWFhcmFiaWM9MTYxNTtlLmRhbW1hbG93YXJhYmljPTE2MTU7ZS5kYW1tYXRhbmFsdG9uZWFyYWJpYz0xNjEyO2UuZGFtbWF0YW5hcmFiaWM9MTYxMjtlLmRhbmRhPTI0MDQ7ZS5kYXJnYWhlYnJldz0xNDQ3O2UuZGFyZ2FsZWZ0aGVicmV3PTE0NDc7ZS5kYXNpYXBuZXVtYXRhY3lyaWxsaWNjbWI9MTE1NztlLmRibEdyYXZlPTYzMTg3O2UuZGJsYW5nbGVicmFja2V0bGVmdD0xMjI5ODtlLmRibGFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NTtlLmRibGFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk5O2UuZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4NjtlLmRibGFyY2hpbnZlcnRlZGJlbG93Y21iPTgxMTtlLmRibGFycm93bGVmdD04NjYwO2UuZGJsYXJyb3dyaWdodD04NjU4O2UuZGJsZGFuZGE9MjQwNTtlLmRibGdyYXZlPTYzMTkwO2UuZGJsZ3JhdmVjbWI9NzgzO2UuZGJsaW50ZWdyYWw9ODc0ODtlLmRibGxvd2xpbmU9ODIxNTtlLmRibGxvd2xpbmVjbWI9ODE5O2UuZGJsb3ZlcmxpbmVjbWI9ODMxO2UuZGJscHJpbWVtb2Q9Njk4O2UuZGJsdmVydGljYWxiYXI9ODIxNDtlLmRibHZlcnRpY2FsbGluZWFib3ZlY21iPTc4MjtlLmRib3BvbW9mbz0xMjU1MztlLmRic3F1YXJlPTEzMjU2O2UuZGNhcm9uPTI3MTtlLmRjZWRpbGxhPTc2OTc7ZS5kY2lyY2xlPTk0Mjc7ZS5kY2lyY3VtZmxleGJlbG93PTc2OTk7ZS5kY3JvYXQ9MjczO2UuZGRhYmVuZ2FsaT0yNDY1O2UuZGRhZGV2YT0yMzM3O2UuZGRhZ3VqYXJhdGk9MjcyMTtlLmRkYWd1cm11a2hpPTI1OTM7ZS5kZGFsYXJhYmljPTE2NzI7ZS5kZGFsZmluYWxhcmFiaWM9NjQzOTM7ZS5kZGRoYWRldmE9MjM5NjtlLmRkaGFiZW5nYWxpPTI0NjY7ZS5kZGhhZGV2YT0yMzM4O2UuZGRoYWd1amFyYXRpPTI3MjI7ZS5kZGhhZ3VybXVraGk9MjU5NDtlLmRkb3RhY2NlbnQ9NzY5MTtlLmRkb3RiZWxvdz03NjkzO2UuZGVjaW1hbHNlcGFyYXRvcmFyYWJpYz0xNjQzO2UuZGVjaW1hbHNlcGFyYXRvcnBlcnNpYW49MTY0MztlLmRlY3lyaWxsaWM9MTA3NjtlLmRlZ3JlZT0xNzY7ZS5kZWhpaGVicmV3PTE0NTM7ZS5kZWhpcmFnYW5hPTEyMzkxO2UuZGVpY29wdGljPTEwMDc7ZS5kZWthdGFrYW5hPTEyNDg3O2UuZGVsZXRlbGVmdD05MDAzO2UuZGVsZXRlcmlnaHQ9ODk5ODtlLmRlbHRhPTk0ODtlLmRlbHRhdHVybmVkPTM5NztlLmRlbm9taW5hdG9ybWludXNvbmVudW1lcmF0b3JiZW5nYWxpPTI1NTI7ZS5kZXpoPTY3NjtlLmRoYWJlbmdhbGk9MjQ3MTtlLmRoYWRldmE9MjM0MztlLmRoYWd1amFyYXRpPTI3Mjc7ZS5kaGFndXJtdWtoaT0yNTk5O2UuZGhvb2s9NTk5O2UuZGlhbHl0aWthdG9ub3M9OTAxO2UuZGlhbHl0aWthdG9ub3NjbWI9ODM2O2UuZGlhbW9uZD05ODMwO2UuZGlhbW9uZHN1aXR3aGl0ZT05ODI2O2UuZGllcmVzaXM9MTY4O2UuZGllcmVzaXNhY3V0ZT02MzE5MTtlLmRpZXJlc2lzYmVsb3djbWI9ODA0O2UuZGllcmVzaXNjbWI9Nzc2O2UuZGllcmVzaXNncmF2ZT02MzE5MjtlLmRpZXJlc2lzdG9ub3M9OTAxO2UuZGloaXJhZ2FuYT0xMjM4NjtlLmRpa2F0YWthbmE9MTI0ODI7ZS5kaXR0b21hcms9MTIyOTE7ZS5kaXZpZGU9MjQ3O2UuZGl2aWRlcz04NzM5O2UuZGl2aXNpb25zbGFzaD04NzI1O2UuZGplY3lyaWxsaWM9MTEwNjtlLmRrc2hhZGU9OTYxOTtlLmRsaW5lYmVsb3c9NzY5NTtlLmRsc3F1YXJlPTEzMjA3O2UuZG1hY3Jvbj0yNzM7ZS5kbW9ub3NwYWNlPTY1MzQ4O2UuZG5ibG9jaz05NjA0O2UuZG9jaGFkYXRoYWk9MzU5ODtlLmRvZGVrdGhhaT0zNjA0O2UuZG9oaXJhZ2FuYT0xMjM5MztlLmRva2F0YWthbmE9MTI0ODk7ZS5kb2xsYXI9MzY7ZS5kb2xsYXJpbmZlcmlvcj02MzIwMztlLmRvbGxhcm1vbm9zcGFjZT02NTI4NDtlLmRvbGxhcm9sZHN0eWxlPTYzMjY4O2UuZG9sbGFyc21hbGw9NjUxMjk7ZS5kb2xsYXJzdXBlcmlvcj02MzIwNDtlLmRvbmc9ODM2MztlLmRvcnVzcXVhcmU9MTMwOTQ7ZS5kb3RhY2NlbnQ9NzI5O2UuZG90YWNjZW50Y21iPTc3NTtlLmRvdGJlbG93Y21iPTgwMztlLmRvdGJlbG93Y29tYj04MDM7ZS5kb3RrYXRha2FuYT0xMjUzOTtlLmRvdGxlc3NpPTMwNTtlLmRvdGxlc3NqPTYzMTY2O2UuZG90bGVzc2pzdHJva2Vob29rPTY0NDtlLmRvdG1hdGg9ODkwMTtlLmRvdHRlZGNpcmNsZT05Njc2O2UuZG91YmxleW9kcGF0YWg9NjQyODc7ZS5kb3VibGV5b2RwYXRhaGhlYnJldz02NDI4NztlLmRvd250YWNrYmVsb3djbWI9Nzk4O2UuZG93bnRhY2ttb2Q9NzI1O2UuZHBhcmVuPTkzNzU7ZS5kc3VwZXJpb3I9NjMyMTE7ZS5kdGFpbD01OTg7ZS5kdG9wYmFyPTM5NjtlLmR1aGlyYWdhbmE9MTIzODk7ZS5kdWthdGFrYW5hPTEyNDg1O2UuZHo9NDk5O2UuZHphbHRvbmU9Njc1O2UuZHpjYXJvbj00NTQ7ZS5kemN1cmw9Njc3O2UuZHplYWJraGFzaWFuY3lyaWxsaWM9MTI0OTtlLmR6ZWN5cmlsbGljPTExMDk7ZS5kemhlY3lyaWxsaWM9MTExOTtlLmU9MTAxO2UuZWFjdXRlPTIzMztlLmVhcnRoPTk3OTM7ZS5lYmVuZ2FsaT0yNDQ3O2UuZWJvcG9tb2ZvPTEyNTcyO2UuZWJyZXZlPTI3NztlLmVjYW5kcmFkZXZhPTIzMTc7ZS5lY2FuZHJhZ3VqYXJhdGk9MjcwMTtlLmVjYW5kcmF2b3dlbHNpZ25kZXZhPTIzNzM7ZS5lY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGk9Mjc1NztlLmVjYXJvbj0yODM7ZS5lY2VkaWxsYWJyZXZlPTc3MDk7ZS5lY2hhcm1lbmlhbj0xMzgxO2UuZWNoeWl3bmFybWVuaWFuPTE0MTU7ZS5lY2lyY2xlPTk0Mjg7ZS5lY2lyY3VtZmxleD0yMzQ7ZS5lY2lyY3VtZmxleGFjdXRlPTc4NzE7ZS5lY2lyY3VtZmxleGJlbG93PTc3MDU7ZS5lY2lyY3VtZmxleGRvdGJlbG93PTc4Nzk7ZS5lY2lyY3VtZmxleGdyYXZlPTc4NzM7ZS5lY2lyY3VtZmxleGhvb2thYm92ZT03ODc1O2UuZWNpcmN1bWZsZXh0aWxkZT03ODc3O2UuZWN5cmlsbGljPTExMDg7ZS5lZGJsZ3JhdmU9NTE3O2UuZWRldmE9MjMxOTtlLmVkaWVyZXNpcz0yMzU7ZS5lZG90PTI3OTtlLmVkb3RhY2NlbnQ9Mjc5O2UuZWRvdGJlbG93PTc4NjU7ZS5lZWd1cm11a2hpPTI1NzU7ZS5lZW1hdHJhZ3VybXVraGk9MjYzMTtlLmVmY3lyaWxsaWM9MTA5MjtlLmVncmF2ZT0yMzI7ZS5lZ3VqYXJhdGk9MjcwMztlLmVoYXJtZW5pYW49MTM4MztlLmVoYm9wb21vZm89MTI1NzM7ZS5laGlyYWdhbmE9MTIzNjA7ZS5laG9va2Fib3ZlPTc4Njc7ZS5laWJvcG9tb2ZvPTEyNTc1O2UuZWlnaHQ9NTY7ZS5laWdodGFyYWJpYz0xNjQwO2UuZWlnaHRiZW5nYWxpPTI1NDI7ZS5laWdodGNpcmNsZT05MzE5O2UuZWlnaHRjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI5O2UuZWlnaHRkZXZhPTI0MTQ7ZS5laWdodGVlbmNpcmNsZT05MzI5O2UuZWlnaHRlZW5wYXJlbj05MzQ5O2UuZWlnaHRlZW5wZXJpb2Q9OTM2OTtlLmVpZ2h0Z3VqYXJhdGk9Mjc5ODtlLmVpZ2h0Z3VybXVraGk9MjY3MDtlLmVpZ2h0aGFja2FyYWJpYz0xNjQwO2UuZWlnaHRoYW5nemhvdT0xMjMyODtlLmVpZ2h0aG5vdGViZWFtZWQ9OTgzNTtlLmVpZ2h0aWRlb2dyYXBoaWNwYXJlbj0xMjgzOTtlLmVpZ2h0aW5mZXJpb3I9ODMyODtlLmVpZ2h0bW9ub3NwYWNlPTY1MzA0O2UuZWlnaHRvbGRzdHlsZT02MzI4ODtlLmVpZ2h0cGFyZW49OTMzOTtlLmVpZ2h0cGVyaW9kPTkzNTk7ZS5laWdodHBlcnNpYW49MTc4NDtlLmVpZ2h0cm9tYW49ODU2NztlLmVpZ2h0c3VwZXJpb3I9ODMxMjtlLmVpZ2h0dGhhaT0zNjcyO2UuZWludmVydGVkYnJldmU9NTE5O2UuZWlvdGlmaWVkY3lyaWxsaWM9MTEyNTtlLmVrYXRha2FuYT0xMjQ1NjtlLmVrYXRha2FuYWhhbGZ3aWR0aD02NTM5NjtlLmVrb25rYXJndXJtdWtoaT0yNjc2O2UuZWtvcmVhbj0xMjYyODtlLmVsY3lyaWxsaWM9MTA4MztlLmVsZW1lbnQ9ODcxMjtlLmVsZXZlbmNpcmNsZT05MzIyO2UuZWxldmVucGFyZW49OTM0MjtlLmVsZXZlbnBlcmlvZD05MzYyO2UuZWxldmVucm9tYW49ODU3MDtlLmVsbGlwc2lzPTgyMzA7ZS5lbGxpcHNpc3ZlcnRpY2FsPTg5NDI7ZS5lbWFjcm9uPTI3NTtlLmVtYWNyb25hY3V0ZT03NzAzO2UuZW1hY3JvbmdyYXZlPTc3MDE7ZS5lbWN5cmlsbGljPTEwODQ7ZS5lbWRhc2g9ODIxMjtlLmVtZGFzaHZlcnRpY2FsPTY1MDczO2UuZW1vbm9zcGFjZT02NTM0OTtlLmVtcGhhc2lzbWFya2FybWVuaWFuPTEzNzE7ZS5lbXB0eXNldD04NzA5O2UuZW5ib3BvbW9mbz0xMjU3OTtlLmVuY3lyaWxsaWM9MTA4NTtlLmVuZGFzaD04MjExO2UuZW5kYXNodmVydGljYWw9NjUwNzQ7ZS5lbmRlc2NlbmRlcmN5cmlsbGljPTExODc7ZS5lbmc9MzMxO2UuZW5nYm9wb21vZm89MTI1ODE7ZS5lbmdoZWN5cmlsbGljPTExODk7ZS5lbmhvb2tjeXJpbGxpYz0xMjI0O2UuZW5zcGFjZT04MTk0O2UuZW9nb25laz0yODE7ZS5lb2tvcmVhbj0xMjYyNztlLmVvcGVuPTYwMztlLmVvcGVuY2xvc2VkPTY2NjtlLmVvcGVucmV2ZXJzZWQ9NjA0O2UuZW9wZW5yZXZlcnNlZGNsb3NlZD02MDY7ZS5lb3BlbnJldmVyc2VkaG9vaz02MDU7ZS5lcGFyZW49OTM3NjtlLmVwc2lsb249OTQ5O2UuZXBzaWxvbnRvbm9zPTk0MTtlLmVxdWFsPTYxO2UuZXF1YWxtb25vc3BhY2U9NjUzMDk7ZS5lcXVhbHNtYWxsPTY1MTI2O2UuZXF1YWxzdXBlcmlvcj04MzE2O2UuZXF1aXZhbGVuY2U9ODgwMTtlLmVyYm9wb21vZm89MTI1ODI7ZS5lcmN5cmlsbGljPTEwODg7ZS5lcmV2ZXJzZWQ9NjAwO2UuZXJldmVyc2VkY3lyaWxsaWM9MTEwMTtlLmVzY3lyaWxsaWM9MTA4OTtlLmVzZGVzY2VuZGVyY3lyaWxsaWM9MTE5NTtlLmVzaD02NDM7ZS5lc2hjdXJsPTY0NjtlLmVzaG9ydGRldmE9MjMxODtlLmVzaG9ydHZvd2Vsc2lnbmRldmE9MjM3NDtlLmVzaHJldmVyc2VkbG9vcD00MjY7ZS5lc2hzcXVhdHJldmVyc2VkPTY0NTtlLmVzbWFsbGhpcmFnYW5hPTEyMzU5O2UuZXNtYWxsa2F0YWthbmE9MTI0NTU7ZS5lc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NjtlLmVzdGltYXRlZD04NDk0O2UuZXN1cGVyaW9yPTYzMjEyO2UuZXRhPTk1MTtlLmV0YXJtZW5pYW49MTM4NDtlLmV0YXRvbm9zPTk0MjtlLmV0aD0yNDA7ZS5ldGlsZGU9Nzg2OTtlLmV0aWxkZWJlbG93PTc3MDc7ZS5ldG5haHRhZm91a2hoZWJyZXc9MTQyNTtlLmV0bmFodGFmb3VraGxlZnRoZWJyZXc9MTQyNTtlLmV0bmFodGFoZWJyZXc9MTQyNTtlLmV0bmFodGFsZWZ0aGVicmV3PTE0MjU7ZS5ldHVybmVkPTQ3NztlLmV1a29yZWFuPTEyNjQxO2UuZXVybz04MzY0O2UuZXZvd2Vsc2lnbmJlbmdhbGk9MjUwMztlLmV2b3dlbHNpZ25kZXZhPTIzNzU7ZS5ldm93ZWxzaWduZ3VqYXJhdGk9Mjc1OTtlLmV4Y2xhbT0zMztlLmV4Y2xhbWFybWVuaWFuPTEzNzI7ZS5leGNsYW1kYmw9ODI1MjtlLmV4Y2xhbWRvd249MTYxO2UuZXhjbGFtZG93bnNtYWxsPTYzMzkzO2UuZXhjbGFtbW9ub3NwYWNlPTY1MjgxO2UuZXhjbGFtc21hbGw9NjMyNjU7ZS5leGlzdGVudGlhbD04NzA3O2UuZXpoPTY1ODtlLmV6aGNhcm9uPTQ5NTtlLmV6aGN1cmw9NjU5O2UuZXpocmV2ZXJzZWQ9NDQxO2UuZXpodGFpbD00NDI7ZS5mPTEwMjtlLmZhZGV2YT0yMzk4O2UuZmFndXJtdWtoaT0yNjU0O2UuZmFocmVuaGVpdD04NDU3O2UuZmF0aGFhcmFiaWM9MTYxNDtlLmZhdGhhbG93YXJhYmljPTE2MTQ7ZS5mYXRoYXRhbmFyYWJpYz0xNjExO2UuZmJvcG9tb2ZvPTEyNTUyO2UuZmNpcmNsZT05NDI5O2UuZmRvdGFjY2VudD03NzExO2UuZmVoYXJhYmljPTE2MDE7ZS5mZWhhcm1lbmlhbj0xNDE0O2UuZmVoZmluYWxhcmFiaWM9NjUyMzQ7ZS5mZWhpbml0aWFsYXJhYmljPTY1MjM1O2UuZmVobWVkaWFsYXJhYmljPTY1MjM2O2UuZmVpY29wdGljPTk5NztlLmZlbWFsZT05NzkyO2UuZmY9NjQyNTY7ZS5mX2Y9NjQyNTY7ZS5mZmk9NjQyNTk7ZS5mX2ZfaT02NDI1OTtlLmZmbD02NDI2MDtlLmZfZl9sPTY0MjYwO2UuZmk9NjQyNTc7ZS5mX2k9NjQyNTc7ZS5maWZ0ZWVuY2lyY2xlPTkzMjY7ZS5maWZ0ZWVucGFyZW49OTM0NjtlLmZpZnRlZW5wZXJpb2Q9OTM2NjtlLmZpZ3VyZWRhc2g9ODIxMDtlLmZpbGxlZGJveD05NjMyO2UuZmlsbGVkcmVjdD05NjQ0O2UuZmluYWxrYWY9MTQ5ODtlLmZpbmFsa2FmZGFnZXNoPTY0MzE0O2UuZmluYWxrYWZkYWdlc2hoZWJyZXc9NjQzMTQ7ZS5maW5hbGthZmhlYnJldz0xNDk4O2UuZmluYWxtZW09MTUwMTtlLmZpbmFsbWVtaGVicmV3PTE1MDE7ZS5maW5hbG51bj0xNTAzO2UuZmluYWxudW5oZWJyZXc9MTUwMztlLmZpbmFscGU9MTUwNztlLmZpbmFscGVoZWJyZXc9MTUwNztlLmZpbmFsdHNhZGk9MTUwOTtlLmZpbmFsdHNhZGloZWJyZXc9MTUwOTtlLmZpcnN0dG9uZWNoaW5lc2U9NzEzO2UuZmlzaGV5ZT05NjczO2UuZml0YWN5cmlsbGljPTExMzk7ZS5maXZlPTUzO2UuZml2ZWFyYWJpYz0xNjM3O2UuZml2ZWJlbmdhbGk9MjUzOTtlLmZpdmVjaXJjbGU9OTMxNjtlLmZpdmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI2O2UuZml2ZWRldmE9MjQxMTtlLmZpdmVlaWdodGhzPTg1NDE7ZS5maXZlZ3VqYXJhdGk9Mjc5NTtlLmZpdmVndXJtdWtoaT0yNjY3O2UuZml2ZWhhY2thcmFiaWM9MTYzNztlLmZpdmVoYW5nemhvdT0xMjMyNTtlLmZpdmVpZGVvZ3JhcGhpY3BhcmVuPTEyODM2O2UuZml2ZWluZmVyaW9yPTgzMjU7ZS5maXZlbW9ub3NwYWNlPTY1MzAxO2UuZml2ZW9sZHN0eWxlPTYzMjg1O2UuZml2ZXBhcmVuPTkzMzY7ZS5maXZlcGVyaW9kPTkzNTY7ZS5maXZlcGVyc2lhbj0xNzgxO2UuZml2ZXJvbWFuPTg1NjQ7ZS5maXZlc3VwZXJpb3I9ODMwOTtlLmZpdmV0aGFpPTM2Njk7ZS5mbD02NDI1ODtlLmZfbD02NDI1ODtlLmZsb3Jpbj00MDI7ZS5mbW9ub3NwYWNlPTY1MzUwO2UuZm1zcXVhcmU9MTMyMDk7ZS5mb2ZhbnRoYWk9MzYxNTtlLmZvZmF0aGFpPTM2MTM7ZS5mb25nbWFudGhhaT0zNjYzO2UuZm9yYWxsPTg3MDQ7ZS5mb3VyPTUyO2UuZm91cmFyYWJpYz0xNjM2O2UuZm91cmJlbmdhbGk9MjUzODtlLmZvdXJjaXJjbGU9OTMxNTtlLmZvdXJjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI1O2UuZm91cmRldmE9MjQxMDtlLmZvdXJndWphcmF0aT0yNzk0O2UuZm91cmd1cm11a2hpPTI2NjY7ZS5mb3VyaGFja2FyYWJpYz0xNjM2O2UuZm91cmhhbmd6aG91PTEyMzI0O2UuZm91cmlkZW9ncmFwaGljcGFyZW49MTI4MzU7ZS5mb3VyaW5mZXJpb3I9ODMyNDtlLmZvdXJtb25vc3BhY2U9NjUzMDA7ZS5mb3VybnVtZXJhdG9yYmVuZ2FsaT0yNTUxO2UuZm91cm9sZHN0eWxlPTYzMjg0O2UuZm91cnBhcmVuPTkzMzU7ZS5mb3VycGVyaW9kPTkzNTU7ZS5mb3VycGVyc2lhbj0xNzgwO2UuZm91cnJvbWFuPTg1NjM7ZS5mb3Vyc3VwZXJpb3I9ODMwODtlLmZvdXJ0ZWVuY2lyY2xlPTkzMjU7ZS5mb3VydGVlbnBhcmVuPTkzNDU7ZS5mb3VydGVlbnBlcmlvZD05MzY1O2UuZm91cnRoYWk9MzY2ODtlLmZvdXJ0aHRvbmVjaGluZXNlPTcxNTtlLmZwYXJlbj05Mzc3O2UuZnJhY3Rpb249ODI2MDtlLmZyYW5jPTgzNTU7ZS5nPTEwMztlLmdhYmVuZ2FsaT0yNDU1O2UuZ2FjdXRlPTUwMTtlLmdhZGV2YT0yMzI3O2UuZ2FmYXJhYmljPTE3MTE7ZS5nYWZmaW5hbGFyYWJpYz02NDQwMztlLmdhZmluaXRpYWxhcmFiaWM9NjQ0MDQ7ZS5nYWZtZWRpYWxhcmFiaWM9NjQ0MDU7ZS5nYWd1amFyYXRpPTI3MTE7ZS5nYWd1cm11a2hpPTI1ODM7ZS5nYWhpcmFnYW5hPTEyMzY0O2UuZ2FrYXRha2FuYT0xMjQ2MDtlLmdhbW1hPTk0NztlLmdhbW1hbGF0aW5zbWFsbD02MTE7ZS5nYW1tYXN1cGVyaW9yPTczNjtlLmdhbmdpYWNvcHRpYz0xMDAzO2UuZ2JvcG9tb2ZvPTEyNTU3O2UuZ2JyZXZlPTI4NztlLmdjYXJvbj00ODc7ZS5nY2VkaWxsYT0yOTE7ZS5nY2lyY2xlPTk0MzA7ZS5nY2lyY3VtZmxleD0yODU7ZS5nY29tbWFhY2NlbnQ9MjkxO2UuZ2RvdD0yODk7ZS5nZG90YWNjZW50PTI4OTtlLmdlY3lyaWxsaWM9MTA3NTtlLmdlaGlyYWdhbmE9MTIzNzA7ZS5nZWthdGFrYW5hPTEyNDY2O2UuZ2VvbWV0cmljYWxseWVxdWFsPTg3ODU7ZS5nZXJlc2hhY2NlbnRoZWJyZXc9MTQzNjtlLmdlcmVzaGhlYnJldz0xNTIzO2UuZ2VyZXNobXVxZGFtaGVicmV3PTE0Mzc7ZS5nZXJtYW5kYmxzPTIyMztlLmdlcnNoYXlpbWFjY2VudGhlYnJldz0xNDM4O2UuZ2Vyc2hheWltaGVicmV3PTE1MjQ7ZS5nZXRhbWFyaz0xMjMwNztlLmdoYWJlbmdhbGk9MjQ1NjtlLmdoYWRhcm1lbmlhbj0xMzk0O2UuZ2hhZGV2YT0yMzI4O2UuZ2hhZ3VqYXJhdGk9MjcxMjtlLmdoYWd1cm11a2hpPTI1ODQ7ZS5naGFpbmFyYWJpYz0xNTk0O2UuZ2hhaW5maW5hbGFyYWJpYz02NTIzMDtlLmdoYWluaW5pdGlhbGFyYWJpYz02NTIzMTtlLmdoYWlubWVkaWFsYXJhYmljPTY1MjMyO2UuZ2hlbWlkZGxlaG9va2N5cmlsbGljPTExNzM7ZS5naGVzdHJva2VjeXJpbGxpYz0xMTcxO2UuZ2hldXB0dXJuY3lyaWxsaWM9MTE2OTtlLmdoaGFkZXZhPTIzOTQ7ZS5naGhhZ3VybXVraGk9MjY1MDtlLmdob29rPTYwODtlLmdoenNxdWFyZT0xMzIwMztlLmdpaGlyYWdhbmE9MTIzNjY7ZS5naWthdGFrYW5hPTEyNDYyO2UuZ2ltYXJtZW5pYW49MTM3OTtlLmdpbWVsPTE0OTA7ZS5naW1lbGRhZ2VzaD02NDMwNjtlLmdpbWVsZGFnZXNoaGVicmV3PTY0MzA2O2UuZ2ltZWxoZWJyZXc9MTQ5MDtlLmdqZWN5cmlsbGljPTExMDc7ZS5nbG90dGFsaW52ZXJ0ZWRzdHJva2U9NDQ2O2UuZ2xvdHRhbHN0b3A9NjYwO2UuZ2xvdHRhbHN0b3BpbnZlcnRlZD02NjI7ZS5nbG90dGFsc3RvcG1vZD03MDQ7ZS5nbG90dGFsc3RvcHJldmVyc2VkPTY2MTtlLmdsb3R0YWxzdG9wcmV2ZXJzZWRtb2Q9NzA1O2UuZ2xvdHRhbHN0b3ByZXZlcnNlZHN1cGVyaW9yPTc0MDtlLmdsb3R0YWxzdG9wc3Ryb2tlPTY3MztlLmdsb3R0YWxzdG9wc3Ryb2tlcmV2ZXJzZWQ9Njc0O2UuZ21hY3Jvbj03NzEzO2UuZ21vbm9zcGFjZT02NTM1MTtlLmdvaGlyYWdhbmE9MTIzNzI7ZS5nb2thdGFrYW5hPTEyNDY4O2UuZ3BhcmVuPTkzNzg7ZS5ncGFzcXVhcmU9MTMyMjg7ZS5ncmFkaWVudD04NzExO2UuZ3JhdmU9OTY7ZS5ncmF2ZWJlbG93Y21iPTc5MDtlLmdyYXZlY21iPTc2ODtlLmdyYXZlY29tYj03Njg7ZS5ncmF2ZWRldmE9MjM4NztlLmdyYXZlbG93bW9kPTcxODtlLmdyYXZlbW9ub3NwYWNlPTY1MzQ0O2UuZ3JhdmV0b25lY21iPTgzMjtlLmdyZWF0ZXI9NjI7ZS5ncmVhdGVyZXF1YWw9ODgwNTtlLmdyZWF0ZXJlcXVhbG9ybGVzcz04OTIzO2UuZ3JlYXRlcm1vbm9zcGFjZT02NTMxMDtlLmdyZWF0ZXJvcmVxdWl2YWxlbnQ9ODgxOTtlLmdyZWF0ZXJvcmxlc3M9ODgyMztlLmdyZWF0ZXJvdmVyZXF1YWw9ODgwNztlLmdyZWF0ZXJzbWFsbD02NTEyNTtlLmdzY3JpcHQ9NjA5O2UuZ3N0cm9rZT00ODU7ZS5ndWhpcmFnYW5hPTEyMzY4O2UuZ3VpbGxlbW90bGVmdD0xNzE7ZS5ndWlsbGVtb3RyaWdodD0xODc7ZS5ndWlsc2luZ2xsZWZ0PTgyNDk7ZS5ndWlsc2luZ2xyaWdodD04MjUwO2UuZ3VrYXRha2FuYT0xMjQ2NDtlLmd1cmFtdXNxdWFyZT0xMzA4MDtlLmd5c3F1YXJlPTEzMjU3O2UuaD0xMDQ7ZS5oYWFia2hhc2lhbmN5cmlsbGljPTExOTM7ZS5oYWFsdG9uZWFyYWJpYz0xNzI5O2UuaGFiZW5nYWxpPTI0ODk7ZS5oYWRlc2NlbmRlcmN5cmlsbGljPTEyMDM7ZS5oYWRldmE9MjM2MTtlLmhhZ3VqYXJhdGk9Mjc0NTtlLmhhZ3VybXVraGk9MjYxNztlLmhhaGFyYWJpYz0xNTgxO2UuaGFoZmluYWxhcmFiaWM9NjUxODY7ZS5oYWhpbml0aWFsYXJhYmljPTY1MTg3O2UuaGFoaXJhZ2FuYT0xMjM5OTtlLmhhaG1lZGlhbGFyYWJpYz02NTE4ODtlLmhhaXR1c3F1YXJlPTEzMDk4O2UuaGFrYXRha2FuYT0xMjQ5NTtlLmhha2F0YWthbmFoYWxmd2lkdGg9NjU0MTg7ZS5oYWxhbnRndXJtdWtoaT0yNjM3O2UuaGFtemFhcmFiaWM9MTU2OTtlLmhhbXphbG93YXJhYmljPTE1Njk7ZS5oYW5ndWxmaWxsZXI9MTI2NDQ7ZS5oYXJkc2lnbmN5cmlsbGljPTEwOTg7ZS5oYXJwb29ubGVmdGJhcmJ1cD04NjM2O2UuaGFycG9vbnJpZ2h0YmFyYnVwPTg2NDA7ZS5oYXNxdWFyZT0xMzI1ODtlLmhhdGFmcGF0YWg9MTQ1ODtlLmhhdGFmcGF0YWgxNj0xNDU4O2UuaGF0YWZwYXRhaDIzPTE0NTg7ZS5oYXRhZnBhdGFoMmY9MTQ1ODtlLmhhdGFmcGF0YWhoZWJyZXc9MTQ1ODtlLmhhdGFmcGF0YWhuYXJyb3doZWJyZXc9MTQ1ODtlLmhhdGFmcGF0YWhxdWFydGVyaGVicmV3PTE0NTg7ZS5oYXRhZnBhdGFod2lkZWhlYnJldz0xNDU4O2UuaGF0YWZxYW1hdHM9MTQ1OTtlLmhhdGFmcWFtYXRzMWI9MTQ1OTtlLmhhdGFmcWFtYXRzMjg9MTQ1OTtlLmhhdGFmcWFtYXRzMzQ9MTQ1OTtlLmhhdGFmcWFtYXRzaGVicmV3PTE0NTk7ZS5oYXRhZnFhbWF0c25hcnJvd2hlYnJldz0xNDU5O2UuaGF0YWZxYW1hdHNxdWFydGVyaGVicmV3PTE0NTk7ZS5oYXRhZnFhbWF0c3dpZGVoZWJyZXc9MTQ1OTtlLmhhdGFmc2Vnb2w9MTQ1NztlLmhhdGFmc2Vnb2wxNz0xNDU3O2UuaGF0YWZzZWdvbDI0PTE0NTc7ZS5oYXRhZnNlZ29sMzA9MTQ1NztlLmhhdGFmc2Vnb2xoZWJyZXc9MTQ1NztlLmhhdGFmc2Vnb2xuYXJyb3doZWJyZXc9MTQ1NztlLmhhdGFmc2Vnb2xxdWFydGVyaGVicmV3PTE0NTc7ZS5oYXRhZnNlZ29sd2lkZWhlYnJldz0xNDU3O2UuaGJhcj0yOTU7ZS5oYm9wb21vZm89MTI1NTk7ZS5oYnJldmViZWxvdz03NzIzO2UuaGNlZGlsbGE9NzcyMTtlLmhjaXJjbGU9OTQzMTtlLmhjaXJjdW1mbGV4PTI5MztlLmhkaWVyZXNpcz03NzE5O2UuaGRvdGFjY2VudD03NzE1O2UuaGRvdGJlbG93PTc3MTc7ZS5oZT0xNDkyO2UuaGVhcnQ9OTgyOTtlLmhlYXJ0c3VpdGJsYWNrPTk4Mjk7ZS5oZWFydHN1aXR3aGl0ZT05ODI1O2UuaGVkYWdlc2g9NjQzMDg7ZS5oZWRhZ2VzaGhlYnJldz02NDMwODtlLmhlaGFsdG9uZWFyYWJpYz0xNzI5O2UuaGVoYXJhYmljPTE2MDc7ZS5oZWhlYnJldz0xNDkyO2UuaGVoZmluYWxhbHRvbmVhcmFiaWM9NjQ0MjM7ZS5oZWhmaW5hbGFsdHR3b2FyYWJpYz02NTI1ODtlLmhlaGZpbmFsYXJhYmljPTY1MjU4O2UuaGVoaGFtemFhYm92ZWZpbmFsYXJhYmljPTY0NDIxO2UuaGVoaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljPTY0NDIwO2UuaGVoaW5pdGlhbGFsdG9uZWFyYWJpYz02NDQyNDtlLmhlaGluaXRpYWxhcmFiaWM9NjUyNTk7ZS5oZWhpcmFnYW5hPTEyNDA4O2UuaGVobWVkaWFsYWx0b25lYXJhYmljPTY0NDI1O2UuaGVobWVkaWFsYXJhYmljPTY1MjYwO2UuaGVpc2VpZXJhc3F1YXJlPTEzMTc5O2UuaGVrYXRha2FuYT0xMjUwNDtlLmhla2F0YWthbmFoYWxmd2lkdGg9NjU0MjE7ZS5oZWt1dGFhcnVzcXVhcmU9MTMxMTA7ZS5oZW5naG9vaz02MTU7ZS5oZXJ1dHVzcXVhcmU9MTMxMTM7ZS5oZXQ9MTQ5NTtlLmhldGhlYnJldz0xNDk1O2UuaGhvb2s9NjE0O2UuaGhvb2tzdXBlcmlvcj02ODk7ZS5oaWV1aGFjaXJjbGVrb3JlYW49MTI5MjM7ZS5oaWV1aGFwYXJlbmtvcmVhbj0xMjgyNztlLmhpZXVoY2lyY2xla29yZWFuPTEyOTA5O2UuaGlldWhrb3JlYW49MTI2MjI7ZS5oaWV1aHBhcmVua29yZWFuPTEyODEzO2UuaGloaXJhZ2FuYT0xMjQwMjtlLmhpa2F0YWthbmE9MTI0OTg7ZS5oaWthdGFrYW5haGFsZndpZHRoPTY1NDE5O2UuaGlyaXE9MTQ2MDtlLmhpcmlxMTQ9MTQ2MDtlLmhpcmlxMjE9MTQ2MDtlLmhpcmlxMmQ9MTQ2MDtlLmhpcmlxaGVicmV3PTE0NjA7ZS5oaXJpcW5hcnJvd2hlYnJldz0xNDYwO2UuaGlyaXFxdWFydGVyaGVicmV3PTE0NjA7ZS5oaXJpcXdpZGVoZWJyZXc9MTQ2MDtlLmhsaW5lYmVsb3c9NzgzMDtlLmhtb25vc3BhY2U9NjUzNTI7ZS5ob2FybWVuaWFuPTEzOTI7ZS5ob2hpcHRoYWk9MzYyNztlLmhvaGlyYWdhbmE9MTI0MTE7ZS5ob2thdGFrYW5hPTEyNTA3O2UuaG9rYXRha2FuYWhhbGZ3aWR0aD02NTQyMjtlLmhvbGFtPTE0NjU7ZS5ob2xhbTE5PTE0NjU7ZS5ob2xhbTI2PTE0NjU7ZS5ob2xhbTMyPTE0NjU7ZS5ob2xhbWhlYnJldz0xNDY1O2UuaG9sYW1uYXJyb3doZWJyZXc9MTQ2NTtlLmhvbGFtcXVhcnRlcmhlYnJldz0xNDY1O2UuaG9sYW13aWRlaGVicmV3PTE0NjU7ZS5ob25va2h1a3RoYWk9MzYzMDtlLmhvb2thYm92ZWNvbWI9Nzc3O2UuaG9va2NtYj03Nzc7ZS5ob29rcGFsYXRhbGl6ZWRiZWxvd2NtYj04MDE7ZS5ob29rcmV0cm9mbGV4YmVsb3djbWI9ODAyO2UuaG9vbnNxdWFyZT0xMzEyMjtlLmhvcmljb3B0aWM9MTAwMTtlLmhvcml6b250YWxiYXI9ODIxMztlLmhvcm5jbWI9Nzk1O2UuaG90c3ByaW5ncz05ODMyO2UuaG91c2U9ODk2MjtlLmhwYXJlbj05Mzc5O2UuaHN1cGVyaW9yPTY4ODtlLmh0dXJuZWQ9NjEzO2UuaHVoaXJhZ2FuYT0xMjQwNTtlLmh1aWl0b3NxdWFyZT0xMzEwNztlLmh1a2F0YWthbmE9MTI1MDE7ZS5odWthdGFrYW5haGFsZndpZHRoPTY1NDIwO2UuaHVuZ2FydW1sYXV0PTczMztlLmh1bmdhcnVtbGF1dGNtYj03Nzk7ZS5odj00MDU7ZS5oeXBoZW49NDU7ZS5oeXBoZW5pbmZlcmlvcj02MzIwNTtlLmh5cGhlbm1vbm9zcGFjZT02NTI5MztlLmh5cGhlbnNtYWxsPTY1MTIzO2UuaHlwaGVuc3VwZXJpb3I9NjMyMDY7ZS5oeXBoZW50d289ODIwODtlLmk9MTA1O2UuaWFjdXRlPTIzNztlLmlhY3lyaWxsaWM9MTEwMztlLmliZW5nYWxpPTI0Mzk7ZS5pYm9wb21vZm89MTI1ODM7ZS5pYnJldmU9MzAxO2UuaWNhcm9uPTQ2NDtlLmljaXJjbGU9OTQzMjtlLmljaXJjdW1mbGV4PTIzODtlLmljeXJpbGxpYz0xMTEwO2UuaWRibGdyYXZlPTUyMTtlLmlkZW9ncmFwaGVhcnRoY2lyY2xlPTEyOTQzO2UuaWRlb2dyYXBoZmlyZWNpcmNsZT0xMjkzOTtlLmlkZW9ncmFwaGljYWxsaWFuY2VwYXJlbj0xMjg2MztlLmlkZW9ncmFwaGljY2FsbHBhcmVuPTEyODU4O2UuaWRlb2dyYXBoaWNjZW50cmVjaXJjbGU9MTI5NjU7ZS5pZGVvZ3JhcGhpY2Nsb3NlPTEyMjk0O2UuaWRlb2dyYXBoaWNjb21tYT0xMjI4OTtlLmlkZW9ncmFwaGljY29tbWFsZWZ0PTY1MzgwO2UuaWRlb2dyYXBoaWNjb25ncmF0dWxhdGlvbnBhcmVuPTEyODU1O2UuaWRlb2dyYXBoaWNjb3JyZWN0Y2lyY2xlPTEyOTYzO2UuaWRlb2dyYXBoaWNlYXJ0aHBhcmVuPTEyODQ3O2UuaWRlb2dyYXBoaWNlbnRlcnByaXNlcGFyZW49MTI4NjE7ZS5pZGVvZ3JhcGhpY2V4Y2VsbGVudGNpcmNsZT0xMjk1NztlLmlkZW9ncmFwaGljZmVzdGl2YWxwYXJlbj0xMjg2NDtlLmlkZW9ncmFwaGljZmluYW5jaWFsY2lyY2xlPTEyOTUwO2UuaWRlb2dyYXBoaWNmaW5hbmNpYWxwYXJlbj0xMjg1NDtlLmlkZW9ncmFwaGljZmlyZXBhcmVuPTEyODQzO2UuaWRlb2dyYXBoaWNoYXZlcGFyZW49MTI4NTA7ZS5pZGVvZ3JhcGhpY2hpZ2hjaXJjbGU9MTI5NjQ7ZS5pZGVvZ3JhcGhpY2l0ZXJhdGlvbm1hcms9MTIyOTM7ZS5pZGVvZ3JhcGhpY2xhYm9yY2lyY2xlPTEyOTUyO2UuaWRlb2dyYXBoaWNsYWJvcnBhcmVuPTEyODU2O2UuaWRlb2dyYXBoaWNsZWZ0Y2lyY2xlPTEyOTY3O2UuaWRlb2dyYXBoaWNsb3djaXJjbGU9MTI5NjY7ZS5pZGVvZ3JhcGhpY21lZGljaW5lY2lyY2xlPTEyOTY5O2UuaWRlb2dyYXBoaWNtZXRhbHBhcmVuPTEyODQ2O2UuaWRlb2dyYXBoaWNtb29ucGFyZW49MTI4NDI7ZS5pZGVvZ3JhcGhpY25hbWVwYXJlbj0xMjg1MjtlLmlkZW9ncmFwaGljcGVyaW9kPTEyMjkwO2UuaWRlb2dyYXBoaWNwcmludGNpcmNsZT0xMjk1ODtlLmlkZW9ncmFwaGljcmVhY2hwYXJlbj0xMjg2NztlLmlkZW9ncmFwaGljcmVwcmVzZW50cGFyZW49MTI4NTc7ZS5pZGVvZ3JhcGhpY3Jlc291cmNlcGFyZW49MTI4NjI7ZS5pZGVvZ3JhcGhpY3JpZ2h0Y2lyY2xlPTEyOTY4O2UuaWRlb2dyYXBoaWNzZWNyZXRjaXJjbGU9MTI5NTM7ZS5pZGVvZ3JhcGhpY3NlbGZwYXJlbj0xMjg2NjtlLmlkZW9ncmFwaGljc29jaWV0eXBhcmVuPTEyODUxO2UuaWRlb2dyYXBoaWNzcGFjZT0xMjI4ODtlLmlkZW9ncmFwaGljc3BlY2lhbHBhcmVuPTEyODUzO2UuaWRlb2dyYXBoaWNzdG9ja3BhcmVuPTEyODQ5O2UuaWRlb2dyYXBoaWNzdHVkeXBhcmVuPTEyODU5O2UuaWRlb2dyYXBoaWNzdW5wYXJlbj0xMjg0ODtlLmlkZW9ncmFwaGljc3VwZXJ2aXNlcGFyZW49MTI4NjA7ZS5pZGVvZ3JhcGhpY3dhdGVycGFyZW49MTI4NDQ7ZS5pZGVvZ3JhcGhpY3dvb2RwYXJlbj0xMjg0NTtlLmlkZW9ncmFwaGljemVybz0xMjI5NTtlLmlkZW9ncmFwaG1ldGFsY2lyY2xlPTEyOTQyO2UuaWRlb2dyYXBobW9vbmNpcmNsZT0xMjkzODtlLmlkZW9ncmFwaG5hbWVjaXJjbGU9MTI5NDg7ZS5pZGVvZ3JhcGhzdW5jaXJjbGU9MTI5NDQ7ZS5pZGVvZ3JhcGh3YXRlcmNpcmNsZT0xMjk0MDtlLmlkZW9ncmFwaHdvb2RjaXJjbGU9MTI5NDE7ZS5pZGV2YT0yMzExO2UuaWRpZXJlc2lzPTIzOTtlLmlkaWVyZXNpc2FjdXRlPTc3Mjc7ZS5pZGllcmVzaXNjeXJpbGxpYz0xMjUzO2UuaWRvdGJlbG93PTc4ODM7ZS5pZWJyZXZlY3lyaWxsaWM9MTIzOTtlLmllY3lyaWxsaWM9MTA3NztlLmlldW5nYWNpcmNsZWtvcmVhbj0xMjkxNztlLmlldW5nYXBhcmVua29yZWFuPTEyODIxO2UuaWV1bmdjaXJjbGVrb3JlYW49MTI5MDM7ZS5pZXVuZ2tvcmVhbj0xMjYxNTtlLmlldW5ncGFyZW5rb3JlYW49MTI4MDc7ZS5pZ3JhdmU9MjM2O2UuaWd1amFyYXRpPTI2OTU7ZS5pZ3VybXVraGk9MjU2NztlLmloaXJhZ2FuYT0xMjM1NjtlLmlob29rYWJvdmU9Nzg4MTtlLmlpYmVuZ2FsaT0yNDQwO2UuaWljeXJpbGxpYz0xMDgwO2UuaWlkZXZhPTIzMTI7ZS5paWd1amFyYXRpPTI2OTY7ZS5paWd1cm11a2hpPTI1Njg7ZS5paW1hdHJhZ3VybXVraGk9MjYyNDtlLmlpbnZlcnRlZGJyZXZlPTUyMztlLmlpc2hvcnRjeXJpbGxpYz0xMDgxO2UuaWl2b3dlbHNpZ25iZW5nYWxpPTI0OTY7ZS5paXZvd2Vsc2lnbmRldmE9MjM2ODtlLmlpdm93ZWxzaWduZ3VqYXJhdGk9Mjc1MjtlLmlqPTMwNztlLmlrYXRha2FuYT0xMjQ1MjtlLmlrYXRha2FuYWhhbGZ3aWR0aD02NTM5NDtlLmlrb3JlYW49MTI2NDM7ZS5pbGRlPTczMjtlLmlsdXloZWJyZXc9MTQ1MjtlLmltYWNyb249Mjk5O2UuaW1hY3JvbmN5cmlsbGljPTEyNTE7ZS5pbWFnZW9yYXBwcm94aW1hdGVseWVxdWFsPTg3ODc7ZS5pbWF0cmFndXJtdWtoaT0yNjIzO2UuaW1vbm9zcGFjZT02NTM1MztlLmluY3JlbWVudD04NzEwO2UuaW5maW5pdHk9ODczNDtlLmluaWFybWVuaWFuPTEzODc7ZS5pbnRlZ3JhbD04NzQ3O2UuaW50ZWdyYWxib3R0b209ODk5MztlLmludGVncmFsYnQ9ODk5MztlLmludGVncmFsZXg9NjM3MzM7ZS5pbnRlZ3JhbHRvcD04OTkyO2UuaW50ZWdyYWx0cD04OTkyO2UuaW50ZXJzZWN0aW9uPTg3NDU7ZS5pbnRpc3F1YXJlPTEzMDYxO2UuaW52YnVsbGV0PTk2ODg7ZS5pbnZjaXJjbGU9OTY4OTtlLmludnNtaWxlZmFjZT05Nzg3O2UuaW9jeXJpbGxpYz0xMTA1O2UuaW9nb25laz0zMDM7ZS5pb3RhPTk1MztlLmlvdGFkaWVyZXNpcz05NzA7ZS5pb3RhZGllcmVzaXN0b25vcz05MTI7ZS5pb3RhbGF0aW49NjE3O2UuaW90YXRvbm9zPTk0MztlLmlwYXJlbj05MzgwO2UuaXJpZ3VybXVraGk9MjY3NDtlLmlzbWFsbGhpcmFnYW5hPTEyMzU1O2UuaXNtYWxsa2F0YWthbmE9MTI0NTE7ZS5pc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NDtlLmlzc2hhcmJlbmdhbGk9MjU1NDtlLmlzdHJva2U9NjE2O2UuaXN1cGVyaW9yPTYzMjEzO2UuaXRlcmF0aW9uaGlyYWdhbmE9MTI0NDU7ZS5pdGVyYXRpb25rYXRha2FuYT0xMjU0MTtlLml0aWxkZT0yOTc7ZS5pdGlsZGViZWxvdz03NzI1O2UuaXVib3BvbW9mbz0xMjU4NTtlLml1Y3lyaWxsaWM9MTEwMjtlLml2b3dlbHNpZ25iZW5nYWxpPTI0OTU7ZS5pdm93ZWxzaWduZGV2YT0yMzY3O2UuaXZvd2Vsc2lnbmd1amFyYXRpPTI3NTE7ZS5pemhpdHNhY3lyaWxsaWM9MTE0MTtlLml6aGl0c2FkYmxncmF2ZWN5cmlsbGljPTExNDM7ZS5qPTEwNjtlLmphYXJtZW5pYW49MTM5MztlLmphYmVuZ2FsaT0yNDYwO2UuamFkZXZhPTIzMzI7ZS5qYWd1amFyYXRpPTI3MTY7ZS5qYWd1cm11a2hpPTI1ODg7ZS5qYm9wb21vZm89MTI1NjA7ZS5qY2Fyb249NDk2O2UuamNpcmNsZT05NDMzO2UuamNpcmN1bWZsZXg9MzA5O2UuamNyb3NzZWR0YWlsPTY2OTtlLmpkb3RsZXNzc3Ryb2tlPTYwNztlLmplY3lyaWxsaWM9MTExMjtlLmplZW1hcmFiaWM9MTU4MDtlLmplZW1maW5hbGFyYWJpYz02NTE4MjtlLmplZW1pbml0aWFsYXJhYmljPTY1MTgzO2UuamVlbW1lZGlhbGFyYWJpYz02NTE4NDtlLmplaGFyYWJpYz0xNjg4O2UuamVoZmluYWxhcmFiaWM9NjQzOTU7ZS5qaGFiZW5nYWxpPTI0NjE7ZS5qaGFkZXZhPTIzMzM7ZS5qaGFndWphcmF0aT0yNzE3O2UuamhhZ3VybXVraGk9MjU4OTtlLmpoZWhhcm1lbmlhbj0xNDAzO2UuamlzPTEyMjkyO2Uuam1vbm9zcGFjZT02NTM1NDtlLmpwYXJlbj05MzgxO2UuanN1cGVyaW9yPTY5MDtlLms9MTA3O2Uua2FiYXNoa2lyY3lyaWxsaWM9MTE4NTtlLmthYmVuZ2FsaT0yNDUzO2Uua2FjdXRlPTc3Mjk7ZS5rYWN5cmlsbGljPTEwODI7ZS5rYWRlc2NlbmRlcmN5cmlsbGljPTExNzk7ZS5rYWRldmE9MjMyNTtlLmthZj0xNDk5O2Uua2FmYXJhYmljPTE2MDM7ZS5rYWZkYWdlc2g9NjQzMTU7ZS5rYWZkYWdlc2hoZWJyZXc9NjQzMTU7ZS5rYWZmaW5hbGFyYWJpYz02NTI0MjtlLmthZmhlYnJldz0xNDk5O2Uua2FmaW5pdGlhbGFyYWJpYz02NTI0MztlLmthZm1lZGlhbGFyYWJpYz02NTI0NDtlLmthZnJhZmVoZWJyZXc9NjQzMzM7ZS5rYWd1amFyYXRpPTI3MDk7ZS5rYWd1cm11a2hpPTI1ODE7ZS5rYWhpcmFnYW5hPTEyMzYzO2Uua2Fob29rY3lyaWxsaWM9MTIyMDtlLmtha2F0YWthbmE9MTI0NTk7ZS5rYWthdGFrYW5haGFsZndpZHRoPTY1Mzk4O2Uua2FwcGE9OTU0O2Uua2FwcGFzeW1ib2xncmVlaz0xMDA4O2Uua2FweWVvdW5taWV1bWtvcmVhbj0xMjY1NztlLmthcHllb3VucGhpZXVwaGtvcmVhbj0xMjY3NjtlLmthcHllb3VucGlldXBrb3JlYW49MTI2NjQ7ZS5rYXB5ZW91bnNzYW5ncGlldXBrb3JlYW49MTI2NjU7ZS5rYXJvcmlpc3F1YXJlPTEzMDY5O2Uua2FzaGlkYWF1dG9hcmFiaWM9MTYwMDtlLmthc2hpZGFhdXRvbm9zaWRlYmVhcmluZ2FyYWJpYz0xNjAwO2Uua2FzbWFsbGthdGFrYW5hPTEyNTMzO2Uua2FzcXVhcmU9MTMxODg7ZS5rYXNyYWFyYWJpYz0xNjE2O2Uua2FzcmF0YW5hcmFiaWM9MTYxMztlLmthc3Ryb2tlY3lyaWxsaWM9MTE4MztlLmthdGFoaXJhcHJvbG9uZ21hcmtoYWxmd2lkdGg9NjUzOTI7ZS5rYXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWM9MTE4MTtlLmtib3BvbW9mbz0xMjU1ODtlLmtjYWxzcXVhcmU9MTMxOTM7ZS5rY2Fyb249NDg5O2Uua2NlZGlsbGE9MzExO2Uua2NpcmNsZT05NDM0O2Uua2NvbW1hYWNjZW50PTMxMTtlLmtkb3RiZWxvdz03NzMxO2Uua2VoYXJtZW5pYW49MTQxMjtlLmtlaGlyYWdhbmE9MTIzNjk7ZS5rZWthdGFrYW5hPTEyNDY1O2Uua2VrYXRha2FuYWhhbGZ3aWR0aD02NTQwMTtlLmtlbmFybWVuaWFuPTEzOTE7ZS5rZXNtYWxsa2F0YWthbmE9MTI1MzQ7ZS5rZ3JlZW5sYW5kaWM9MzEyO2Uua2hhYmVuZ2FsaT0yNDU0O2Uua2hhY3lyaWxsaWM9MTA5MztlLmtoYWRldmE9MjMyNjtlLmtoYWd1amFyYXRpPTI3MTA7ZS5raGFndXJtdWtoaT0yNTgyO2Uua2hhaGFyYWJpYz0xNTgyO2Uua2hhaGZpbmFsYXJhYmljPTY1MTkwO2Uua2hhaGluaXRpYWxhcmFiaWM9NjUxOTE7ZS5raGFobWVkaWFsYXJhYmljPTY1MTkyO2Uua2hlaWNvcHRpYz05OTk7ZS5raGhhZGV2YT0yMzkzO2Uua2hoYWd1cm11a2hpPTI2NDk7ZS5raGlldWtoYWNpcmNsZWtvcmVhbj0xMjkyMDtlLmtoaWV1a2hhcGFyZW5rb3JlYW49MTI4MjQ7ZS5raGlldWtoY2lyY2xla29yZWFuPTEyOTA2O2Uua2hpZXVraGtvcmVhbj0xMjYxOTtlLmtoaWV1a2hwYXJlbmtvcmVhbj0xMjgxMDtlLmtob2toYWl0aGFpPTM1ODY7ZS5raG9raG9udGhhaT0zNTg5O2Uua2hva2h1YXR0aGFpPTM1ODc7ZS5raG9raHdhaXRoYWk9MzU4ODtlLmtob211dHRoYWk9MzY3NTtlLmtob29rPTQwOTtlLmtob3Jha2hhbmd0aGFpPTM1OTA7ZS5raHpzcXVhcmU9MTMyMDE7ZS5raWhpcmFnYW5hPTEyMzY1O2Uua2lrYXRha2FuYT0xMjQ2MTtlLmtpa2F0YWthbmFoYWxmd2lkdGg9NjUzOTk7ZS5raXJvZ3VyYW11c3F1YXJlPTEzMDc3O2Uua2lyb21lZXRvcnVzcXVhcmU9MTMwNzg7ZS5raXJvc3F1YXJlPTEzMDc2O2Uua2l5ZW9rYWNpcmNsZWtvcmVhbj0xMjkxMDtlLmtpeWVva2FwYXJlbmtvcmVhbj0xMjgxNDtlLmtpeWVva2NpcmNsZWtvcmVhbj0xMjg5NjtlLmtpeWVva2tvcmVhbj0xMjU5MztlLmtpeWVva3BhcmVua29yZWFuPTEyODAwO2Uua2l5ZW9rc2lvc2tvcmVhbj0xMjU5NTtlLmtqZWN5cmlsbGljPTExMTY7ZS5rbGluZWJlbG93PTc3MzM7ZS5rbHNxdWFyZT0xMzIwODtlLmttY3ViZWRzcXVhcmU9MTMyMjI7ZS5rbW9ub3NwYWNlPTY1MzU1O2Uua21zcXVhcmVkc3F1YXJlPTEzMjE4O2Uua29oaXJhZ2FuYT0xMjM3MTtlLmtvaG1zcXVhcmU9MTMyNDg7ZS5rb2thaXRoYWk9MzU4NTtlLmtva2F0YWthbmE9MTI0Njc7ZS5rb2thdGFrYW5haGFsZndpZHRoPTY1NDAyO2Uua29vcG9zcXVhcmU9MTMwODY7ZS5rb3BwYWN5cmlsbGljPTExNTM7ZS5rb3JlYW5zdGFuZGFyZHN5bWJvbD0xMjkyNztlLmtvcm9uaXNjbWI9ODM1O2Uua3BhcmVuPTkzODI7ZS5rcGFzcXVhcmU9MTMyMjY7ZS5rc2ljeXJpbGxpYz0xMTM1O2Uua3RzcXVhcmU9MTMyNjM7ZS5rdHVybmVkPTY3MDtlLmt1aGlyYWdhbmE9MTIzNjc7ZS5rdWthdGFrYW5hPTEyNDYzO2Uua3VrYXRha2FuYWhhbGZ3aWR0aD02NTQwMDtlLmt2c3F1YXJlPTEzMjQwO2Uua3dzcXVhcmU9MTMyNDY7ZS5sPTEwODtlLmxhYmVuZ2FsaT0yNDgyO2UubGFjdXRlPTMxNDtlLmxhZGV2YT0yMzU0O2UubGFndWphcmF0aT0yNzM4O2UubGFndXJtdWtoaT0yNjEwO2UubGFra2hhbmd5YW90aGFpPTM2NTM7ZS5sYW1hbGVmZmluYWxhcmFiaWM9NjUyNzY7ZS5sYW1hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MjcyO2UubGFtYWxlZmhhbXphYWJvdmVpc29sYXRlZGFyYWJpYz02NTI3MTtlLmxhbWFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWM9NjUyNzQ7ZS5sYW1hbGVmaGFtemFiZWxvd2lzb2xhdGVkYXJhYmljPTY1MjczO2UubGFtYWxlZmlzb2xhdGVkYXJhYmljPTY1Mjc1O2UubGFtYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYz02NTI3MDtlLmxhbWFsZWZtYWRkYWFib3ZlaXNvbGF0ZWRhcmFiaWM9NjUyNjk7ZS5sYW1hcmFiaWM9MTYwNDtlLmxhbWJkYT05NTU7ZS5sYW1iZGFzdHJva2U9NDExO2UubGFtZWQ9MTUwMDtlLmxhbWVkZGFnZXNoPTY0MzE2O2UubGFtZWRkYWdlc2hoZWJyZXc9NjQzMTY7ZS5sYW1lZGhlYnJldz0xNTAwO2UubGFtZmluYWxhcmFiaWM9NjUyNDY7ZS5sYW1oYWhpbml0aWFsYXJhYmljPTY0NzE0O2UubGFtaW5pdGlhbGFyYWJpYz02NTI0NztlLmxhbWplZW1pbml0aWFsYXJhYmljPTY0NzEzO2UubGFta2hhaGluaXRpYWxhcmFiaWM9NjQ3MTU7ZS5sYW1sYW1oZWhpc29sYXRlZGFyYWJpYz02NTAxMDtlLmxhbW1lZGlhbGFyYWJpYz02NTI0ODtlLmxhbW1lZW1oYWhpbml0aWFsYXJhYmljPTY0OTA0O2UubGFtbWVlbWluaXRpYWxhcmFiaWM9NjQ3MTY7ZS5sYXJnZWNpcmNsZT05NzExO2UubGJhcj00MTA7ZS5sYmVsdD02MjA7ZS5sYm9wb21vZm89MTI1NTY7ZS5sY2Fyb249MzE4O2UubGNlZGlsbGE9MzE2O2UubGNpcmNsZT05NDM1O2UubGNpcmN1bWZsZXhiZWxvdz03NzQxO2UubGNvbW1hYWNjZW50PTMxNjtlLmxkb3Q9MzIwO2UubGRvdGFjY2VudD0zMjA7ZS5sZG90YmVsb3c9NzczNTtlLmxkb3RiZWxvd21hY3Jvbj03NzM3O2UubGVmdGFuZ2xlYWJvdmVjbWI9Nzk0O2UubGVmdHRhY2tiZWxvd2NtYj03OTI7ZS5sZXNzPTYwO2UubGVzc2VxdWFsPTg4MDQ7ZS5sZXNzZXF1YWxvcmdyZWF0ZXI9ODkyMjtlLmxlc3Ntb25vc3BhY2U9NjUzMDg7ZS5sZXNzb3JlcXVpdmFsZW50PTg4MTg7ZS5sZXNzb3JncmVhdGVyPTg4MjI7ZS5sZXNzb3ZlcmVxdWFsPTg4MDY7ZS5sZXNzc21hbGw9NjUxMjQ7ZS5sZXpoPTYyMjtlLmxmYmxvY2s9OTYxMjtlLmxob29rcmV0cm9mbGV4PTYyMTtlLmxpcmE9ODM1NjtlLmxpd25hcm1lbmlhbj0xMzg4O2UubGo9NDU3O2UubGplY3lyaWxsaWM9MTExMztlLmxsPTYzMTY4O2UubGxhZGV2YT0yMzU1O2UubGxhZ3VqYXJhdGk9MjczOTtlLmxsaW5lYmVsb3c9NzczOTtlLmxsbGFkZXZhPTIzNTY7ZS5sbHZvY2FsaWNiZW5nYWxpPTI1Mjk7ZS5sbHZvY2FsaWNkZXZhPTI0MDE7ZS5sbHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI1MzE7ZS5sbHZvY2FsaWN2b3dlbHNpZ25kZXZhPTI0MDM7ZS5sbWlkZGxldGlsZGU9NjE5O2UubG1vbm9zcGFjZT02NTM1NjtlLmxtc3F1YXJlPTEzMjY0O2UubG9jaHVsYXRoYWk9MzYyODtlLmxvZ2ljYWxhbmQ9ODc0MztlLmxvZ2ljYWxub3Q9MTcyO2UubG9naWNhbG5vdHJldmVyc2VkPTg5NzY7ZS5sb2dpY2Fsb3I9ODc0NDtlLmxvbGluZ3RoYWk9MzYyMTtlLmxvbmdzPTM4MztlLmxvd2xpbmVjZW50ZXJsaW5lPTY1MTAyO2UubG93bGluZWNtYj04MTg7ZS5sb3dsaW5lZGFzaGVkPTY1MTAxO2UubG96ZW5nZT05Njc0O2UubHBhcmVuPTkzODM7ZS5sc2xhc2g9MzIyO2UubHNxdWFyZT04NDY3O2UubHN1cGVyaW9yPTYzMjE0O2UubHRzaGFkZT05NjE3O2UubHV0aGFpPTM2MjI7ZS5sdm9jYWxpY2JlbmdhbGk9MjQ0NDtlLmx2b2NhbGljZGV2YT0yMzE2O2UubHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI1MzA7ZS5sdm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjQwMjtlLmx4c3F1YXJlPTEzMjY3O2UubT0xMDk7ZS5tYWJlbmdhbGk9MjQ3ODtlLm1hY3Jvbj0xNzU7ZS5tYWNyb25iZWxvd2NtYj04MTc7ZS5tYWNyb25jbWI9NzcyO2UubWFjcm9ubG93bW9kPTcxNztlLm1hY3Jvbm1vbm9zcGFjZT02NTUwNztlLm1hY3V0ZT03NzQzO2UubWFkZXZhPTIzNTA7ZS5tYWd1amFyYXRpPTI3MzQ7ZS5tYWd1cm11a2hpPTI2MDY7ZS5tYWhhcGFraGhlYnJldz0xNDQ0O2UubWFoYXBha2hsZWZ0aGVicmV3PTE0NDQ7ZS5tYWhpcmFnYW5hPTEyNDE0O2UubWFpY2hhdHRhd2Fsb3dsZWZ0dGhhaT02MzYzNztlLm1haWNoYXR0YXdhbG93cmlnaHR0aGFpPTYzNjM2O2UubWFpY2hhdHRhd2F0aGFpPTM2NTk7ZS5tYWljaGF0dGF3YXVwcGVybGVmdHRoYWk9NjM2MzU7ZS5tYWlla2xvd2xlZnR0aGFpPTYzNjI4O2UubWFpZWtsb3dyaWdodHRoYWk9NjM2Mjc7ZS5tYWlla3RoYWk9MzY1NjtlLm1haWVrdXBwZXJsZWZ0dGhhaT02MzYyNjtlLm1haWhhbmFrYXRsZWZ0dGhhaT02MzYyMDtlLm1haWhhbmFrYXR0aGFpPTM2MzM7ZS5tYWl0YWlraHVsZWZ0dGhhaT02MzYyNTtlLm1haXRhaWtodXRoYWk9MzY1NTtlLm1haXRob2xvd2xlZnR0aGFpPTYzNjMxO2UubWFpdGhvbG93cmlnaHR0aGFpPTYzNjMwO2UubWFpdGhvdGhhaT0zNjU3O2UubWFpdGhvdXBwZXJsZWZ0dGhhaT02MzYyOTtlLm1haXRyaWxvd2xlZnR0aGFpPTYzNjM0O2UubWFpdHJpbG93cmlnaHR0aGFpPTYzNjMzO2UubWFpdHJpdGhhaT0zNjU4O2UubWFpdHJpdXBwZXJsZWZ0dGhhaT02MzYzMjtlLm1haXlhbW9rdGhhaT0zNjU0O2UubWFrYXRha2FuYT0xMjUxMDtlLm1ha2F0YWthbmFoYWxmd2lkdGg9NjU0MjM7ZS5tYWxlPTk3OTQ7ZS5tYW5zeW9uc3F1YXJlPTEzMTI3O2UubWFxYWZoZWJyZXc9MTQ3MDtlLm1hcnM9OTc5NDtlLm1hc29yYWNpcmNsZWhlYnJldz0xNDU1O2UubWFzcXVhcmU9MTMxODc7ZS5tYm9wb21vZm89MTI1NTE7ZS5tYnNxdWFyZT0xMzI2ODtlLm1jaXJjbGU9OTQzNjtlLm1jdWJlZHNxdWFyZT0xMzIyMTtlLm1kb3RhY2NlbnQ9Nzc0NTtlLm1kb3RiZWxvdz03NzQ3O2UubWVlbWFyYWJpYz0xNjA1O2UubWVlbWZpbmFsYXJhYmljPTY1MjUwO2UubWVlbWluaXRpYWxhcmFiaWM9NjUyNTE7ZS5tZWVtbWVkaWFsYXJhYmljPTY1MjUyO2UubWVlbW1lZW1pbml0aWFsYXJhYmljPTY0NzIxO2UubWVlbW1lZW1pc29sYXRlZGFyYWJpYz02NDU4NDtlLm1lZXRvcnVzcXVhcmU9MTMxMzM7ZS5tZWhpcmFnYW5hPTEyNDE3O2UubWVpemllcmFzcXVhcmU9MTMxODI7ZS5tZWthdGFrYW5hPTEyNTEzO2UubWVrYXRha2FuYWhhbGZ3aWR0aD02NTQyNjtlLm1lbT0xNTAyO2UubWVtZGFnZXNoPTY0MzE4O2UubWVtZGFnZXNoaGVicmV3PTY0MzE4O2UubWVtaGVicmV3PTE1MDI7ZS5tZW5hcm1lbmlhbj0xMzk2O2UubWVya2hhaGVicmV3PTE0NDU7ZS5tZXJraGFrZWZ1bGFoZWJyZXc9MTQ0NjtlLm1lcmtoYWtlZnVsYWxlZnRoZWJyZXc9MTQ0NjtlLm1lcmtoYWxlZnRoZWJyZXc9MTQ0NTtlLm1ob29rPTYyNTtlLm1oenNxdWFyZT0xMzIwMjtlLm1pZGRsZWRvdGthdGFrYW5haGFsZndpZHRoPTY1MzgxO2UubWlkZG90PTE4MztlLm1pZXVtYWNpcmNsZWtvcmVhbj0xMjkxNDtlLm1pZXVtYXBhcmVua29yZWFuPTEyODE4O2UubWlldW1jaXJjbGVrb3JlYW49MTI5MDA7ZS5taWV1bWtvcmVhbj0xMjYwOTtlLm1pZXVtcGFuc2lvc2tvcmVhbj0xMjY1NjtlLm1pZXVtcGFyZW5rb3JlYW49MTI4MDQ7ZS5taWV1bXBpZXVwa29yZWFuPTEyNjU0O2UubWlldW1zaW9za29yZWFuPTEyNjU1O2UubWloaXJhZ2FuYT0xMjQxNTtlLm1pa2F0YWthbmE9MTI1MTE7ZS5taWthdGFrYW5haGFsZndpZHRoPTY1NDI0O2UubWludXM9ODcyMjtlLm1pbnVzYmVsb3djbWI9ODAwO2UubWludXNjaXJjbGU9ODg1NDtlLm1pbnVzbW9kPTcyNztlLm1pbnVzcGx1cz04NzIzO2UubWludXRlPTgyNDI7ZS5taXJpYmFhcnVzcXVhcmU9MTMxMzA7ZS5taXJpc3F1YXJlPTEzMTI5O2UubWxvbmdsZWd0dXJuZWQ9NjI0O2UubWxzcXVhcmU9MTMyMDY7ZS5tbWN1YmVkc3F1YXJlPTEzMjE5O2UubW1vbm9zcGFjZT02NTM1NztlLm1tc3F1YXJlZHNxdWFyZT0xMzIxNTtlLm1vaGlyYWdhbmE9MTI0MTg7ZS5tb2htc3F1YXJlPTEzMjQ5O2UubW9rYXRha2FuYT0xMjUxNDtlLm1va2F0YWthbmFoYWxmd2lkdGg9NjU0Mjc7ZS5tb2xzcXVhcmU9MTMyNzA7ZS5tb21hdGhhaT0zNjE3O2UubW92ZXJzc3F1YXJlPTEzMjIzO2UubW92ZXJzc3F1YXJlZHNxdWFyZT0xMzIyNDtlLm1wYXJlbj05Mzg0O2UubXBhc3F1YXJlPTEzMjI3O2UubXNzcXVhcmU9MTMyMzU7ZS5tc3VwZXJpb3I9NjMyMTU7ZS5tdHVybmVkPTYyMztlLm11PTE4MTtlLm11MT0xODE7ZS5tdWFzcXVhcmU9MTMxODY7ZS5tdWNoZ3JlYXRlcj04ODExO2UubXVjaGxlc3M9ODgxMDtlLm11ZnNxdWFyZT0xMzE5NjtlLm11Z3JlZWs9OTU2O2UubXVnc3F1YXJlPTEzMTk3O2UubXVoaXJhZ2FuYT0xMjQxNjtlLm11a2F0YWthbmE9MTI1MTI7ZS5tdWthdGFrYW5haGFsZndpZHRoPTY1NDI1O2UubXVsc3F1YXJlPTEzMjA1O2UubXVsdGlwbHk9MjE1O2UubXVtc3F1YXJlPTEzMjExO2UubXVuYWhoZWJyZXc9MTQ0MztlLm11bmFobGVmdGhlYnJldz0xNDQzO2UubXVzaWNhbG5vdGU9OTgzNDtlLm11c2ljYWxub3RlZGJsPTk4MzU7ZS5tdXNpY2ZsYXRzaWduPTk4Mzc7ZS5tdXNpY3NoYXJwc2lnbj05ODM5O2UubXVzc3F1YXJlPTEzMjM0O2UubXV2c3F1YXJlPTEzMjM4O2UubXV3c3F1YXJlPTEzMjQ0O2UubXZtZWdhc3F1YXJlPTEzMjQxO2UubXZzcXVhcmU9MTMyMzk7ZS5td21lZ2FzcXVhcmU9MTMyNDc7ZS5td3NxdWFyZT0xMzI0NTtlLm49MTEwO2UubmFiZW5nYWxpPTI0NzI7ZS5uYWJsYT04NzExO2UubmFjdXRlPTMyNDtlLm5hZGV2YT0yMzQ0O2UubmFndWphcmF0aT0yNzI4O2UubmFndXJtdWtoaT0yNjAwO2UubmFoaXJhZ2FuYT0xMjM5NDtlLm5ha2F0YWthbmE9MTI0OTA7ZS5uYWthdGFrYW5haGFsZndpZHRoPTY1NDEzO2UubmFwb3N0cm9waGU9MzI5O2UubmFzcXVhcmU9MTMxODU7ZS5uYm9wb21vZm89MTI1NTU7ZS5uYnNwYWNlPTE2MDtlLm5jYXJvbj0zMjg7ZS5uY2VkaWxsYT0zMjY7ZS5uY2lyY2xlPTk0Mzc7ZS5uY2lyY3VtZmxleGJlbG93PTc3NTU7ZS5uY29tbWFhY2NlbnQ9MzI2O2UubmRvdGFjY2VudD03NzQ5O2UubmRvdGJlbG93PTc3NTE7ZS5uZWhpcmFnYW5hPTEyMzk3O2UubmVrYXRha2FuYT0xMjQ5MztlLm5la2F0YWthbmFoYWxmd2lkdGg9NjU0MTY7ZS5uZXdzaGVxZWxzaWduPTgzNjI7ZS5uZnNxdWFyZT0xMzE5NTtlLm5nYWJlbmdhbGk9MjQ1NztlLm5nYWRldmE9MjMyOTtlLm5nYWd1amFyYXRpPTI3MTM7ZS5uZ2FndXJtdWtoaT0yNTg1O2Uubmdvbmd1dGhhaT0zNTkxO2UubmhpcmFnYW5hPTEyNDM1O2Uubmhvb2tsZWZ0PTYyNjtlLm5ob29rcmV0cm9mbGV4PTYyNztlLm5pZXVuYWNpcmNsZWtvcmVhbj0xMjkxMTtlLm5pZXVuYXBhcmVua29yZWFuPTEyODE1O2UubmlldW5jaWV1Y2tvcmVhbj0xMjU5NztlLm5pZXVuY2lyY2xla29yZWFuPTEyODk3O2UubmlldW5oaWV1aGtvcmVhbj0xMjU5ODtlLm5pZXVua29yZWFuPTEyNTk2O2UubmlldW5wYW5zaW9za29yZWFuPTEyNjQ4O2UubmlldW5wYXJlbmtvcmVhbj0xMjgwMTtlLm5pZXVuc2lvc2tvcmVhbj0xMjY0NztlLm5pZXVudGlrZXV0a29yZWFuPTEyNjQ2O2UubmloaXJhZ2FuYT0xMjM5NTtlLm5pa2F0YWthbmE9MTI0OTE7ZS5uaWthdGFrYW5haGFsZndpZHRoPTY1NDE0O2UubmlraGFoaXRsZWZ0dGhhaT02MzY0MTtlLm5pa2hhaGl0dGhhaT0zNjYxO2UubmluZT01NztlLm5pbmVhcmFiaWM9MTY0MTtlLm5pbmViZW5nYWxpPTI1NDM7ZS5uaW5lY2lyY2xlPTkzMjA7ZS5uaW5lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEzMDtlLm5pbmVkZXZhPTI0MTU7ZS5uaW5lZ3VqYXJhdGk9Mjc5OTtlLm5pbmVndXJtdWtoaT0yNjcxO2UubmluZWhhY2thcmFiaWM9MTY0MTtlLm5pbmVoYW5nemhvdT0xMjMyOTtlLm5pbmVpZGVvZ3JhcGhpY3BhcmVuPTEyODQwO2UubmluZWluZmVyaW9yPTgzMjk7ZS5uaW5lbW9ub3NwYWNlPTY1MzA1O2UubmluZW9sZHN0eWxlPTYzMjg5O2UubmluZXBhcmVuPTkzNDA7ZS5uaW5lcGVyaW9kPTkzNjA7ZS5uaW5lcGVyc2lhbj0xNzg1O2UubmluZXJvbWFuPTg1Njg7ZS5uaW5lc3VwZXJpb3I9ODMxMztlLm5pbmV0ZWVuY2lyY2xlPTkzMzA7ZS5uaW5ldGVlbnBhcmVuPTkzNTA7ZS5uaW5ldGVlbnBlcmlvZD05MzcwO2UubmluZXRoYWk9MzY3MztlLm5qPTQ2MDtlLm5qZWN5cmlsbGljPTExMTQ7ZS5ua2F0YWthbmE9MTI1MzE7ZS5ua2F0YWthbmFoYWxmd2lkdGg9NjU0Mzc7ZS5ubGVncmlnaHRsb25nPTQxNDtlLm5saW5lYmVsb3c9Nzc1MztlLm5tb25vc3BhY2U9NjUzNTg7ZS5ubXNxdWFyZT0xMzIxMDtlLm5uYWJlbmdhbGk9MjQ2NztlLm5uYWRldmE9MjMzOTtlLm5uYWd1amFyYXRpPTI3MjM7ZS5ubmFndXJtdWtoaT0yNTk1O2Uubm5uYWRldmE9MjM0NTtlLm5vaGlyYWdhbmE9MTIzOTg7ZS5ub2thdGFrYW5hPTEyNDk0O2Uubm9rYXRha2FuYWhhbGZ3aWR0aD02NTQxNztlLm5vbmJyZWFraW5nc3BhY2U9MTYwO2Uubm9uZW50aGFpPTM2MDM7ZS5ub251dGhhaT0zNjA5O2Uubm9vbmFyYWJpYz0xNjA2O2Uubm9vbmZpbmFsYXJhYmljPTY1MjU0O2Uubm9vbmdodW5uYWFyYWJpYz0xNzIyO2Uubm9vbmdodW5uYWZpbmFsYXJhYmljPTY0NDE1O2Uubm9vbmluaXRpYWxhcmFiaWM9NjUyNTU7ZS5ub29uamVlbWluaXRpYWxhcmFiaWM9NjQ3MjI7ZS5ub29uamVlbWlzb2xhdGVkYXJhYmljPTY0NTg3O2Uubm9vbm1lZGlhbGFyYWJpYz02NTI1NjtlLm5vb25tZWVtaW5pdGlhbGFyYWJpYz02NDcyNTtlLm5vb25tZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1OTA7ZS5ub29ubm9vbmZpbmFsYXJhYmljPTY0NjUzO2Uubm90Y29udGFpbnM9ODcxNjtlLm5vdGVsZW1lbnQ9ODcxMztlLm5vdGVsZW1lbnRvZj04NzEzO2Uubm90ZXF1YWw9ODgwMDtlLm5vdGdyZWF0ZXI9ODgxNTtlLm5vdGdyZWF0ZXJub3JlcXVhbD04ODE3O2Uubm90Z3JlYXRlcm5vcmxlc3M9ODgyNTtlLm5vdGlkZW50aWNhbD04ODAyO2Uubm90bGVzcz04ODE0O2Uubm90bGVzc25vcmVxdWFsPTg4MTY7ZS5ub3RwYXJhbGxlbD04NzQyO2Uubm90cHJlY2VkZXM9ODgzMjtlLm5vdHN1YnNldD04ODM2O2Uubm90c3VjY2VlZHM9ODgzMztlLm5vdHN1cGVyc2V0PTg4Mzc7ZS5ub3dhcm1lbmlhbj0xMzk4O2UubnBhcmVuPTkzODU7ZS5uc3NxdWFyZT0xMzIzMztlLm5zdXBlcmlvcj04MzE5O2UubnRpbGRlPTI0MTtlLm51PTk1NztlLm51aGlyYWdhbmE9MTIzOTY7ZS5udWthdGFrYW5hPTEyNDkyO2UubnVrYXRha2FuYWhhbGZ3aWR0aD02NTQxNTtlLm51a3RhYmVuZ2FsaT0yNDkyO2UubnVrdGFkZXZhPTIzNjQ7ZS5udWt0YWd1amFyYXRpPTI3NDg7ZS5udWt0YWd1cm11a2hpPTI2MjA7ZS5udW1iZXJzaWduPTM1O2UubnVtYmVyc2lnbm1vbm9zcGFjZT02NTI4MztlLm51bWJlcnNpZ25zbWFsbD02NTExOTtlLm51bWVyYWxzaWduZ3JlZWs9ODg0O2UubnVtZXJhbHNpZ25sb3dlcmdyZWVrPTg4NTtlLm51bWVybz04NDcwO2UubnVuPTE1MDQ7ZS5udW5kYWdlc2g9NjQzMjA7ZS5udW5kYWdlc2hoZWJyZXc9NjQzMjA7ZS5udW5oZWJyZXc9MTUwNDtlLm52c3F1YXJlPTEzMjM3O2UubndzcXVhcmU9MTMyNDM7ZS5ueWFiZW5nYWxpPTI0NjI7ZS5ueWFkZXZhPTIzMzQ7ZS5ueWFndWphcmF0aT0yNzE4O2UubnlhZ3VybXVraGk9MjU5MDtlLm89MTExO2Uub2FjdXRlPTI0MztlLm9hbmd0aGFpPTM2Mjk7ZS5vYmFycmVkPTYyOTtlLm9iYXJyZWRjeXJpbGxpYz0xMjU3O2Uub2JhcnJlZGRpZXJlc2lzY3lyaWxsaWM9MTI1OTtlLm9iZW5nYWxpPTI0NTE7ZS5vYm9wb21vZm89MTI1NzE7ZS5vYnJldmU9MzM1O2Uub2NhbmRyYWRldmE9MjMyMTtlLm9jYW5kcmFndWphcmF0aT0yNzA1O2Uub2NhbmRyYXZvd2Vsc2lnbmRldmE9MjM3NztlLm9jYW5kcmF2b3dlbHNpZ25ndWphcmF0aT0yNzYxO2Uub2Nhcm9uPTQ2NjtlLm9jaXJjbGU9OTQzODtlLm9jaXJjdW1mbGV4PTI0NDtlLm9jaXJjdW1mbGV4YWN1dGU9Nzg4OTtlLm9jaXJjdW1mbGV4ZG90YmVsb3c9Nzg5NztlLm9jaXJjdW1mbGV4Z3JhdmU9Nzg5MTtlLm9jaXJjdW1mbGV4aG9va2Fib3ZlPTc4OTM7ZS5vY2lyY3VtZmxleHRpbGRlPTc4OTU7ZS5vY3lyaWxsaWM9MTA4NjtlLm9kYmxhY3V0ZT0zMzc7ZS5vZGJsZ3JhdmU9NTI1O2Uub2RldmE9MjMyMztlLm9kaWVyZXNpcz0yNDY7ZS5vZGllcmVzaXNjeXJpbGxpYz0xMjU1O2Uub2RvdGJlbG93PTc4ODU7ZS5vZT0zMzk7ZS5vZWtvcmVhbj0xMjYzNDtlLm9nb25laz03MzE7ZS5vZ29uZWtjbWI9ODA4O2Uub2dyYXZlPTI0MjtlLm9ndWphcmF0aT0yNzA3O2Uub2hhcm1lbmlhbj0xNDEzO2Uub2hpcmFnYW5hPTEyMzYyO2Uub2hvb2thYm92ZT03ODg3O2Uub2hvcm49NDE3O2Uub2hvcm5hY3V0ZT03ODk5O2Uub2hvcm5kb3RiZWxvdz03OTA3O2Uub2hvcm5ncmF2ZT03OTAxO2Uub2hvcm5ob29rYWJvdmU9NzkwMztlLm9ob3JudGlsZGU9NzkwNTtlLm9odW5nYXJ1bWxhdXQ9MzM3O2Uub2k9NDE5O2Uub2ludmVydGVkYnJldmU9NTI3O2Uub2thdGFrYW5hPTEyNDU4O2Uub2thdGFrYW5haGFsZndpZHRoPTY1Mzk3O2Uub2tvcmVhbj0xMjYzMTtlLm9sZWhlYnJldz0xNDUxO2Uub21hY3Jvbj0zMzM7ZS5vbWFjcm9uYWN1dGU9Nzc2MztlLm9tYWNyb25ncmF2ZT03NzYxO2Uub21kZXZhPTIzODQ7ZS5vbWVnYT05Njk7ZS5vbWVnYTE9OTgyO2Uub21lZ2FjeXJpbGxpYz0xMTIxO2Uub21lZ2FsYXRpbmNsb3NlZD02MzE7ZS5vbWVnYXJvdW5kY3lyaWxsaWM9MTE0NztlLm9tZWdhdGl0bG9jeXJpbGxpYz0xMTQ5O2Uub21lZ2F0b25vcz05NzQ7ZS5vbWd1amFyYXRpPTI3Njg7ZS5vbWljcm9uPTk1OTtlLm9taWNyb250b25vcz05NzI7ZS5vbW9ub3NwYWNlPTY1MzU5O2Uub25lPTQ5O2Uub25lYXJhYmljPTE2MzM7ZS5vbmViZW5nYWxpPTI1MzU7ZS5vbmVjaXJjbGU9OTMxMjtlLm9uZWNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjI7ZS5vbmVkZXZhPTI0MDc7ZS5vbmVkb3RlbmxlYWRlcj04MjI4O2Uub25lZWlnaHRoPTg1Mzk7ZS5vbmVmaXR0ZWQ9NjMxOTY7ZS5vbmVndWphcmF0aT0yNzkxO2Uub25lZ3VybXVraGk9MjY2MztlLm9uZWhhY2thcmFiaWM9MTYzMztlLm9uZWhhbGY9MTg5O2Uub25laGFuZ3pob3U9MTIzMjE7ZS5vbmVpZGVvZ3JhcGhpY3BhcmVuPTEyODMyO2Uub25laW5mZXJpb3I9ODMyMTtlLm9uZW1vbm9zcGFjZT02NTI5NztlLm9uZW51bWVyYXRvcmJlbmdhbGk9MjU0ODtlLm9uZW9sZHN0eWxlPTYzMjgxO2Uub25lcGFyZW49OTMzMjtlLm9uZXBlcmlvZD05MzUyO2Uub25lcGVyc2lhbj0xNzc3O2Uub25lcXVhcnRlcj0xODg7ZS5vbmVyb21hbj04NTYwO2Uub25lc3VwZXJpb3I9MTg1O2Uub25ldGhhaT0zNjY1O2Uub25ldGhpcmQ9ODUzMTtlLm9vZ29uZWs9NDkxO2Uub29nb25la21hY3Jvbj00OTM7ZS5vb2d1cm11a2hpPTI1Nzk7ZS5vb21hdHJhZ3VybXVraGk9MjYzNTtlLm9vcGVuPTU5NjtlLm9wYXJlbj05Mzg2O2Uub3BlbmJ1bGxldD05NzAyO2Uub3B0aW9uPTg5OTc7ZS5vcmRmZW1pbmluZT0xNzA7ZS5vcmRtYXNjdWxpbmU9MTg2O2Uub3J0aG9nb25hbD04NzM1O2Uub3Nob3J0ZGV2YT0yMzIyO2Uub3Nob3J0dm93ZWxzaWduZGV2YT0yMzc4O2Uub3NsYXNoPTI0ODtlLm9zbGFzaGFjdXRlPTUxMTtlLm9zbWFsbGhpcmFnYW5hPTEyMzYxO2Uub3NtYWxsa2F0YWthbmE9MTI0NTc7ZS5vc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NztlLm9zdHJva2VhY3V0ZT01MTE7ZS5vc3VwZXJpb3I9NjMyMTY7ZS5vdGN5cmlsbGljPTExNTE7ZS5vdGlsZGU9MjQ1O2Uub3RpbGRlYWN1dGU9Nzc1NztlLm90aWxkZWRpZXJlc2lzPTc3NTk7ZS5vdWJvcG9tb2ZvPTEyNTc3O2Uub3ZlcmxpbmU9ODI1NDtlLm92ZXJsaW5lY2VudGVybGluZT02NTA5ODtlLm92ZXJsaW5lY21iPTc3MztlLm92ZXJsaW5lZGFzaGVkPTY1MDk3O2Uub3ZlcmxpbmVkYmx3YXZ5PTY1MTAwO2Uub3ZlcmxpbmV3YXZ5PTY1MDk5O2Uub3ZlcnNjb3JlPTE3NTtlLm92b3dlbHNpZ25iZW5nYWxpPTI1MDc7ZS5vdm93ZWxzaWduZGV2YT0yMzc5O2Uub3Zvd2Vsc2lnbmd1amFyYXRpPTI3NjM7ZS5wPTExMjtlLnBhYW1wc3NxdWFyZT0xMzE4NDtlLnBhYXNlbnRvc3F1YXJlPTEzMDk5O2UucGFiZW5nYWxpPTI0NzQ7ZS5wYWN1dGU9Nzc2NTtlLnBhZGV2YT0yMzQ2O2UucGFnZWRvd249ODY3MTtlLnBhZ2V1cD04NjcwO2UucGFndWphcmF0aT0yNzMwO2UucGFndXJtdWtoaT0yNjAyO2UucGFoaXJhZ2FuYT0xMjQwMTtlLnBhaXlhbm5vaXRoYWk9MzYzMTtlLnBha2F0YWthbmE9MTI0OTc7ZS5wYWxhdGFsaXphdGlvbmN5cmlsbGljY21iPTExNTY7ZS5wYWxvY2hrYWN5cmlsbGljPTEyMTY7ZS5wYW5zaW9za29yZWFuPTEyNjcxO2UucGFyYWdyYXBoPTE4MjtlLnBhcmFsbGVsPTg3NDE7ZS5wYXJlbmxlZnQ9NDA7ZS5wYXJlbmxlZnRhbHRvbmVhcmFiaWM9NjQ4MzA7ZS5wYXJlbmxlZnRidD02MzcyNTtlLnBhcmVubGVmdGV4PTYzNzI0O2UucGFyZW5sZWZ0aW5mZXJpb3I9ODMzMztlLnBhcmVubGVmdG1vbm9zcGFjZT02NTI4ODtlLnBhcmVubGVmdHNtYWxsPTY1MTEzO2UucGFyZW5sZWZ0c3VwZXJpb3I9ODMxNztlLnBhcmVubGVmdHRwPTYzNzIzO2UucGFyZW5sZWZ0dmVydGljYWw9NjUwNzc7ZS5wYXJlbnJpZ2h0PTQxO2UucGFyZW5yaWdodGFsdG9uZWFyYWJpYz02NDgzMTtlLnBhcmVucmlnaHRidD02MzczNjtlLnBhcmVucmlnaHRleD02MzczNTtlLnBhcmVucmlnaHRpbmZlcmlvcj04MzM0O2UucGFyZW5yaWdodG1vbm9zcGFjZT02NTI4OTtlLnBhcmVucmlnaHRzbWFsbD02NTExNDtlLnBhcmVucmlnaHRzdXBlcmlvcj04MzE4O2UucGFyZW5yaWdodHRwPTYzNzM0O2UucGFyZW5yaWdodHZlcnRpY2FsPTY1MDc4O2UucGFydGlhbGRpZmY9ODcwNjtlLnBhc2VxaGVicmV3PTE0NzI7ZS5wYXNodGFoZWJyZXc9MTQzMztlLnBhc3F1YXJlPTEzMjI1O2UucGF0YWg9MTQ2MztlLnBhdGFoMTE9MTQ2MztlLnBhdGFoMWQ9MTQ2MztlLnBhdGFoMmE9MTQ2MztlLnBhdGFoaGVicmV3PTE0NjM7ZS5wYXRhaG5hcnJvd2hlYnJldz0xNDYzO2UucGF0YWhxdWFydGVyaGVicmV3PTE0NjM7ZS5wYXRhaHdpZGVoZWJyZXc9MTQ2MztlLnBhemVyaGVicmV3PTE0NDE7ZS5wYm9wb21vZm89MTI1NTA7ZS5wY2lyY2xlPTk0Mzk7ZS5wZG90YWNjZW50PTc3Njc7ZS5wZT0xNTA4O2UucGVjeXJpbGxpYz0xMDg3O2UucGVkYWdlc2g9NjQzMjQ7ZS5wZWRhZ2VzaGhlYnJldz02NDMyNDtlLnBlZXppc3F1YXJlPTEzMTE1O2UucGVmaW5hbGRhZ2VzaGhlYnJldz02NDMyMztlLnBlaGFyYWJpYz0xNjYyO2UucGVoYXJtZW5pYW49MTQwMjtlLnBlaGVicmV3PTE1MDg7ZS5wZWhmaW5hbGFyYWJpYz02NDM0MztlLnBlaGluaXRpYWxhcmFiaWM9NjQzNDQ7ZS5wZWhpcmFnYW5hPTEyNDEwO2UucGVobWVkaWFsYXJhYmljPTY0MzQ1O2UucGVrYXRha2FuYT0xMjUwNjtlLnBlbWlkZGxlaG9va2N5cmlsbGljPTExOTE7ZS5wZXJhZmVoZWJyZXc9NjQzMzQ7ZS5wZXJjZW50PTM3O2UucGVyY2VudGFyYWJpYz0xNjQyO2UucGVyY2VudG1vbm9zcGFjZT02NTI4NTtlLnBlcmNlbnRzbWFsbD02NTEzMDtlLnBlcmlvZD00NjtlLnBlcmlvZGFybWVuaWFuPTE0MTc7ZS5wZXJpb2RjZW50ZXJlZD0xODM7ZS5wZXJpb2RoYWxmd2lkdGg9NjUzNzc7ZS5wZXJpb2RpbmZlcmlvcj02MzIwNztlLnBlcmlvZG1vbm9zcGFjZT02NTI5NDtlLnBlcmlvZHNtYWxsPTY1MTA2O2UucGVyaW9kc3VwZXJpb3I9NjMyMDg7ZS5wZXJpc3BvbWVuaWdyZWVrY21iPTgzNDtlLnBlcnBlbmRpY3VsYXI9ODg2OTtlLnBlcnRob3VzYW5kPTgyNDA7ZS5wZXNldGE9ODM1OTtlLnBmc3F1YXJlPTEzMTk0O2UucGhhYmVuZ2FsaT0yNDc1O2UucGhhZGV2YT0yMzQ3O2UucGhhZ3VqYXJhdGk9MjczMTtlLnBoYWd1cm11a2hpPTI2MDM7ZS5waGk9OTY2O2UucGhpMT05ODE7ZS5waGlldXBoYWNpcmNsZWtvcmVhbj0xMjkyMjtlLnBoaWV1cGhhcGFyZW5rb3JlYW49MTI4MjY7ZS5waGlldXBoY2lyY2xla29yZWFuPTEyOTA4O2UucGhpZXVwaGtvcmVhbj0xMjYyMTtlLnBoaWV1cGhwYXJlbmtvcmVhbj0xMjgxMjtlLnBoaWxhdGluPTYzMjtlLnBoaW50aHV0aGFpPTM2NDI7ZS5waGlzeW1ib2xncmVlaz05ODE7ZS5waG9vaz00MjE7ZS5waG9waGFudGhhaT0zNjE0O2UucGhvcGh1bmd0aGFpPTM2MTI7ZS5waG9zYW1waGFvdGhhaT0zNjE2O2UucGk9OTYwO2UucGlldXBhY2lyY2xla29yZWFuPTEyOTE1O2UucGlldXBhcGFyZW5rb3JlYW49MTI4MTk7ZS5waWV1cGNpZXVja29yZWFuPTEyNjYyO2UucGlldXBjaXJjbGVrb3JlYW49MTI5MDE7ZS5waWV1cGtpeWVva2tvcmVhbj0xMjY1ODtlLnBpZXVwa29yZWFuPTEyNjEwO2UucGlldXBwYXJlbmtvcmVhbj0xMjgwNTtlLnBpZXVwc2lvc2tpeWVva2tvcmVhbj0xMjY2MDtlLnBpZXVwc2lvc2tvcmVhbj0xMjYxMjtlLnBpZXVwc2lvc3Rpa2V1dGtvcmVhbj0xMjY2MTtlLnBpZXVwdGhpZXV0aGtvcmVhbj0xMjY2MztlLnBpZXVwdGlrZXV0a29yZWFuPTEyNjU5O2UucGloaXJhZ2FuYT0xMjQwNDtlLnBpa2F0YWthbmE9MTI1MDA7ZS5waXN5bWJvbGdyZWVrPTk4MjtlLnBpd3Jhcm1lbmlhbj0xNDExO2UucGxhbmNrb3ZlcjJwaT04NDYzO2UucGxhbmNrb3ZlcjJwaTE9ODQ2MztlLnBsdXM9NDM7ZS5wbHVzYmVsb3djbWI9Nzk5O2UucGx1c2NpcmNsZT04ODUzO2UucGx1c21pbnVzPTE3NztlLnBsdXNtb2Q9NzI2O2UucGx1c21vbm9zcGFjZT02NTI5MTtlLnBsdXNzbWFsbD02NTEyMjtlLnBsdXNzdXBlcmlvcj04MzE0O2UucG1vbm9zcGFjZT02NTM2MDtlLnBtc3F1YXJlPTEzMjcyO2UucG9oaXJhZ2FuYT0xMjQxMztlLnBvaW50aW5naW5kZXhkb3dud2hpdGU9OTc1OTtlLnBvaW50aW5naW5kZXhsZWZ0d2hpdGU9OTc1NjtlLnBvaW50aW5naW5kZXhyaWdodHdoaXRlPTk3NTg7ZS5wb2ludGluZ2luZGV4dXB3aGl0ZT05NzU3O2UucG9rYXRha2FuYT0xMjUwOTtlLnBvcGxhdGhhaT0zNjExO2UucG9zdGFsbWFyaz0xMjMwNjtlLnBvc3RhbG1hcmtmYWNlPTEyMzIwO2UucHBhcmVuPTkzODc7ZS5wcmVjZWRlcz04ODI2O2UucHJlc2NyaXB0aW9uPTg0Nzg7ZS5wcmltZW1vZD02OTc7ZS5wcmltZXJldmVyc2VkPTgyNDU7ZS5wcm9kdWN0PTg3MTk7ZS5wcm9qZWN0aXZlPTg5NjU7ZS5wcm9sb25nZWRrYW5hPTEyNTQwO2UucHJvcGVsbG9yPTg5ODQ7ZS5wcm9wZXJzdWJzZXQ9ODgzNDtlLnByb3BlcnN1cGVyc2V0PTg4MzU7ZS5wcm9wb3J0aW9uPTg3NTk7ZS5wcm9wb3J0aW9uYWw9ODczMztlLnBzaT05Njg7ZS5wc2ljeXJpbGxpYz0xMTM3O2UucHNpbGlwbmV1bWF0YWN5cmlsbGljY21iPTExNTg7ZS5wc3NxdWFyZT0xMzIzMjtlLnB1aGlyYWdhbmE9MTI0MDc7ZS5wdWthdGFrYW5hPTEyNTAzO2UucHZzcXVhcmU9MTMyMzY7ZS5wd3NxdWFyZT0xMzI0MjtlLnE9MTEzO2UucWFkZXZhPTIzOTI7ZS5xYWRtYWhlYnJldz0xNDQ4O2UucWFmYXJhYmljPTE2MDI7ZS5xYWZmaW5hbGFyYWJpYz02NTIzODtlLnFhZmluaXRpYWxhcmFiaWM9NjUyMzk7ZS5xYWZtZWRpYWxhcmFiaWM9NjUyNDA7ZS5xYW1hdHM9MTQ2NDtlLnFhbWF0czEwPTE0NjQ7ZS5xYW1hdHMxYT0xNDY0O2UucWFtYXRzMWM9MTQ2NDtlLnFhbWF0czI3PTE0NjQ7ZS5xYW1hdHMyOT0xNDY0O2UucWFtYXRzMzM9MTQ2NDtlLnFhbWF0c2RlPTE0NjQ7ZS5xYW1hdHNoZWJyZXc9MTQ2NDtlLnFhbWF0c25hcnJvd2hlYnJldz0xNDY0O2UucWFtYXRzcWF0YW5oZWJyZXc9MTQ2NDtlLnFhbWF0c3FhdGFubmFycm93aGVicmV3PTE0NjQ7ZS5xYW1hdHNxYXRhbnF1YXJ0ZXJoZWJyZXc9MTQ2NDtlLnFhbWF0c3FhdGFud2lkZWhlYnJldz0xNDY0O2UucWFtYXRzcXVhcnRlcmhlYnJldz0xNDY0O2UucWFtYXRzd2lkZWhlYnJldz0xNDY0O2UucWFybmV5cGFyYWhlYnJldz0xNDM5O2UucWJvcG9tb2ZvPTEyNTYxO2UucWNpcmNsZT05NDQwO2UucWhvb2s9NjcyO2UucW1vbm9zcGFjZT02NTM2MTtlLnFvZj0xNTExO2UucW9mZGFnZXNoPTY0MzI3O2UucW9mZGFnZXNoaGVicmV3PTY0MzI3O2UucW9maGVicmV3PTE1MTE7ZS5xcGFyZW49OTM4ODtlLnF1YXJ0ZXJub3RlPTk4MzM7ZS5xdWJ1dHM9MTQ2NztlLnF1YnV0czE4PTE0Njc7ZS5xdWJ1dHMyNT0xNDY3O2UucXVidXRzMzE9MTQ2NztlLnF1YnV0c2hlYnJldz0xNDY3O2UucXVidXRzbmFycm93aGVicmV3PTE0Njc7ZS5xdWJ1dHNxdWFydGVyaGVicmV3PTE0Njc7ZS5xdWJ1dHN3aWRlaGVicmV3PTE0Njc7ZS5xdWVzdGlvbj02MztlLnF1ZXN0aW9uYXJhYmljPTE1Njc7ZS5xdWVzdGlvbmFybWVuaWFuPTEzNzQ7ZS5xdWVzdGlvbmRvd249MTkxO2UucXVlc3Rpb25kb3duc21hbGw9NjM0MjM7ZS5xdWVzdGlvbmdyZWVrPTg5NDtlLnF1ZXN0aW9ubW9ub3NwYWNlPTY1MzExO2UucXVlc3Rpb25zbWFsbD02MzI5NTtlLnF1b3RlZGJsPTM0O2UucXVvdGVkYmxiYXNlPTgyMjI7ZS5xdW90ZWRibGxlZnQ9ODIyMDtlLnF1b3RlZGJsbW9ub3NwYWNlPTY1MjgyO2UucXVvdGVkYmxwcmltZT0xMjMxODtlLnF1b3RlZGJscHJpbWVyZXZlcnNlZD0xMjMxNztlLnF1b3RlZGJscmlnaHQ9ODIyMTtlLnF1b3RlbGVmdD04MjE2O2UucXVvdGVsZWZ0cmV2ZXJzZWQ9ODIxOTtlLnF1b3RlcmV2ZXJzZWQ9ODIxOTtlLnF1b3RlcmlnaHQ9ODIxNztlLnF1b3RlcmlnaHRuPTMyOTtlLnF1b3Rlc2luZ2xiYXNlPTgyMTg7ZS5xdW90ZXNpbmdsZT0zOTtlLnF1b3Rlc2luZ2xlbW9ub3NwYWNlPTY1Mjg3O2Uucj0xMTQ7ZS5yYWFybWVuaWFuPTE0MDQ7ZS5yYWJlbmdhbGk9MjQ4MDtlLnJhY3V0ZT0zNDE7ZS5yYWRldmE9MjM1MjtlLnJhZGljYWw9ODczMDtlLnJhZGljYWxleD02MzcxNztlLnJhZG92ZXJzc3F1YXJlPTEzMjMwO2UucmFkb3ZlcnNzcXVhcmVkc3F1YXJlPTEzMjMxO2UucmFkc3F1YXJlPTEzMjI5O2UucmFmZT0xNDcxO2UucmFmZWhlYnJldz0xNDcxO2UucmFndWphcmF0aT0yNzM2O2UucmFndXJtdWtoaT0yNjA4O2UucmFoaXJhZ2FuYT0xMjQyNTtlLnJha2F0YWthbmE9MTI1MjE7ZS5yYWthdGFrYW5haGFsZndpZHRoPTY1NDMxO2UucmFsb3dlcmRpYWdvbmFsYmVuZ2FsaT0yNTQ1O2UucmFtaWRkbGVkaWFnb25hbGJlbmdhbGk9MjU0NDtlLnJhbXNob3JuPTYxMjtlLnJhdGlvPTg3NTg7ZS5yYm9wb21vZm89MTI1NjY7ZS5yY2Fyb249MzQ1O2UucmNlZGlsbGE9MzQzO2UucmNpcmNsZT05NDQxO2UucmNvbW1hYWNjZW50PTM0MztlLnJkYmxncmF2ZT01Mjk7ZS5yZG90YWNjZW50PTc3Njk7ZS5yZG90YmVsb3c9Nzc3MTtlLnJkb3RiZWxvd21hY3Jvbj03NzczO2UucmVmZXJlbmNlbWFyaz04MjUxO2UucmVmbGV4c3Vic2V0PTg4Mzg7ZS5yZWZsZXhzdXBlcnNldD04ODM5O2UucmVnaXN0ZXJlZD0xNzQ7ZS5yZWdpc3RlcnNhbnM9NjM3MjA7ZS5yZWdpc3RlcnNlcmlmPTYzMTk0O2UucmVoYXJhYmljPTE1ODU7ZS5yZWhhcm1lbmlhbj0xNDA4O2UucmVoZmluYWxhcmFiaWM9NjUxOTg7ZS5yZWhpcmFnYW5hPTEyNDI4O2UucmVrYXRha2FuYT0xMjUyNDtlLnJla2F0YWthbmFoYWxmd2lkdGg9NjU0MzQ7ZS5yZXNoPTE1MTI7ZS5yZXNoZGFnZXNoaGVicmV3PTY0MzI4O2UucmVzaGhlYnJldz0xNTEyO2UucmV2ZXJzZWR0aWxkZT04NzY1O2UucmV2aWFoZWJyZXc9MTQzMTtlLnJldmlhbXVncmFzaGhlYnJldz0xNDMxO2UucmV2bG9naWNhbG5vdD04OTc2O2UucmZpc2hob29rPTYzODtlLnJmaXNoaG9va3JldmVyc2VkPTYzOTtlLnJoYWJlbmdhbGk9MjUyNTtlLnJoYWRldmE9MjM5NztlLnJobz05NjE7ZS5yaG9vaz02Mzc7ZS5yaG9va3R1cm5lZD02MzU7ZS5yaG9va3R1cm5lZHN1cGVyaW9yPTY5MztlLnJob3N5bWJvbGdyZWVrPTEwMDk7ZS5yaG90aWNob29rbW9kPTczNDtlLnJpZXVsYWNpcmNsZWtvcmVhbj0xMjkxMztlLnJpZXVsYXBhcmVua29yZWFuPTEyODE3O2UucmlldWxjaXJjbGVrb3JlYW49MTI4OTk7ZS5yaWV1bGhpZXVoa29yZWFuPTEyNjA4O2UucmlldWxraXllb2trb3JlYW49MTI2MDI7ZS5yaWV1bGtpeWVva3Npb3Nrb3JlYW49MTI2NDk7ZS5yaWV1bGtvcmVhbj0xMjYwMTtlLnJpZXVsbWlldW1rb3JlYW49MTI2MDM7ZS5yaWV1bHBhbnNpb3Nrb3JlYW49MTI2NTI7ZS5yaWV1bHBhcmVua29yZWFuPTEyODAzO2UucmlldWxwaGlldXBoa29yZWFuPTEyNjA3O2UucmlldWxwaWV1cGtvcmVhbj0xMjYwNDtlLnJpZXVscGlldXBzaW9za29yZWFuPTEyNjUxO2UucmlldWxzaW9za29yZWFuPTEyNjA1O2UucmlldWx0aGlldXRoa29yZWFuPTEyNjA2O2UucmlldWx0aWtldXRrb3JlYW49MTI2NTA7ZS5yaWV1bHllb3JpbmhpZXVoa29yZWFuPTEyNjUzO2UucmlnaHRhbmdsZT04NzM1O2UucmlnaHR0YWNrYmVsb3djbWI9NzkzO2UucmlnaHR0cmlhbmdsZT04ODk1O2UucmloaXJhZ2FuYT0xMjQyNjtlLnJpa2F0YWthbmE9MTI1MjI7ZS5yaWthdGFrYW5haGFsZndpZHRoPTY1NDMyO2UucmluZz03MzA7ZS5yaW5nYmVsb3djbWI9ODA1O2UucmluZ2NtYj03Nzg7ZS5yaW5naGFsZmxlZnQ9NzAzO2UucmluZ2hhbGZsZWZ0YXJtZW5pYW49MTM2OTtlLnJpbmdoYWxmbGVmdGJlbG93Y21iPTc5NjtlLnJpbmdoYWxmbGVmdGNlbnRlcmVkPTcyMztlLnJpbmdoYWxmcmlnaHQ9NzAyO2UucmluZ2hhbGZyaWdodGJlbG93Y21iPTgyNTtlLnJpbmdoYWxmcmlnaHRjZW50ZXJlZD03MjI7ZS5yaW52ZXJ0ZWRicmV2ZT01MzE7ZS5yaXR0b3J1c3F1YXJlPTEzMTM3O2UucmxpbmViZWxvdz03Nzc1O2UucmxvbmdsZWc9NjM2O2UucmxvbmdsZWd0dXJuZWQ9NjM0O2Uucm1vbm9zcGFjZT02NTM2MjtlLnJvaGlyYWdhbmE9MTI0Mjk7ZS5yb2thdGFrYW5hPTEyNTI1O2Uucm9rYXRha2FuYWhhbGZ3aWR0aD02NTQzNTtlLnJvcnVhdGhhaT0zNjE5O2UucnBhcmVuPTkzODk7ZS5ycmFiZW5nYWxpPTI1MjQ7ZS5ycmFkZXZhPTIzNTM7ZS5ycmFndXJtdWtoaT0yNjUyO2UucnJlaGFyYWJpYz0xNjgxO2UucnJlaGZpbmFsYXJhYmljPTY0Mzk3O2UucnJ2b2NhbGljYmVuZ2FsaT0yNTI4O2UucnJ2b2NhbGljZGV2YT0yNDAwO2UucnJ2b2NhbGljZ3VqYXJhdGk9Mjc4NDtlLnJydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjUwMDtlLnJydm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjM3MjtlLnJydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpPTI3NTY7ZS5yc3VwZXJpb3I9NjMyMTc7ZS5ydGJsb2NrPTk2MTY7ZS5ydHVybmVkPTYzMztlLnJ0dXJuZWRzdXBlcmlvcj02OTI7ZS5ydWhpcmFnYW5hPTEyNDI3O2UucnVrYXRha2FuYT0xMjUyMztlLnJ1a2F0YWthbmFoYWxmd2lkdGg9NjU0MzM7ZS5ydXBlZW1hcmtiZW5nYWxpPTI1NDY7ZS5ydXBlZXNpZ25iZW5nYWxpPTI1NDc7ZS5ydXBpYWg9NjMxOTc7ZS5ydXRoYWk9MzYyMDtlLnJ2b2NhbGljYmVuZ2FsaT0yNDQzO2UucnZvY2FsaWNkZXZhPTIzMTU7ZS5ydm9jYWxpY2d1amFyYXRpPTI2OTk7ZS5ydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjQ5OTtlLnJ2b2NhbGljdm93ZWxzaWduZGV2YT0yMzcxO2UucnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aT0yNzU1O2Uucz0xMTU7ZS5zYWJlbmdhbGk9MjQ4ODtlLnNhY3V0ZT0zNDc7ZS5zYWN1dGVkb3RhY2NlbnQ9Nzc4MTtlLnNhZGFyYWJpYz0xNTg5O2Uuc2FkZXZhPTIzNjA7ZS5zYWRmaW5hbGFyYWJpYz02NTIxMDtlLnNhZGluaXRpYWxhcmFiaWM9NjUyMTE7ZS5zYWRtZWRpYWxhcmFiaWM9NjUyMTI7ZS5zYWd1amFyYXRpPTI3NDQ7ZS5zYWd1cm11a2hpPTI2MTY7ZS5zYWhpcmFnYW5hPTEyMzczO2Uuc2FrYXRha2FuYT0xMjQ2OTtlLnNha2F0YWthbmFoYWxmd2lkdGg9NjU0MDM7ZS5zYWxsYWxsYWhvdWFsYXloZXdhc2FsbGFtYXJhYmljPTY1MDE4O2Uuc2FtZWtoPTE1MDU7ZS5zYW1la2hkYWdlc2g9NjQzMjE7ZS5zYW1la2hkYWdlc2hoZWJyZXc9NjQzMjE7ZS5zYW1la2hoZWJyZXc9MTUwNTtlLnNhcmFhYXRoYWk9MzYzNDtlLnNhcmFhZXRoYWk9MzY0OTtlLnNhcmFhaW1haW1hbGFpdGhhaT0zNjUyO2Uuc2FyYWFpbWFpbXVhbnRoYWk9MzY1MTtlLnNhcmFhbXRoYWk9MzYzNTtlLnNhcmFhdGhhaT0zNjMyO2Uuc2FyYWV0aGFpPTM2NDg7ZS5zYXJhaWlsZWZ0dGhhaT02MzYyMjtlLnNhcmFpaXRoYWk9MzYzNztlLnNhcmFpbGVmdHRoYWk9NjM2MjE7ZS5zYXJhaXRoYWk9MzYzNjtlLnNhcmFvdGhhaT0zNjUwO2Uuc2FyYXVlZWxlZnR0aGFpPTYzNjI0O2Uuc2FyYXVlZXRoYWk9MzYzOTtlLnNhcmF1ZWxlZnR0aGFpPTYzNjIzO2Uuc2FyYXVldGhhaT0zNjM4O2Uuc2FyYXV0aGFpPTM2NDA7ZS5zYXJhdXV0aGFpPTM2NDE7ZS5zYm9wb21vZm89MTI1Njk7ZS5zY2Fyb249MzUzO2Uuc2Nhcm9uZG90YWNjZW50PTc3ODM7ZS5zY2VkaWxsYT0zNTE7ZS5zY2h3YT02MDE7ZS5zY2h3YWN5cmlsbGljPTEyNDE7ZS5zY2h3YWRpZXJlc2lzY3lyaWxsaWM9MTI0MztlLnNjaHdhaG9vaz02MDI7ZS5zY2lyY2xlPTk0NDI7ZS5zY2lyY3VtZmxleD0zNDk7ZS5zY29tbWFhY2NlbnQ9NTM3O2Uuc2RvdGFjY2VudD03Nzc3O2Uuc2RvdGJlbG93PTc3Nzk7ZS5zZG90YmVsb3dkb3RhY2NlbnQ9Nzc4NTtlLnNlYWd1bGxiZWxvd2NtYj04Mjg7ZS5zZWNvbmQ9ODI0MztlLnNlY29uZHRvbmVjaGluZXNlPTcxNDtlLnNlY3Rpb249MTY3O2Uuc2VlbmFyYWJpYz0xNTg3O2Uuc2VlbmZpbmFsYXJhYmljPTY1MjAyO2Uuc2VlbmluaXRpYWxhcmFiaWM9NjUyMDM7ZS5zZWVubWVkaWFsYXJhYmljPTY1MjA0O2Uuc2Vnb2w9MTQ2MjtlLnNlZ29sMTM9MTQ2MjtlLnNlZ29sMWY9MTQ2MjtlLnNlZ29sMmM9MTQ2MjtlLnNlZ29saGVicmV3PTE0NjI7ZS5zZWdvbG5hcnJvd2hlYnJldz0xNDYyO2Uuc2Vnb2xxdWFydGVyaGVicmV3PTE0NjI7ZS5zZWdvbHRhaGVicmV3PTE0MjY7ZS5zZWdvbHdpZGVoZWJyZXc9MTQ2MjtlLnNlaGFybWVuaWFuPTE0MDU7ZS5zZWhpcmFnYW5hPTEyMzc5O2Uuc2VrYXRha2FuYT0xMjQ3NTtlLnNla2F0YWthbmFoYWxmd2lkdGg9NjU0MDY7ZS5zZW1pY29sb249NTk7ZS5zZW1pY29sb25hcmFiaWM9MTU2MztlLnNlbWljb2xvbm1vbm9zcGFjZT02NTMwNztlLnNlbWljb2xvbnNtYWxsPTY1MTA4O2Uuc2VtaXZvaWNlZG1hcmtrYW5hPTEyNDQ0O2Uuc2VtaXZvaWNlZG1hcmtrYW5haGFsZndpZHRoPTY1NDM5O2Uuc2VudGlzcXVhcmU9MTMwOTA7ZS5zZW50b3NxdWFyZT0xMzA5MTtlLnNldmVuPTU1O2Uuc2V2ZW5hcmFiaWM9MTYzOTtlLnNldmVuYmVuZ2FsaT0yNTQxO2Uuc2V2ZW5jaXJjbGU9OTMxODtlLnNldmVuY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyODtlLnNldmVuZGV2YT0yNDEzO2Uuc2V2ZW5laWdodGhzPTg1NDI7ZS5zZXZlbmd1amFyYXRpPTI3OTc7ZS5zZXZlbmd1cm11a2hpPTI2Njk7ZS5zZXZlbmhhY2thcmFiaWM9MTYzOTtlLnNldmVuaGFuZ3pob3U9MTIzMjc7ZS5zZXZlbmlkZW9ncmFwaGljcGFyZW49MTI4Mzg7ZS5zZXZlbmluZmVyaW9yPTgzMjc7ZS5zZXZlbm1vbm9zcGFjZT02NTMwMztlLnNldmVub2xkc3R5bGU9NjMyODc7ZS5zZXZlbnBhcmVuPTkzMzg7ZS5zZXZlbnBlcmlvZD05MzU4O2Uuc2V2ZW5wZXJzaWFuPTE3ODM7ZS5zZXZlbnJvbWFuPTg1NjY7ZS5zZXZlbnN1cGVyaW9yPTgzMTE7ZS5zZXZlbnRlZW5jaXJjbGU9OTMyODtlLnNldmVudGVlbnBhcmVuPTkzNDg7ZS5zZXZlbnRlZW5wZXJpb2Q9OTM2ODtlLnNldmVudGhhaT0zNjcxO2Uuc2Z0aHlwaGVuPTE3MztlLnNoYWFybWVuaWFuPTEzOTk7ZS5zaGFiZW5nYWxpPTI0ODY7ZS5zaGFjeXJpbGxpYz0xMDk2O2Uuc2hhZGRhYXJhYmljPTE2MTc7ZS5zaGFkZGFkYW1tYWFyYWJpYz02NDYwOTtlLnNoYWRkYWRhbW1hdGFuYXJhYmljPTY0NjA2O2Uuc2hhZGRhZmF0aGFhcmFiaWM9NjQ2MDg7ZS5zaGFkZGFrYXNyYWFyYWJpYz02NDYxMDtlLnNoYWRkYWthc3JhdGFuYXJhYmljPTY0NjA3O2Uuc2hhZGU9OTYxODtlLnNoYWRlZGFyaz05NjE5O2Uuc2hhZGVsaWdodD05NjE3O2Uuc2hhZGVtZWRpdW09OTYxODtlLnNoYWRldmE9MjM1ODtlLnNoYWd1amFyYXRpPTI3NDI7ZS5zaGFndXJtdWtoaT0yNjE0O2Uuc2hhbHNoZWxldGhlYnJldz0xNDI3O2Uuc2hib3BvbW9mbz0xMjU2NTtlLnNoY2hhY3lyaWxsaWM9MTA5NztlLnNoZWVuYXJhYmljPTE1ODg7ZS5zaGVlbmZpbmFsYXJhYmljPTY1MjA2O2Uuc2hlZW5pbml0aWFsYXJhYmljPTY1MjA3O2Uuc2hlZW5tZWRpYWxhcmFiaWM9NjUyMDg7ZS5zaGVpY29wdGljPTk5NTtlLnNoZXFlbD04MzYyO2Uuc2hlcWVsaGVicmV3PTgzNjI7ZS5zaGV2YT0xNDU2O2Uuc2hldmExMTU9MTQ1NjtlLnNoZXZhMTU9MTQ1NjtlLnNoZXZhMjI9MTQ1NjtlLnNoZXZhMmU9MTQ1NjtlLnNoZXZhaGVicmV3PTE0NTY7ZS5zaGV2YW5hcnJvd2hlYnJldz0xNDU2O2Uuc2hldmFxdWFydGVyaGVicmV3PTE0NTY7ZS5zaGV2YXdpZGVoZWJyZXc9MTQ1NjtlLnNoaGFjeXJpbGxpYz0xMjExO2Uuc2hpbWFjb3B0aWM9MTAwNTtlLnNoaW49MTUxMztlLnNoaW5kYWdlc2g9NjQzMjk7ZS5zaGluZGFnZXNoaGVicmV3PTY0MzI5O2Uuc2hpbmRhZ2VzaHNoaW5kb3Q9NjQzMDA7ZS5zaGluZGFnZXNoc2hpbmRvdGhlYnJldz02NDMwMDtlLnNoaW5kYWdlc2hzaW5kb3Q9NjQzMDE7ZS5zaGluZGFnZXNoc2luZG90aGVicmV3PTY0MzAxO2Uuc2hpbmRvdGhlYnJldz0xNDczO2Uuc2hpbmhlYnJldz0xNTEzO2Uuc2hpbnNoaW5kb3Q9NjQyOTg7ZS5zaGluc2hpbmRvdGhlYnJldz02NDI5ODtlLnNoaW5zaW5kb3Q9NjQyOTk7ZS5zaGluc2luZG90aGVicmV3PTY0Mjk5O2Uuc2hvb2s9NjQyO2Uuc2lnbWE9OTYzO2Uuc2lnbWExPTk2MjtlLnNpZ21hZmluYWw9OTYyO2Uuc2lnbWFsdW5hdGVzeW1ib2xncmVlaz0xMDEwO2Uuc2loaXJhZ2FuYT0xMjM3NTtlLnNpa2F0YWthbmE9MTI0NzE7ZS5zaWthdGFrYW5haGFsZndpZHRoPTY1NDA0O2Uuc2lsdXFoZWJyZXc9MTQ2OTtlLnNpbHVxbGVmdGhlYnJldz0xNDY5O2Uuc2ltaWxhcj04NzY0O2Uuc2luZG90aGVicmV3PTE0NzQ7ZS5zaW9zYWNpcmNsZWtvcmVhbj0xMjkxNjtlLnNpb3NhcGFyZW5rb3JlYW49MTI4MjA7ZS5zaW9zY2lldWNrb3JlYW49MTI2NzA7ZS5zaW9zY2lyY2xla29yZWFuPTEyOTAyO2Uuc2lvc2tpeWVva2tvcmVhbj0xMjY2NjtlLnNpb3Nrb3JlYW49MTI2MTM7ZS5zaW9zbmlldW5rb3JlYW49MTI2Njc7ZS5zaW9zcGFyZW5rb3JlYW49MTI4MDY7ZS5zaW9zcGlldXBrb3JlYW49MTI2Njk7ZS5zaW9zdGlrZXV0a29yZWFuPTEyNjY4O2Uuc2l4PTU0O2Uuc2l4YXJhYmljPTE2Mzg7ZS5zaXhiZW5nYWxpPTI1NDA7ZS5zaXhjaXJjbGU9OTMxNztlLnNpeGNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjc7ZS5zaXhkZXZhPTI0MTI7ZS5zaXhndWphcmF0aT0yNzk2O2Uuc2l4Z3VybXVraGk9MjY2ODtlLnNpeGhhY2thcmFiaWM9MTYzODtlLnNpeGhhbmd6aG91PTEyMzI2O2Uuc2l4aWRlb2dyYXBoaWNwYXJlbj0xMjgzNztlLnNpeGluZmVyaW9yPTgzMjY7ZS5zaXhtb25vc3BhY2U9NjUzMDI7ZS5zaXhvbGRzdHlsZT02MzI4NjtlLnNpeHBhcmVuPTkzMzc7ZS5zaXhwZXJpb2Q9OTM1NztlLnNpeHBlcnNpYW49MTc4MjtlLnNpeHJvbWFuPTg1NjU7ZS5zaXhzdXBlcmlvcj04MzEwO2Uuc2l4dGVlbmNpcmNsZT05MzI3O2Uuc2l4dGVlbmN1cnJlbmN5ZGVub21pbmF0b3JiZW5nYWxpPTI1NTM7ZS5zaXh0ZWVucGFyZW49OTM0NztlLnNpeHRlZW5wZXJpb2Q9OTM2NztlLnNpeHRoYWk9MzY3MDtlLnNsYXNoPTQ3O2Uuc2xhc2htb25vc3BhY2U9NjUyOTU7ZS5zbG9uZz0zODM7ZS5zbG9uZ2RvdGFjY2VudD03ODM1O2Uuc21pbGVmYWNlPTk3ODY7ZS5zbW9ub3NwYWNlPTY1MzYzO2Uuc29mcGFzdXFoZWJyZXc9MTQ3NTtlLnNvZnRoeXBoZW49MTczO2Uuc29mdHNpZ25jeXJpbGxpYz0xMTAwO2Uuc29oaXJhZ2FuYT0xMjM4MTtlLnNva2F0YWthbmE9MTI0Nzc7ZS5zb2thdGFrYW5haGFsZndpZHRoPTY1NDA3O2Uuc29saWR1c2xvbmdvdmVybGF5Y21iPTgyNDtlLnNvbGlkdXNzaG9ydG92ZXJsYXljbWI9ODIzO2Uuc29ydXNpdGhhaT0zNjI1O2Uuc29zYWxhdGhhaT0zNjI0O2Uuc29zb3RoYWk9MzU5NTtlLnNvc3VhdGhhaT0zNjI2O2Uuc3BhY2U9MzI7ZS5zcGFjZWhhY2thcmFiaWM9MzI7ZS5zcGFkZT05ODI0O2Uuc3BhZGVzdWl0YmxhY2s9OTgyNDtlLnNwYWRlc3VpdHdoaXRlPTk4Mjg7ZS5zcGFyZW49OTM5MDtlLnNxdWFyZWJlbG93Y21iPTgyNztlLnNxdWFyZWNjPTEzMjUyO2Uuc3F1YXJlY209MTMyMTM7ZS5zcXVhcmVkaWFnb25hbGNyb3NzaGF0Y2hmaWxsPTk2NDE7ZS5zcXVhcmVob3Jpem9udGFsZmlsbD05NjM2O2Uuc3F1YXJla2c9MTMxOTk7ZS5zcXVhcmVrbT0xMzIxNDtlLnNxdWFyZWttY2FwaXRhbD0xMzI2MjtlLnNxdWFyZWxuPTEzMjY1O2Uuc3F1YXJlbG9nPTEzMjY2O2Uuc3F1YXJlbWc9MTMxOTg7ZS5zcXVhcmVtaWw9MTMyNjk7ZS5zcXVhcmVtbT0xMzIxMjtlLnNxdWFyZW1zcXVhcmVkPTEzMjE3O2Uuc3F1YXJlb3J0aG9nb25hbGNyb3NzaGF0Y2hmaWxsPTk2Mzg7ZS5zcXVhcmV1cHBlcmxlZnR0b2xvd2VycmlnaHRmaWxsPTk2Mzk7ZS5zcXVhcmV1cHBlcnJpZ2h0dG9sb3dlcmxlZnRmaWxsPTk2NDA7ZS5zcXVhcmV2ZXJ0aWNhbGZpbGw9OTYzNztlLnNxdWFyZXdoaXRld2l0aHNtYWxsYmxhY2s9OTYzNTtlLnNyc3F1YXJlPTEzMjc1O2Uuc3NhYmVuZ2FsaT0yNDg3O2Uuc3NhZGV2YT0yMzU5O2Uuc3NhZ3VqYXJhdGk9Mjc0MztlLnNzYW5nY2lldWNrb3JlYW49MTI2MTc7ZS5zc2FuZ2hpZXVoa29yZWFuPTEyNjc3O2Uuc3NhbmdpZXVuZ2tvcmVhbj0xMjY3MjtlLnNzYW5na2l5ZW9ra29yZWFuPTEyNTk0O2Uuc3NhbmduaWV1bmtvcmVhbj0xMjY0NTtlLnNzYW5ncGlldXBrb3JlYW49MTI2MTE7ZS5zc2FuZ3Npb3Nrb3JlYW49MTI2MTQ7ZS5zc2FuZ3Rpa2V1dGtvcmVhbj0xMjYwMDtlLnNzdXBlcmlvcj02MzIxODtlLnN0ZXJsaW5nPTE2MztlLnN0ZXJsaW5nbW9ub3NwYWNlPTY1NTA1O2Uuc3Ryb2tlbG9uZ292ZXJsYXljbWI9ODIyO2Uuc3Ryb2tlc2hvcnRvdmVybGF5Y21iPTgyMTtlLnN1YnNldD04ODM0O2Uuc3Vic2V0bm90ZXF1YWw9ODg0MjtlLnN1YnNldG9yZXF1YWw9ODgzODtlLnN1Y2NlZWRzPTg4Mjc7ZS5zdWNodGhhdD04NzE1O2Uuc3VoaXJhZ2FuYT0xMjM3NztlLnN1a2F0YWthbmE9MTI0NzM7ZS5zdWthdGFrYW5haGFsZndpZHRoPTY1NDA1O2Uuc3VrdW5hcmFiaWM9MTYxODtlLnN1bW1hdGlvbj04NzIxO2Uuc3VuPTk3ODg7ZS5zdXBlcnNldD04ODM1O2Uuc3VwZXJzZXRub3RlcXVhbD04ODQzO2Uuc3VwZXJzZXRvcmVxdWFsPTg4Mzk7ZS5zdnNxdWFyZT0xMzI3NjtlLnN5b3V3YWVyYXNxdWFyZT0xMzE4MDtlLnQ9MTE2O2UudGFiZW5nYWxpPTI0Njg7ZS50YWNrZG93bj04ODY4O2UudGFja2xlZnQ9ODg2NztlLnRhZGV2YT0yMzQwO2UudGFndWphcmF0aT0yNzI0O2UudGFndXJtdWtoaT0yNTk2O2UudGFoYXJhYmljPTE1OTE7ZS50YWhmaW5hbGFyYWJpYz02NTIxODtlLnRhaGluaXRpYWxhcmFiaWM9NjUyMTk7ZS50YWhpcmFnYW5hPTEyMzgzO2UudGFobWVkaWFsYXJhYmljPTY1MjIwO2UudGFpc3lvdWVyYXNxdWFyZT0xMzE4MTtlLnRha2F0YWthbmE9MTI0Nzk7ZS50YWthdGFrYW5haGFsZndpZHRoPTY1NDA4O2UudGF0d2VlbGFyYWJpYz0xNjAwO2UudGF1PTk2NDtlLnRhdj0xNTE0O2UudGF2ZGFnZXM9NjQzMzA7ZS50YXZkYWdlc2g9NjQzMzA7ZS50YXZkYWdlc2hoZWJyZXc9NjQzMzA7ZS50YXZoZWJyZXc9MTUxNDtlLnRiYXI9MzU5O2UudGJvcG9tb2ZvPTEyNTU0O2UudGNhcm9uPTM1NztlLnRjY3VybD02ODA7ZS50Y2VkaWxsYT0zNTU7ZS50Y2hlaGFyYWJpYz0xNjcwO2UudGNoZWhmaW5hbGFyYWJpYz02NDM3OTtlLnRjaGVoaW5pdGlhbGFyYWJpYz02NDM4MDtlLnRjaGVobWVkaWFsYXJhYmljPTY0MzgxO2UudGNpcmNsZT05NDQzO2UudGNpcmN1bWZsZXhiZWxvdz03NzkzO2UudGNvbW1hYWNjZW50PTM1NTtlLnRkaWVyZXNpcz03ODMxO2UudGRvdGFjY2VudD03Nzg3O2UudGRvdGJlbG93PTc3ODk7ZS50ZWN5cmlsbGljPTEwOTA7ZS50ZWRlc2NlbmRlcmN5cmlsbGljPTExOTc7ZS50ZWhhcmFiaWM9MTU3ODtlLnRlaGZpbmFsYXJhYmljPTY1MTc0O2UudGVoaGFoaW5pdGlhbGFyYWJpYz02NDY3NDtlLnRlaGhhaGlzb2xhdGVkYXJhYmljPTY0NTI0O2UudGVoaW5pdGlhbGFyYWJpYz02NTE3NTtlLnRlaGlyYWdhbmE9MTIzOTA7ZS50ZWhqZWVtaW5pdGlhbGFyYWJpYz02NDY3MztlLnRlaGplZW1pc29sYXRlZGFyYWJpYz02NDUyMztlLnRlaG1hcmJ1dGFhcmFiaWM9MTU3NztlLnRlaG1hcmJ1dGFmaW5hbGFyYWJpYz02NTE3MjtlLnRlaG1lZGlhbGFyYWJpYz02NTE3NjtlLnRlaG1lZW1pbml0aWFsYXJhYmljPTY0Njc2O2UudGVobWVlbWlzb2xhdGVkYXJhYmljPTY0NTI2O2UudGVobm9vbmZpbmFsYXJhYmljPTY0NjI3O2UudGVrYXRha2FuYT0xMjQ4NjtlLnRla2F0YWthbmFoYWxmd2lkdGg9NjU0MTE7ZS50ZWxlcGhvbmU9ODQ4MTtlLnRlbGVwaG9uZWJsYWNrPTk3NDI7ZS50ZWxpc2hhZ2Vkb2xhaGVicmV3PTE0NDA7ZS50ZWxpc2hhcWV0YW5haGVicmV3PTE0NDk7ZS50ZW5jaXJjbGU9OTMyMTtlLnRlbmlkZW9ncmFwaGljcGFyZW49MTI4NDE7ZS50ZW5wYXJlbj05MzQxO2UudGVucGVyaW9kPTkzNjE7ZS50ZW5yb21hbj04NTY5O2UudGVzaD02Nzk7ZS50ZXQ9MTQ5NjtlLnRldGRhZ2VzaD02NDMxMjtlLnRldGRhZ2VzaGhlYnJldz02NDMxMjtlLnRldGhlYnJldz0xNDk2O2UudGV0c2VjeXJpbGxpYz0xMjA1O2UudGV2aXJoZWJyZXc9MTQzNTtlLnRldmlybGVmdGhlYnJldz0xNDM1O2UudGhhYmVuZ2FsaT0yNDY5O2UudGhhZGV2YT0yMzQxO2UudGhhZ3VqYXJhdGk9MjcyNTtlLnRoYWd1cm11a2hpPTI1OTc7ZS50aGFsYXJhYmljPTE1ODQ7ZS50aGFsZmluYWxhcmFiaWM9NjUxOTY7ZS50aGFudGhha2hhdGxvd2xlZnR0aGFpPTYzNjQwO2UudGhhbnRoYWtoYXRsb3dyaWdodHRoYWk9NjM2Mzk7ZS50aGFudGhha2hhdHRoYWk9MzY2MDtlLnRoYW50aGFraGF0dXBwZXJsZWZ0dGhhaT02MzYzODtlLnRoZWhhcmFiaWM9MTU3OTtlLnRoZWhmaW5hbGFyYWJpYz02NTE3ODtlLnRoZWhpbml0aWFsYXJhYmljPTY1MTc5O2UudGhlaG1lZGlhbGFyYWJpYz02NTE4MDtlLnRoZXJlZXhpc3RzPTg3MDc7ZS50aGVyZWZvcmU9ODc1NjtlLnRoZXRhPTk1MjtlLnRoZXRhMT05Nzc7ZS50aGV0YXN5bWJvbGdyZWVrPTk3NztlLnRoaWV1dGhhY2lyY2xla29yZWFuPTEyOTIxO2UudGhpZXV0aGFwYXJlbmtvcmVhbj0xMjgyNTtlLnRoaWV1dGhjaXJjbGVrb3JlYW49MTI5MDc7ZS50aGlldXRoa29yZWFuPTEyNjIwO2UudGhpZXV0aHBhcmVua29yZWFuPTEyODExO2UudGhpcnRlZW5jaXJjbGU9OTMyNDtlLnRoaXJ0ZWVucGFyZW49OTM0NDtlLnRoaXJ0ZWVucGVyaW9kPTkzNjQ7ZS50aG9uYW5nbW9udGhvdGhhaT0zNjAxO2UudGhvb2s9NDI5O2UudGhvcGh1dGhhb3RoYWk9MzYwMjtlLnRob3JuPTI1NDtlLnRob3RoYWhhbnRoYWk9MzYwNztlLnRob3RoYW50aGFpPTM2MDA7ZS50aG90aG9uZ3RoYWk9MzYwODtlLnRob3RodW5ndGhhaT0zNjA2O2UudGhvdXNhbmRjeXJpbGxpYz0xMTU0O2UudGhvdXNhbmRzc2VwYXJhdG9yYXJhYmljPTE2NDQ7ZS50aG91c2FuZHNzZXBhcmF0b3JwZXJzaWFuPTE2NDQ7ZS50aHJlZT01MTtlLnRocmVlYXJhYmljPTE2MzU7ZS50aHJlZWJlbmdhbGk9MjUzNztlLnRocmVlY2lyY2xlPTkzMTQ7ZS50aHJlZWNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjQ7ZS50aHJlZWRldmE9MjQwOTtlLnRocmVlZWlnaHRocz04NTQwO2UudGhyZWVndWphcmF0aT0yNzkzO2UudGhyZWVndXJtdWtoaT0yNjY1O2UudGhyZWVoYWNrYXJhYmljPTE2MzU7ZS50aHJlZWhhbmd6aG91PTEyMzIzO2UudGhyZWVpZGVvZ3JhcGhpY3BhcmVuPTEyODM0O2UudGhyZWVpbmZlcmlvcj04MzIzO2UudGhyZWVtb25vc3BhY2U9NjUyOTk7ZS50aHJlZW51bWVyYXRvcmJlbmdhbGk9MjU1MDtlLnRocmVlb2xkc3R5bGU9NjMyODM7ZS50aHJlZXBhcmVuPTkzMzQ7ZS50aHJlZXBlcmlvZD05MzU0O2UudGhyZWVwZXJzaWFuPTE3Nzk7ZS50aHJlZXF1YXJ0ZXJzPTE5MDtlLnRocmVlcXVhcnRlcnNlbWRhc2g9NjMxOTg7ZS50aHJlZXJvbWFuPTg1NjI7ZS50aHJlZXN1cGVyaW9yPTE3OTtlLnRocmVldGhhaT0zNjY3O2UudGh6c3F1YXJlPTEzMjA0O2UudGloaXJhZ2FuYT0xMjM4NTtlLnRpa2F0YWthbmE9MTI0ODE7ZS50aWthdGFrYW5haGFsZndpZHRoPTY1NDA5O2UudGlrZXV0YWNpcmNsZWtvcmVhbj0xMjkxMjtlLnRpa2V1dGFwYXJlbmtvcmVhbj0xMjgxNjtlLnRpa2V1dGNpcmNsZWtvcmVhbj0xMjg5ODtlLnRpa2V1dGtvcmVhbj0xMjU5OTtlLnRpa2V1dHBhcmVua29yZWFuPTEyODAyO2UudGlsZGU9NzMyO2UudGlsZGViZWxvd2NtYj04MTY7ZS50aWxkZWNtYj03NzE7ZS50aWxkZWNvbWI9NzcxO2UudGlsZGVkb3VibGVjbWI9ODY0O2UudGlsZGVvcGVyYXRvcj04NzY0O2UudGlsZGVvdmVybGF5Y21iPTgyMDtlLnRpbGRldmVydGljYWxjbWI9ODMwO2UudGltZXNjaXJjbGU9ODg1NTtlLnRpcGVoYWhlYnJldz0xNDMwO2UudGlwZWhhbGVmdGhlYnJldz0xNDMwO2UudGlwcGlndXJtdWtoaT0yNjcyO2UudGl0bG9jeXJpbGxpY2NtYj0xMTU1O2UudGl3bmFybWVuaWFuPTE0MDc7ZS50bGluZWJlbG93PTc3OTE7ZS50bW9ub3NwYWNlPTY1MzY0O2UudG9hcm1lbmlhbj0xMzg1O2UudG9oaXJhZ2FuYT0xMjM5MjtlLnRva2F0YWthbmE9MTI0ODg7ZS50b2thdGFrYW5haGFsZndpZHRoPTY1NDEyO2UudG9uZWJhcmV4dHJhaGlnaG1vZD03NDE7ZS50b25lYmFyZXh0cmFsb3dtb2Q9NzQ1O2UudG9uZWJhcmhpZ2htb2Q9NzQyO2UudG9uZWJhcmxvd21vZD03NDQ7ZS50b25lYmFybWlkbW9kPTc0MztlLnRvbmVmaXZlPTQ0NTtlLnRvbmVzaXg9Mzg5O2UudG9uZXR3bz00MjQ7ZS50b25vcz05MDA7ZS50b25zcXVhcmU9MTMwOTU7ZS50b3BhdGFrdGhhaT0zNTk5O2UudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0PTEyMzA4O2UudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0c21hbGw9NjUxMTc7ZS50b3J0b2lzZXNoZWxsYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4MTtlLnRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHQ9MTIzMDk7ZS50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0c21hbGw9NjUxMTg7ZS50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0dmVydGljYWw9NjUwODI7ZS50b3Rhb3RoYWk9MzYwNTtlLnRwYWxhdGFsaG9vaz00Mjc7ZS50cGFyZW49OTM5MTtlLnRyYWRlbWFyaz04NDgyO2UudHJhZGVtYXJrc2Fucz02MzcyMjtlLnRyYWRlbWFya3NlcmlmPTYzMTk1O2UudHJldHJvZmxleGhvb2s9NjQ4O2UudHJpYWdkbj05NjYwO2UudHJpYWdsZj05NjY4O2UudHJpYWdydD05NjU4O2UudHJpYWd1cD05NjUwO2UudHM9Njc4O2UudHNhZGk9MTUxMDtlLnRzYWRpZGFnZXNoPTY0MzI2O2UudHNhZGlkYWdlc2hoZWJyZXc9NjQzMjY7ZS50c2FkaWhlYnJldz0xNTEwO2UudHNlY3lyaWxsaWM9MTA5NDtlLnRzZXJlPTE0NjE7ZS50c2VyZTEyPTE0NjE7ZS50c2VyZTFlPTE0NjE7ZS50c2VyZTJiPTE0NjE7ZS50c2VyZWhlYnJldz0xNDYxO2UudHNlcmVuYXJyb3doZWJyZXc9MTQ2MTtlLnRzZXJlcXVhcnRlcmhlYnJldz0xNDYxO2UudHNlcmV3aWRlaGVicmV3PTE0NjE7ZS50c2hlY3lyaWxsaWM9MTExNTtlLnRzdXBlcmlvcj02MzIxOTtlLnR0YWJlbmdhbGk9MjQ2MztlLnR0YWRldmE9MjMzNTtlLnR0YWd1amFyYXRpPTI3MTk7ZS50dGFndXJtdWtoaT0yNTkxO2UudHRlaGFyYWJpYz0xNjU3O2UudHRlaGZpbmFsYXJhYmljPTY0MzU5O2UudHRlaGluaXRpYWxhcmFiaWM9NjQzNjA7ZS50dGVobWVkaWFsYXJhYmljPTY0MzYxO2UudHRoYWJlbmdhbGk9MjQ2NDtlLnR0aGFkZXZhPTIzMzY7ZS50dGhhZ3VqYXJhdGk9MjcyMDtlLnR0aGFndXJtdWtoaT0yNTkyO2UudHR1cm5lZD02NDc7ZS50dWhpcmFnYW5hPTEyMzg4O2UudHVrYXRha2FuYT0xMjQ4NDtlLnR1a2F0YWthbmFoYWxmd2lkdGg9NjU0MTA7ZS50dXNtYWxsaGlyYWdhbmE9MTIzODc7ZS50dXNtYWxsa2F0YWthbmE9MTI0ODM7ZS50dXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzOTE7ZS50d2VsdmVjaXJjbGU9OTMyMztlLnR3ZWx2ZXBhcmVuPTkzNDM7ZS50d2VsdmVwZXJpb2Q9OTM2MztlLnR3ZWx2ZXJvbWFuPTg1NzE7ZS50d2VudHljaXJjbGU9OTMzMTtlLnR3ZW50eWhhbmd6aG91PTIxMzE2O2UudHdlbnR5cGFyZW49OTM1MTtlLnR3ZW50eXBlcmlvZD05MzcxO2UudHdvPTUwO2UudHdvYXJhYmljPTE2MzQ7ZS50d29iZW5nYWxpPTI1MzY7ZS50d29jaXJjbGU9OTMxMztlLnR3b2NpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjM7ZS50d29kZXZhPTI0MDg7ZS50d29kb3RlbmxlYWRlcj04MjI5O2UudHdvZG90bGVhZGVyPTgyMjk7ZS50d29kb3RsZWFkZXJ2ZXJ0aWNhbD02NTA3MjtlLnR3b2d1amFyYXRpPTI3OTI7ZS50d29ndXJtdWtoaT0yNjY0O2UudHdvaGFja2FyYWJpYz0xNjM0O2UudHdvaGFuZ3pob3U9MTIzMjI7ZS50d29pZGVvZ3JhcGhpY3BhcmVuPTEyODMzO2UudHdvaW5mZXJpb3I9ODMyMjtlLnR3b21vbm9zcGFjZT02NTI5ODtlLnR3b251bWVyYXRvcmJlbmdhbGk9MjU0OTtlLnR3b29sZHN0eWxlPTYzMjgyO2UudHdvcGFyZW49OTMzMztlLnR3b3BlcmlvZD05MzUzO2UudHdvcGVyc2lhbj0xNzc4O2UudHdvcm9tYW49ODU2MTtlLnR3b3N0cm9rZT00NDM7ZS50d29zdXBlcmlvcj0xNzg7ZS50d290aGFpPTM2NjY7ZS50d290aGlyZHM9ODUzMjtlLnU9MTE3O2UudWFjdXRlPTI1MDtlLnViYXI9NjQ5O2UudWJlbmdhbGk9MjQ0MTtlLnVib3BvbW9mbz0xMjU4NDtlLnVicmV2ZT0zNjU7ZS51Y2Fyb249NDY4O2UudWNpcmNsZT05NDQ0O2UudWNpcmN1bWZsZXg9MjUxO2UudWNpcmN1bWZsZXhiZWxvdz03Nzk5O2UudWN5cmlsbGljPTEwOTE7ZS51ZGF0dGFkZXZhPTIzODU7ZS51ZGJsYWN1dGU9MzY5O2UudWRibGdyYXZlPTUzMztlLnVkZXZhPTIzMTM7ZS51ZGllcmVzaXM9MjUyO2UudWRpZXJlc2lzYWN1dGU9NDcyO2UudWRpZXJlc2lzYmVsb3c9Nzc5NTtlLnVkaWVyZXNpc2Nhcm9uPTQ3NDtlLnVkaWVyZXNpc2N5cmlsbGljPTEyNjU7ZS51ZGllcmVzaXNncmF2ZT00NzY7ZS51ZGllcmVzaXNtYWNyb249NDcwO2UudWRvdGJlbG93PTc5MDk7ZS51Z3JhdmU9MjQ5O2UudWd1amFyYXRpPTI2OTc7ZS51Z3VybXVraGk9MjU2OTtlLnVoaXJhZ2FuYT0xMjM1ODtlLnVob29rYWJvdmU9NzkxMTtlLnVob3JuPTQzMjtlLnVob3JuYWN1dGU9NzkxMztlLnVob3JuZG90YmVsb3c9NzkyMTtlLnVob3JuZ3JhdmU9NzkxNTtlLnVob3JuaG9va2Fib3ZlPTc5MTc7ZS51aG9ybnRpbGRlPTc5MTk7ZS51aHVuZ2FydW1sYXV0PTM2OTtlLnVodW5nYXJ1bWxhdXRjeXJpbGxpYz0xMjY3O2UudWludmVydGVkYnJldmU9NTM1O2UudWthdGFrYW5hPTEyNDU0O2UudWthdGFrYW5haGFsZndpZHRoPTY1Mzk1O2UudWtjeXJpbGxpYz0xMTQ1O2UudWtvcmVhbj0xMjYzNjtlLnVtYWNyb249MzYzO2UudW1hY3JvbmN5cmlsbGljPTEyNjM7ZS51bWFjcm9uZGllcmVzaXM9NzgwMztlLnVtYXRyYWd1cm11a2hpPTI2MjU7ZS51bW9ub3NwYWNlPTY1MzY1O2UudW5kZXJzY29yZT05NTtlLnVuZGVyc2NvcmVkYmw9ODIxNTtlLnVuZGVyc2NvcmVtb25vc3BhY2U9NjUzNDM7ZS51bmRlcnNjb3JldmVydGljYWw9NjUwNzU7ZS51bmRlcnNjb3Jld2F2eT02NTEwMztlLnVuaW9uPTg3NDY7ZS51bml2ZXJzYWw9ODcwNDtlLnVvZ29uZWs9MzcxO2UudXBhcmVuPTkzOTI7ZS51cGJsb2NrPTk2MDA7ZS51cHBlcmRvdGhlYnJldz0xNDc2O2UudXBzaWxvbj05NjU7ZS51cHNpbG9uZGllcmVzaXM9OTcxO2UudXBzaWxvbmRpZXJlc2lzdG9ub3M9OTQ0O2UudXBzaWxvbmxhdGluPTY1MDtlLnVwc2lsb250b25vcz05NzM7ZS51cHRhY2tiZWxvd2NtYj03OTc7ZS51cHRhY2ttb2Q9NzI0O2UudXJhZ3VybXVraGk9MjY3NTtlLnVyaW5nPTM2NztlLnVzaG9ydGN5cmlsbGljPTExMTg7ZS51c21hbGxoaXJhZ2FuYT0xMjM1NztlLnVzbWFsbGthdGFrYW5hPTEyNDUzO2UudXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzODU7ZS51c3RyYWlnaHRjeXJpbGxpYz0xMTk5O2UudXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWM9MTIwMTtlLnV0aWxkZT0zNjE7ZS51dGlsZGVhY3V0ZT03ODAxO2UudXRpbGRlYmVsb3c9Nzc5NztlLnV1YmVuZ2FsaT0yNDQyO2UudXVkZXZhPTIzMTQ7ZS51dWd1amFyYXRpPTI2OTg7ZS51dWd1cm11a2hpPTI1NzA7ZS51dW1hdHJhZ3VybXVraGk9MjYyNjtlLnV1dm93ZWxzaWduYmVuZ2FsaT0yNDk4O2UudXV2b3dlbHNpZ25kZXZhPTIzNzA7ZS51dXZvd2Vsc2lnbmd1amFyYXRpPTI3NTQ7ZS51dm93ZWxzaWduYmVuZ2FsaT0yNDk3O2UudXZvd2Vsc2lnbmRldmE9MjM2OTtlLnV2b3dlbHNpZ25ndWphcmF0aT0yNzUzO2Uudj0xMTg7ZS52YWRldmE9MjM1NztlLnZhZ3VqYXJhdGk9Mjc0MTtlLnZhZ3VybXVraGk9MjYxMztlLnZha2F0YWthbmE9MTI1MzU7ZS52YXY9MTQ5MztlLnZhdmRhZ2VzaD02NDMwOTtlLnZhdmRhZ2VzaDY1PTY0MzA5O2UudmF2ZGFnZXNoaGVicmV3PTY0MzA5O2UudmF2aGVicmV3PTE0OTM7ZS52YXZob2xhbT02NDMzMTtlLnZhdmhvbGFtaGVicmV3PTY0MzMxO2UudmF2dmF2aGVicmV3PTE1MjA7ZS52YXZ5b2RoZWJyZXc9MTUyMTtlLnZjaXJjbGU9OTQ0NTtlLnZkb3RiZWxvdz03ODA3O2UudmVjeXJpbGxpYz0xMDc0O2UudmVoYXJhYmljPTE3MDA7ZS52ZWhmaW5hbGFyYWJpYz02NDM2MztlLnZlaGluaXRpYWxhcmFiaWM9NjQzNjQ7ZS52ZWhtZWRpYWxhcmFiaWM9NjQzNjU7ZS52ZWthdGFrYW5hPTEyNTM3O2UudmVudXM9OTc5MjtlLnZlcnRpY2FsYmFyPTEyNDtlLnZlcnRpY2FsbGluZWFib3ZlY21iPTc4MTtlLnZlcnRpY2FsbGluZWJlbG93Y21iPTgwOTtlLnZlcnRpY2FsbGluZWxvd21vZD03MTY7ZS52ZXJ0aWNhbGxpbmVtb2Q9NzEyO2UudmV3YXJtZW5pYW49MTQwNjtlLnZob29rPTY1MTtlLnZpa2F0YWthbmE9MTI1MzY7ZS52aXJhbWFiZW5nYWxpPTI1MDk7ZS52aXJhbWFkZXZhPTIzODE7ZS52aXJhbWFndWphcmF0aT0yNzY1O2UudmlzYXJnYWJlbmdhbGk9MjQzNTtlLnZpc2FyZ2FkZXZhPTIzMDc7ZS52aXNhcmdhZ3VqYXJhdGk9MjY5MTtlLnZtb25vc3BhY2U9NjUzNjY7ZS52b2FybWVuaWFuPTE0MDA7ZS52b2ljZWRpdGVyYXRpb25oaXJhZ2FuYT0xMjQ0NjtlLnZvaWNlZGl0ZXJhdGlvbmthdGFrYW5hPTEyNTQyO2Uudm9pY2VkbWFya2thbmE9MTI0NDM7ZS52b2ljZWRtYXJra2FuYWhhbGZ3aWR0aD02NTQzODtlLnZva2F0YWthbmE9MTI1Mzg7ZS52cGFyZW49OTM5MztlLnZ0aWxkZT03ODA1O2UudnR1cm5lZD02NTI7ZS52dWhpcmFnYW5hPTEyNDM2O2UudnVrYXRha2FuYT0xMjUzMjtlLnc9MTE5O2Uud2FjdXRlPTc4MTE7ZS53YWVrb3JlYW49MTI2MzM7ZS53YWhpcmFnYW5hPTEyNDMxO2Uud2FrYXRha2FuYT0xMjUyNztlLndha2F0YWthbmFoYWxmd2lkdGg9NjU0MzY7ZS53YWtvcmVhbj0xMjYzMjtlLndhc21hbGxoaXJhZ2FuYT0xMjQzMDtlLndhc21hbGxrYXRha2FuYT0xMjUyNjtlLndhdHRvc3F1YXJlPTEzMTQzO2Uud2F2ZWRhc2g9MTIzMTY7ZS53YXZ5dW5kZXJzY29yZXZlcnRpY2FsPTY1MDc2O2Uud2F3YXJhYmljPTE2MDg7ZS53YXdmaW5hbGFyYWJpYz02NTI2MjtlLndhd2hhbXphYWJvdmVhcmFiaWM9MTU3MjtlLndhd2hhbXphYWJvdmVmaW5hbGFyYWJpYz02NTE1ODtlLndic3F1YXJlPTEzMjc3O2Uud2NpcmNsZT05NDQ2O2Uud2NpcmN1bWZsZXg9MzczO2Uud2RpZXJlc2lzPTc4MTM7ZS53ZG90YWNjZW50PTc4MTU7ZS53ZG90YmVsb3c9NzgxNztlLndlaGlyYWdhbmE9MTI0MzM7ZS53ZWllcnN0cmFzcz04NDcyO2Uud2VrYXRha2FuYT0xMjUyOTtlLndla29yZWFuPTEyNjM4O2Uud2Vva29yZWFuPTEyNjM3O2Uud2dyYXZlPTc4MDk7ZS53aGl0ZWJ1bGxldD05NzAyO2Uud2hpdGVjaXJjbGU9OTY3NTtlLndoaXRlY2lyY2xlaW52ZXJzZT05Njg5O2Uud2hpdGVjb3JuZXJicmFja2V0bGVmdD0xMjMwMjtlLndoaXRlY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA5MTtlLndoaXRlY29ybmVyYnJhY2tldHJpZ2h0PTEyMzAzO2Uud2hpdGVjb3JuZXJicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA5MjtlLndoaXRlZGlhbW9uZD05NjcxO2Uud2hpdGVkaWFtb25kY29udGFpbmluZ2JsYWNrc21hbGxkaWFtb25kPTk2NzI7ZS53aGl0ZWRvd25wb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY2MztlLndoaXRlZG93bnBvaW50aW5ndHJpYW5nbGU9OTY2MTtlLndoaXRlbGVmdHBvaW50aW5nc21hbGx0cmlhbmdsZT05NjY3O2Uud2hpdGVsZWZ0cG9pbnRpbmd0cmlhbmdsZT05NjY1O2Uud2hpdGVsZW50aWN1bGFyYnJhY2tldGxlZnQ9MTIzMTA7ZS53aGl0ZWxlbnRpY3VsYXJicmFja2V0cmlnaHQ9MTIzMTE7ZS53aGl0ZXJpZ2h0cG9pbnRpbmdzbWFsbHRyaWFuZ2xlPTk2NTc7ZS53aGl0ZXJpZ2h0cG9pbnRpbmd0cmlhbmdsZT05NjU1O2Uud2hpdGVzbWFsbHNxdWFyZT05NjQzO2Uud2hpdGVzbWlsaW5nZmFjZT05Nzg2O2Uud2hpdGVzcXVhcmU9OTYzMztlLndoaXRlc3Rhcj05NzM0O2Uud2hpdGV0ZWxlcGhvbmU9OTc0MztlLndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0PTEyMzEyO2Uud2hpdGV0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0PTEyMzEzO2Uud2hpdGV1cHBvaW50aW5nc21hbGx0cmlhbmdsZT05NjUzO2Uud2hpdGV1cHBvaW50aW5ndHJpYW5nbGU9OTY1MTtlLndpaGlyYWdhbmE9MTI0MzI7ZS53aWthdGFrYW5hPTEyNTI4O2Uud2lrb3JlYW49MTI2Mzk7ZS53bW9ub3NwYWNlPTY1MzY3O2Uud29oaXJhZ2FuYT0xMjQzNDtlLndva2F0YWthbmE9MTI1MzA7ZS53b2thdGFrYW5haGFsZndpZHRoPTY1MzgyO2Uud29uPTgzNjE7ZS53b25tb25vc3BhY2U9NjU1MTA7ZS53b3dhZW50aGFpPTM2MjM7ZS53cGFyZW49OTM5NDtlLndyaW5nPTc4MzI7ZS53c3VwZXJpb3I9Njk1O2Uud3R1cm5lZD02NTM7ZS53eW5uPTQ0NztlLng9MTIwO2UueGFib3ZlY21iPTgyOTtlLnhib3BvbW9mbz0xMjU2MjtlLnhjaXJjbGU9OTQ0NztlLnhkaWVyZXNpcz03ODIxO2UueGRvdGFjY2VudD03ODE5O2UueGVoYXJtZW5pYW49MTM4OTtlLnhpPTk1ODtlLnhtb25vc3BhY2U9NjUzNjg7ZS54cGFyZW49OTM5NTtlLnhzdXBlcmlvcj03Mzk7ZS55PTEyMTtlLnlhYWRvc3F1YXJlPTEzMTM0O2UueWFiZW5nYWxpPTI0Nzk7ZS55YWN1dGU9MjUzO2UueWFkZXZhPTIzNTE7ZS55YWVrb3JlYW49MTI2MjY7ZS55YWd1amFyYXRpPTI3MzU7ZS55YWd1cm11a2hpPTI2MDc7ZS55YWhpcmFnYW5hPTEyNDIwO2UueWFrYXRha2FuYT0xMjUxNjtlLnlha2F0YWthbmFoYWxmd2lkdGg9NjU0Mjg7ZS55YWtvcmVhbj0xMjYyNTtlLnlhbWFra2FudGhhaT0zNjYyO2UueWFzbWFsbGhpcmFnYW5hPTEyNDE5O2UueWFzbWFsbGthdGFrYW5hPTEyNTE1O2UueWFzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg4O2UueWF0Y3lyaWxsaWM9MTEyMztlLnljaXJjbGU9OTQ0ODtlLnljaXJjdW1mbGV4PTM3NTtlLnlkaWVyZXNpcz0yNTU7ZS55ZG90YWNjZW50PTc4MjM7ZS55ZG90YmVsb3c9NzkyNTtlLnllaGFyYWJpYz0xNjEwO2UueWVoYmFycmVlYXJhYmljPTE3NDY7ZS55ZWhiYXJyZWVmaW5hbGFyYWJpYz02NDQzMTtlLnllaGZpbmFsYXJhYmljPTY1MjY2O2UueWVoaGFtemFhYm92ZWFyYWJpYz0xNTc0O2UueWVoaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MTYyO2UueWVoaGFtemFhYm92ZWluaXRpYWxhcmFiaWM9NjUxNjM7ZS55ZWhoYW16YWFib3ZlbWVkaWFsYXJhYmljPTY1MTY0O2UueWVoaW5pdGlhbGFyYWJpYz02NTI2NztlLnllaG1lZGlhbGFyYWJpYz02NTI2ODtlLnllaG1lZW1pbml0aWFsYXJhYmljPTY0NzMzO2UueWVobWVlbWlzb2xhdGVkYXJhYmljPTY0NjAwO2UueWVobm9vbmZpbmFsYXJhYmljPTY0NjYwO2UueWVodGhyZWVkb3RzYmVsb3dhcmFiaWM9MTc0NTtlLnlla29yZWFuPTEyNjMwO2UueWVuPTE2NTtlLnllbm1vbm9zcGFjZT02NTUwOTtlLnllb2tvcmVhbj0xMjYyOTtlLnllb3JpbmhpZXVoa29yZWFuPTEyNjc4O2UueWVyYWhiZW55b21vaGVicmV3PTE0NTA7ZS55ZXJhaGJlbnlvbW9sZWZ0aGVicmV3PTE0NTA7ZS55ZXJpY3lyaWxsaWM9MTA5OTtlLnllcnVkaWVyZXNpc2N5cmlsbGljPTEyNzM7ZS55ZXNpZXVuZ2tvcmVhbj0xMjY3MztlLnllc2lldW5ncGFuc2lvc2tvcmVhbj0xMjY3NTtlLnllc2lldW5nc2lvc2tvcmVhbj0xMjY3NDtlLnlldGl2aGVicmV3PTE0MzQ7ZS55Z3JhdmU9NzkyMztlLnlob29rPTQzNjtlLnlob29rYWJvdmU9NzkyNztlLnlpYXJtZW5pYW49MTM5NztlLnlpY3lyaWxsaWM9MTExMTtlLnlpa29yZWFuPTEyNjQyO2UueWlueWFuZz05Nzc1O2UueWl3bmFybWVuaWFuPTE0MTA7ZS55bW9ub3NwYWNlPTY1MzY5O2UueW9kPTE0OTc7ZS55b2RkYWdlc2g9NjQzMTM7ZS55b2RkYWdlc2hoZWJyZXc9NjQzMTM7ZS55b2RoZWJyZXc9MTQ5NztlLnlvZHlvZGhlYnJldz0xNTIyO2UueW9keW9kcGF0YWhoZWJyZXc9NjQyODc7ZS55b2hpcmFnYW5hPTEyNDI0O2UueW9pa29yZWFuPTEyNjgxO2UueW9rYXRha2FuYT0xMjUyMDtlLnlva2F0YWthbmFoYWxmd2lkdGg9NjU0MzA7ZS55b2tvcmVhbj0xMjYzNTtlLnlvc21hbGxoaXJhZ2FuYT0xMjQyMztlLnlvc21hbGxrYXRha2FuYT0xMjUxOTtlLnlvc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM5MDtlLnlvdGdyZWVrPTEwMTE7ZS55b3lhZWtvcmVhbj0xMjY4MDtlLnlveWFrb3JlYW49MTI2Nzk7ZS55b3lha3RoYWk9MzYxODtlLnlveWluZ3RoYWk9MzU5NztlLnlwYXJlbj05Mzk2O2UueXBvZ2VncmFtbWVuaT04OTA7ZS55cG9nZWdyYW1tZW5pZ3JlZWtjbWI9ODM3O2UueXI9NDIyO2UueXJpbmc9NzgzMztlLnlzdXBlcmlvcj02OTY7ZS55dGlsZGU9NzkyOTtlLnl0dXJuZWQ9NjU0O2UueXVoaXJhZ2FuYT0xMjQyMjtlLnl1aWtvcmVhbj0xMjY4NDtlLnl1a2F0YWthbmE9MTI1MTg7ZS55dWthdGFrYW5haGFsZndpZHRoPTY1NDI5O2UueXVrb3JlYW49MTI2NDA7ZS55dXNiaWdjeXJpbGxpYz0xMTMxO2UueXVzYmlnaW90aWZpZWRjeXJpbGxpYz0xMTMzO2UueXVzbGl0dGxlY3lyaWxsaWM9MTEyNztlLnl1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWM9MTEyOTtlLnl1c21hbGxoaXJhZ2FuYT0xMjQyMTtlLnl1c21hbGxrYXRha2FuYT0xMjUxNztlLnl1c21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4OTtlLnl1eWVrb3JlYW49MTI2ODM7ZS55dXllb2tvcmVhbj0xMjY4MjtlLnl5YWJlbmdhbGk9MjUyNztlLnl5YWRldmE9MjM5OTtlLno9MTIyO2UuemFhcm1lbmlhbj0xMzgyO2UuemFjdXRlPTM3ODtlLnphZGV2YT0yMzk1O2UuemFndXJtdWtoaT0yNjUxO2UuemFoYXJhYmljPTE1OTI7ZS56YWhmaW5hbGFyYWJpYz02NTIyMjtlLnphaGluaXRpYWxhcmFiaWM9NjUyMjM7ZS56YWhpcmFnYW5hPTEyMzc0O2UuemFobWVkaWFsYXJhYmljPTY1MjI0O2UuemFpbmFyYWJpYz0xNTg2O2UuemFpbmZpbmFsYXJhYmljPTY1MjAwO2UuemFrYXRha2FuYT0xMjQ3MDtlLnphcWVmZ2Fkb2xoZWJyZXc9MTQyOTtlLnphcWVmcWF0YW5oZWJyZXc9MTQyODtlLnphcnFhaGVicmV3PTE0MzI7ZS56YXlpbj0xNDk0O2UuemF5aW5kYWdlc2g9NjQzMTA7ZS56YXlpbmRhZ2VzaGhlYnJldz02NDMxMDtlLnpheWluaGVicmV3PTE0OTQ7ZS56Ym9wb21vZm89MTI1Njc7ZS56Y2Fyb249MzgyO2UuemNpcmNsZT05NDQ5O2UuemNpcmN1bWZsZXg9NzgyNTtlLnpjdXJsPTY1NztlLnpkb3Q9MzgwO2UuemRvdGFjY2VudD0zODA7ZS56ZG90YmVsb3c9NzgyNztlLnplY3lyaWxsaWM9MTA3OTtlLnplZGVzY2VuZGVyY3lyaWxsaWM9MTE3NztlLnplZGllcmVzaXNjeXJpbGxpYz0xMjQ3O2UuemVoaXJhZ2FuYT0xMjM4MDtlLnpla2F0YWthbmE9MTI0NzY7ZS56ZXJvPTQ4O2UuemVyb2FyYWJpYz0xNjMyO2UuemVyb2JlbmdhbGk9MjUzNDtlLnplcm9kZXZhPTI0MDY7ZS56ZXJvZ3VqYXJhdGk9Mjc5MDtlLnplcm9ndXJtdWtoaT0yNjYyO2UuemVyb2hhY2thcmFiaWM9MTYzMjtlLnplcm9pbmZlcmlvcj04MzIwO2UuemVyb21vbm9zcGFjZT02NTI5NjtlLnplcm9vbGRzdHlsZT02MzI4MDtlLnplcm9wZXJzaWFuPTE3NzY7ZS56ZXJvc3VwZXJpb3I9ODMwNDtlLnplcm90aGFpPTM2NjQ7ZS56ZXJvd2lkdGhqb2luZXI9NjUyNzk7ZS56ZXJvd2lkdGhub25qb2luZXI9ODIwNDtlLnplcm93aWR0aHNwYWNlPTgyMDM7ZS56ZXRhPTk1MDtlLnpoYm9wb21vZm89MTI1NjM7ZS56aGVhcm1lbmlhbj0xMzg2O2UuemhlYnJldmVjeXJpbGxpYz0xMjE4O2UuemhlY3lyaWxsaWM9MTA3ODtlLnpoZWRlc2NlbmRlcmN5cmlsbGljPTExNzU7ZS56aGVkaWVyZXNpc2N5cmlsbGljPTEyNDU7ZS56aWhpcmFnYW5hPTEyMzc2O2UuemlrYXRha2FuYT0xMjQ3MjtlLnppbm9yaGVicmV3PTE0NTQ7ZS56bGluZWJlbG93PTc4Mjk7ZS56bW9ub3NwYWNlPTY1MzcwO2Uuem9oaXJhZ2FuYT0xMjM4MjtlLnpva2F0YWthbmE9MTI0Nzg7ZS56cGFyZW49OTM5NztlLnpyZXRyb2ZsZXhob29rPTY1NjtlLnpzdHJva2U9NDM4O2UuenVoaXJhZ2FuYT0xMjM3ODtlLnp1a2F0YWthbmE9MTI0NzQ7ZVsiLm5vdGRlZiJdPTA7ZS5hbmdicmFja2V0bGVmdGJpZz05MDAxO2UuYW5nYnJhY2tldGxlZnRCaWc9OTAwMTtlLmFuZ2JyYWNrZXRsZWZ0YmlnZz05MDAxO2UuYW5nYnJhY2tldGxlZnRCaWdnPTkwMDE7ZS5hbmdicmFja2V0cmlnaHRCaWc9OTAwMjtlLmFuZ2JyYWNrZXRyaWdodGJpZz05MDAyO2UuYW5nYnJhY2tldHJpZ2h0QmlnZz05MDAyO2UuYW5nYnJhY2tldHJpZ2h0YmlnZz05MDAyO2UuYXJyb3dob29rbGVmdD04NjE4O2UuYXJyb3dob29rcmlnaHQ9ODYxNztlLmFycm93bGVmdHRvcGhhbGY9ODYzNjtlLmFycm93bGVmdGJvdGhhbGY9ODYzNztlLmFycm93bm9ydGhlYXN0PTg1OTk7ZS5hcnJvd25vcnRod2VzdD04NTk4O2UuYXJyb3dyaWdodHRvcGhhbGY9ODY0MDtlLmFycm93cmlnaHRib3RoYWxmPTg2NDE7ZS5hcnJvd3NvdXRoZWFzdD04NjAwO2UuYXJyb3dzb3V0aHdlc3Q9ODYwMTtlLmJhY2tzbGFzaGJpZz04NzI2O2UuYmFja3NsYXNoQmlnPTg3MjY7ZS5iYWNrc2xhc2hCaWdnPTg3MjY7ZS5iYWNrc2xhc2hiaWdnPTg3MjY7ZS5iYXJkYmw9ODIxNDtlLmJyYWNlaHRpcGRvd25sZWZ0PTY1MDc5O2UuYnJhY2VodGlwZG93bnJpZ2h0PTY1MDc5O2UuYnJhY2VodGlwdXBsZWZ0PTY1MDgwO2UuYnJhY2VodGlwdXByaWdodD02NTA4MDtlLmJyYWNlbGVmdEJpZz0xMjM7ZS5icmFjZWxlZnRiaWc9MTIzO2UuYnJhY2VsZWZ0YmlnZz0xMjM7ZS5icmFjZWxlZnRCaWdnPTEyMztlLmJyYWNlcmlnaHRCaWc9MTI1O2UuYnJhY2VyaWdodGJpZz0xMjU7ZS5icmFjZXJpZ2h0YmlnZz0xMjU7ZS5icmFjZXJpZ2h0QmlnZz0xMjU7ZS5icmFja2V0bGVmdGJpZz05MTtlLmJyYWNrZXRsZWZ0QmlnPTkxO2UuYnJhY2tldGxlZnRiaWdnPTkxO2UuYnJhY2tldGxlZnRCaWdnPTkxO2UuYnJhY2tldHJpZ2h0QmlnPTkzO2UuYnJhY2tldHJpZ2h0YmlnPTkzO2UuYnJhY2tldHJpZ2h0YmlnZz05MztlLmJyYWNrZXRyaWdodEJpZ2c9OTM7ZS5jZWlsaW5nbGVmdGJpZz04OTY4O2UuY2VpbGluZ2xlZnRCaWc9ODk2ODtlLmNlaWxpbmdsZWZ0QmlnZz04OTY4O2UuY2VpbGluZ2xlZnRiaWdnPTg5Njg7ZS5jZWlsaW5ncmlnaHRiaWc9ODk2OTtlLmNlaWxpbmdyaWdodEJpZz04OTY5O2UuY2VpbGluZ3JpZ2h0YmlnZz04OTY5O2UuY2VpbGluZ3JpZ2h0QmlnZz04OTY5O2UuY2lyY2xlZG90ZGlzcGxheT04ODU3O2UuY2lyY2xlZG90dGV4dD04ODU3O2UuY2lyY2xlbXVsdGlwbHlkaXNwbGF5PTg4NTU7ZS5jaXJjbGVtdWx0aXBseXRleHQ9ODg1NTtlLmNpcmNsZXBsdXNkaXNwbGF5PTg4NTM7ZS5jaXJjbGVwbHVzdGV4dD04ODUzO2UuY29udGludGVncmFsZGlzcGxheT04NzUwO2UuY29udGludGVncmFsdGV4dD04NzUwO2UuY29wcm9kdWN0ZGlzcGxheT04NzIwO2UuY29wcm9kdWN0dGV4dD04NzIwO2UuZmxvb3JsZWZ0QmlnPTg5NzA7ZS5mbG9vcmxlZnRiaWc9ODk3MDtlLmZsb29ybGVmdGJpZ2c9ODk3MDtlLmZsb29ybGVmdEJpZ2c9ODk3MDtlLmZsb29ycmlnaHRiaWc9ODk3MTtlLmZsb29ycmlnaHRCaWc9ODk3MTtlLmZsb29ycmlnaHRCaWdnPTg5NzE7ZS5mbG9vcnJpZ2h0YmlnZz04OTcxO2UuaGF0d2lkZT03NzA7ZS5oYXR3aWRlcj03NzA7ZS5oYXR3aWRlc3Q9NzcwO2UuaW50ZXJjYWw9NzQ4ODtlLmludGVncmFsZGlzcGxheT04NzQ3O2UuaW50ZWdyYWx0ZXh0PTg3NDc7ZS5pbnRlcnNlY3Rpb25kaXNwbGF5PTg4OTg7ZS5pbnRlcnNlY3Rpb250ZXh0PTg4OTg7ZS5sb2dpY2FsYW5kZGlzcGxheT04NzQzO2UubG9naWNhbGFuZHRleHQ9ODc0MztlLmxvZ2ljYWxvcmRpc3BsYXk9ODc0NDtlLmxvZ2ljYWxvcnRleHQ9ODc0NDtlLnBhcmVubGVmdEJpZz00MDtlLnBhcmVubGVmdGJpZz00MDtlLnBhcmVubGVmdEJpZ2c9NDA7ZS5wYXJlbmxlZnRiaWdnPTQwO2UucGFyZW5yaWdodEJpZz00MTtlLnBhcmVucmlnaHRiaWc9NDE7ZS5wYXJlbnJpZ2h0QmlnZz00MTtlLnBhcmVucmlnaHRiaWdnPTQxO2UucHJpbWU9ODI0MjtlLnByb2R1Y3RkaXNwbGF5PTg3MTk7ZS5wcm9kdWN0dGV4dD04NzE5O2UucmFkaWNhbGJpZz04NzMwO2UucmFkaWNhbEJpZz04NzMwO2UucmFkaWNhbEJpZ2c9ODczMDtlLnJhZGljYWxiaWdnPTg3MzA7ZS5yYWRpY2FsYnQ9ODczMDtlLnJhZGljYWx0cD04NzMwO2UucmFkaWNhbHZlcnRleD04NzMwO2Uuc2xhc2hiaWc9NDc7ZS5zbGFzaEJpZz00NztlLnNsYXNoQmlnZz00NztlLnNsYXNoYmlnZz00NztlLnN1bW1hdGlvbmRpc3BsYXk9ODcyMTtlLnN1bW1hdGlvbnRleHQ9ODcyMTtlLnRpbGRld2lkZT03MzI7ZS50aWxkZXdpZGVyPTczMjtlLnRpbGRld2lkZXN0PTczMjtlLnVuaW9uZGlzcGxheT04ODk5O2UudW5pb25tdWx0aWRpc3BsYXk9ODg0NjtlLnVuaW9ubXVsdGl0ZXh0PTg4NDY7ZS51bmlvbnNxZGlzcGxheT04ODUyO2UudW5pb25zcXRleHQ9ODg1MjtlLnVuaW9udGV4dD04ODk5O2UudmV4dGVuZGRvdWJsZT04NzQxO2UudmV4dGVuZHNpbmdsZT04NzM5fSkpO3QuZ2V0R2x5cGhzVW5pY29kZT1uO2NvbnN0IGk9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTMyO2UuYTE9OTk4NTtlLmEyPTk5ODY7ZS5hMjAyPTk5ODc7ZS5hMz05OTg4O2UuYTQ9OTc0MjtlLmE1PTk5OTA7ZS5hMTE5PTk5OTE7ZS5hMTE4PTk5OTI7ZS5hMTE3PTk5OTM7ZS5hMTE9OTc1NTtlLmExMj05NzU4O2UuYTEzPTk5OTY7ZS5hMTQ9OTk5NztlLmExNT05OTk4O2UuYTE2PTk5OTk7ZS5hMTA1PTFlNDtlLmExNz0xMDAwMTtlLmExOD0xMDAwMjtlLmExOT0xMDAwMztlLmEyMD0xMDAwNDtlLmEyMT0xMDAwNTtlLmEyMj0xMDAwNjtlLmEyMz0xMDAwNztlLmEyND0xMDAwODtlLmEyNT0xMDAwOTtlLmEyNj0xMDAxMDtlLmEyNz0xMDAxMTtlLmEyOD0xMDAxMjtlLmE2PTEwMDEzO2UuYTc9MTAwMTQ7ZS5hOD0xMDAxNTtlLmE5PTEwMDE2O2UuYTEwPTEwMDE3O2UuYTI5PTEwMDE4O2UuYTMwPTEwMDE5O2UuYTMxPTEwMDIwO2UuYTMyPTEwMDIxO2UuYTMzPTEwMDIyO2UuYTM0PTEwMDIzO2UuYTM1PTk3MzM7ZS5hMzY9MTAwMjU7ZS5hMzc9MTAwMjY7ZS5hMzg9MTAwMjc7ZS5hMzk9MTAwMjg7ZS5hNDA9MTAwMjk7ZS5hNDE9MTAwMzA7ZS5hNDI9MTAwMzE7ZS5hNDM9MTAwMzI7ZS5hNDQ9MTAwMzM7ZS5hNDU9MTAwMzQ7ZS5hNDY9MTAwMzU7ZS5hNDc9MTAwMzY7ZS5hNDg9MTAwMzc7ZS5hNDk9MTAwMzg7ZS5hNTA9MTAwMzk7ZS5hNTE9MTAwNDA7ZS5hNTI9MTAwNDE7ZS5hNTM9MTAwNDI7ZS5hNTQ9MTAwNDM7ZS5hNTU9MTAwNDQ7ZS5hNTY9MTAwNDU7ZS5hNTc9MTAwNDY7ZS5hNTg9MTAwNDc7ZS5hNTk9MTAwNDg7ZS5hNjA9MTAwNDk7ZS5hNjE9MTAwNTA7ZS5hNjI9MTAwNTE7ZS5hNjM9MTAwNTI7ZS5hNjQ9MTAwNTM7ZS5hNjU9MTAwNTQ7ZS5hNjY9MTAwNTU7ZS5hNjc9MTAwNTY7ZS5hNjg9MTAwNTc7ZS5hNjk9MTAwNTg7ZS5hNzA9MTAwNTk7ZS5hNzE9OTY3OTtlLmE3Mj0xMDA2MTtlLmE3Mz05NjMyO2UuYTc0PTEwMDYzO2UuYTIwMz0xMDA2NDtlLmE3NT0xMDA2NTtlLmEyMDQ9MTAwNjY7ZS5hNzY9OTY1MDtlLmE3Nz05NjYwO2UuYTc4PTk2NzA7ZS5hNzk9MTAwNzA7ZS5hODE9OTY4NztlLmE4Mj0xMDA3MjtlLmE4Mz0xMDA3MztlLmE4ND0xMDA3NDtlLmE5Nz0xMDA3NTtlLmE5OD0xMDA3NjtlLmE5OT0xMDA3NztlLmExMDA9MTAwNzg7ZS5hMTAxPTEwMDgxO2UuYTEwMj0xMDA4MjtlLmExMDM9MTAwODM7ZS5hMTA0PTEwMDg0O2UuYTEwNj0xMDA4NTtlLmExMDc9MTAwODY7ZS5hMTA4PTEwMDg3O2UuYTExMj05ODI3O2UuYTExMT05ODMwO2UuYTExMD05ODI5O2UuYTEwOT05ODI0O2UuYTEyMD05MzEyO2UuYTEyMT05MzEzO2UuYTEyMj05MzE0O2UuYTEyMz05MzE1O2UuYTEyND05MzE2O2UuYTEyNT05MzE3O2UuYTEyNj05MzE4O2UuYTEyNz05MzE5O2UuYTEyOD05MzIwO2UuYTEyOT05MzIxO2UuYTEzMD0xMDEwMjtlLmExMzE9MTAxMDM7ZS5hMTMyPTEwMTA0O2UuYTEzMz0xMDEwNTtlLmExMzQ9MTAxMDY7ZS5hMTM1PTEwMTA3O2UuYTEzNj0xMDEwODtlLmExMzc9MTAxMDk7ZS5hMTM4PTEwMTEwO2UuYTEzOT0xMDExMTtlLmExNDA9MTAxMTI7ZS5hMTQxPTEwMTEzO2UuYTE0Mj0xMDExNDtlLmExNDM9MTAxMTU7ZS5hMTQ0PTEwMTE2O2UuYTE0NT0xMDExNztlLmExNDY9MTAxMTg7ZS5hMTQ3PTEwMTE5O2UuYTE0OD0xMDEyMDtlLmExNDk9MTAxMjE7ZS5hMTUwPTEwMTIyO2UuYTE1MT0xMDEyMztlLmExNTI9MTAxMjQ7ZS5hMTUzPTEwMTI1O2UuYTE1ND0xMDEyNjtlLmExNTU9MTAxMjc7ZS5hMTU2PTEwMTI4O2UuYTE1Nz0xMDEyOTtlLmExNTg9MTAxMzA7ZS5hMTU5PTEwMTMxO2UuYTE2MD0xMDEzMjtlLmExNjE9ODU5NDtlLmExNjM9ODU5NjtlLmExNjQ9ODU5NztlLmExOTY9MTAxMzY7ZS5hMTY1PTEwMTM3O2UuYTE5Mj0xMDEzODtlLmExNjY9MTAxMzk7ZS5hMTY3PTEwMTQwO2UuYTE2OD0xMDE0MTtlLmExNjk9MTAxNDI7ZS5hMTcwPTEwMTQzO2UuYTE3MT0xMDE0NDtlLmExNzI9MTAxNDU7ZS5hMTczPTEwMTQ2O2UuYTE2Mj0xMDE0NztlLmExNzQ9MTAxNDg7ZS5hMTc1PTEwMTQ5O2UuYTE3Nj0xMDE1MDtlLmExNzc9MTAxNTE7ZS5hMTc4PTEwMTUyO2UuYTE3OT0xMDE1MztlLmExOTM9MTAxNTQ7ZS5hMTgwPTEwMTU1O2UuYTE5OT0xMDE1NjtlLmExODE9MTAxNTc7ZS5hMjAwPTEwMTU4O2UuYTE4Mj0xMDE1OTtlLmEyMDE9MTAxNjE7ZS5hMTgzPTEwMTYyO2UuYTE4ND0xMDE2MztlLmExOTc9MTAxNjQ7ZS5hMTg1PTEwMTY1O2UuYTE5ND0xMDE2NjtlLmExOTg9MTAxNjc7ZS5hMTg2PTEwMTY4O2UuYTE5NT0xMDE2OTtlLmExODc9MTAxNzA7ZS5hMTg4PTEwMTcxO2UuYTE4OT0xMDE3MjtlLmExOTA9MTAxNzM7ZS5hMTkxPTEwMTc0O2UuYTg5PTEwMDg4O2UuYTkwPTEwMDg5O2UuYTkzPTEwMDkwO2UuYTk0PTEwMDkxO2UuYTkxPTEwMDkyO2UuYTkyPTEwMDkzO2UuYTIwNT0xMDA5NDtlLmE4NT0xMDA5NTtlLmEyMDY9MTAwOTY7ZS5hODY9MTAwOTc7ZS5hODc9MTAwOTg7ZS5hODg9MTAwOTk7ZS5hOTU9MTAxMDA7ZS5hOTY9MTAxMDE7ZVsiLm5vdGRlZiJdPTB9KSk7dC5nZXREaW5nYmF0c0dseXBoc1VuaWNvZGU9aX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmNsZWFyVW5pY29kZUNhY2hlcz1mdW5jdGlvbiBjbGVhclVuaWNvZGVDYWNoZXMoKXtzLmNsZWFyKCl9O3QuZ2V0Q2hhclVuaWNvZGVDYXRlZ29yeT1mdW5jdGlvbiBnZXRDaGFyVW5pY29kZUNhdGVnb3J5KGUpe2NvbnN0IHQ9cy5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBhPWUubWF0Y2goaSkscj17aXNXaGl0ZXNwYWNlOiEhYT8uWzFdLGlzWmVyb1dpZHRoRGlhY3JpdGljOiEhYT8uWzJdLGlzSW52aXNpYmxlRm9ybWF0TWFyazohIWE/LlszXX07cy5zZXQoZSxyKTtyZXR1cm4gcn07dC5nZXRVbmljb2RlRm9yR2x5cGg9ZnVuY3Rpb24gZ2V0VW5pY29kZUZvckdseXBoKGUsdCl7bGV0IGE9dFtlXTtpZih2b2lkIDAhPT1hKXJldHVybiBhO2lmKCFlKXJldHVybi0xO2lmKCJ1Ij09PWVbMF0pe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IHI7aWYoNz09PXQmJiJuIj09PWVbMV0mJiJpIj09PWVbMl0pcj1lLnN1YnN0cmluZygzKTtlbHNle2lmKCEodD49NSYmdDw9NykpcmV0dXJuLTE7cj1lLnN1YnN0cmluZygxKX1pZihyPT09ci50b1VwcGVyQ2FzZSgpKXthPXBhcnNlSW50KHIsMTYpO2lmKGE+PTApcmV0dXJuIGF9fXJldHVybi0xfTt0LmdldFVuaWNvZGVSYW5nZUZvcj1mdW5jdGlvbiBnZXRVbmljb2RlUmFuZ2VGb3IoZSx0PS0xKXtpZigtMSE9PXQpe2NvbnN0IGE9blt0XTtmb3IobGV0IHI9MCxuPWEubGVuZ3RoO3I8bjtyKz0yKWlmKGU+PWFbcl0mJmU8PWFbcisxXSlyZXR1cm4gdH1mb3IobGV0IHQ9MCxhPW4ubGVuZ3RoO3Q8YTt0Kyspe2NvbnN0IGE9blt0XTtmb3IobGV0IHI9MCxuPWEubGVuZ3RoO3I8bjtyKz0yKWlmKGU+PWFbcl0mJmU8PWFbcisxXSlyZXR1cm4gdH1yZXR1cm4tMX07dC5tYXBTcGVjaWFsVW5pY29kZVZhbHVlcz1mdW5jdGlvbiBtYXBTcGVjaWFsVW5pY29kZVZhbHVlcyhlKXtpZihlPj02NTUyMCYmZTw9NjU1MzUpcmV0dXJuIDA7aWYoZT49NjI5NzYmJmU8PTYzNzQzKXJldHVybiByKClbZV18fGU7aWYoMTczPT09ZSlyZXR1cm4gNDU7cmV0dXJuIGV9O2NvbnN0IHI9KDAsYSgzKS5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWzYzNzIxXT0xNjk7ZVs2MzE5M109MTY5O2VbNjM3MjBdPTE3NDtlWzYzMTk0XT0xNzQ7ZVs2MzcyMl09ODQ4MjtlWzYzMTk1XT04NDgyO2VbNjM3MjldPTkxMjc7ZVs2MzczMF09OTEyODtlWzYzNzMxXT05MTI5O2VbNjM3NDBdPTkxMzE7ZVs2Mzc0MV09OTEzMjtlWzYzNzQyXT05MTMzO2VbNjM3MjZdPTkxMjE7ZVs2MzcyN109OTEyMjtlWzYzNzI4XT05MTIzO2VbNjM3MzddPTkxMjQ7ZVs2MzczOF09OTEyNTtlWzYzNzM5XT05MTI2O2VbNjM3MjNdPTkxMTU7ZVs2MzcyNF09OTExNjtlWzYzNzI1XT05MTE3O2VbNjM3MzRdPTkxMTg7ZVs2MzczNV09OTExOTtlWzYzNzM2XT05MTIwfSkpO2NvbnN0IG49W1swLDEyN10sWzEyOCwyNTVdLFsyNTYsMzgzXSxbMzg0LDU5MV0sWzU5Miw2ODcsNzQyNCw3NTUxLDc1NTIsNzYxNV0sWzY4OCw3NjcsNDI3NTIsNDI3ODNdLFs3NjgsODc5LDc2MTYsNzY3OV0sWzg4MCwxMDIzXSxbMTEzOTIsMTE1MTldLFsxMDI0LDEyNzksMTI4MCwxMzI3LDExNzQ0LDExNzc1LDQyNTYwLDQyNjU1XSxbMTMyOCwxNDIzXSxbMTQyNCwxNTM1XSxbNDIyNDAsNDI1NTldLFsxNTM2LDE3OTEsMTg3MiwxOTE5XSxbMTk4NCwyMDQ3XSxbMjMwNCwyNDMxXSxbMjQzMiwyNTU5XSxbMjU2MCwyNjg3XSxbMjY4OCwyODE1XSxbMjgxNiwyOTQzXSxbMjk0NCwzMDcxXSxbMzA3MiwzMTk5XSxbMzIwMCwzMzI3XSxbMzMyOCwzNDU1XSxbMzU4NCwzNzExXSxbMzcxMiwzODM5XSxbNDI1Niw0MzUxLDExNTIwLDExNTY3XSxbNjkxMiw3MDM5XSxbNDM1Miw0NjA3XSxbNzY4MCw3OTM1LDExMzYwLDExMzkxLDQyNzg0LDQzMDA3XSxbNzkzNiw4MTkxXSxbODE5Miw4MzAzLDExNzc2LDExOTAzXSxbODMwNCw4MzUxXSxbODM1Miw4Mzk5XSxbODQwMCw4NDQ3XSxbODQ0OCw4NTI3XSxbODUyOCw4NTkxXSxbODU5Miw4NzAzLDEwMjI0LDEwMjM5LDEwNDk2LDEwNjIzLDExMDA4LDExMjYzXSxbODcwNCw4OTU5LDEwNzUyLDExMDA3LDEwMTc2LDEwMjIzLDEwNjI0LDEwNzUxXSxbODk2MCw5MjE1XSxbOTIxNiw5Mjc5XSxbOTI4MCw5MzExXSxbOTMxMiw5NDcxXSxbOTQ3Miw5NTk5XSxbOTYwMCw5NjMxXSxbOTYzMiw5NzI3XSxbOTcyOCw5OTgzXSxbOTk4NCwxMDE3NV0sWzEyMjg4LDEyMzUxXSxbMTIzNTIsMTI0NDddLFsxMjQ0OCwxMjU0MywxMjc4NCwxMjc5OV0sWzEyNTQ0LDEyNTkxLDEyNzA0LDEyNzM1XSxbMTI1OTIsMTI2ODddLFs0MzA3Miw0MzEzNV0sWzEyODAwLDEzMDU1XSxbMTMwNTYsMTMzMTFdLFs0NDAzMiw1NTIxNV0sWzU1Mjk2LDU3MzQzXSxbNjc4NDAsNjc4NzFdLFsxOTk2OCw0MDk1OSwxMTkwNCwxMjAzMSwxMjAzMiwxMjI1NSwxMjI3MiwxMjI4NywxMzMxMiwxOTkwMywxMzEwNzIsMTczNzkxLDEyNjg4LDEyNzAzXSxbNTczNDQsNjM3NDNdLFsxMjczNiwxMjc4Myw2Mzc0NCw2NDI1NSwxOTQ1NjAsMTk1MTAzXSxbNjQyNTYsNjQzMzVdLFs2NDMzNiw2NTAyM10sWzY1MDU2LDY1MDcxXSxbNjUwNDAsNjUwNTVdLFs2NTEwNCw2NTEzNV0sWzY1MTM2LDY1Mjc5XSxbNjUyODAsNjU1MTldLFs2NTUyMCw2NTUzNV0sWzM4NDAsNDA5NV0sWzE3OTIsMTg3MV0sWzE5MjAsMTk4M10sWzM0NTYsMzU4M10sWzQwOTYsNDI1NV0sWzQ2MDgsNDk5MSw0OTkyLDUwMjMsMTE2NDgsMTE3NDNdLFs1MDI0LDUxMTldLFs1MTIwLDU3NTldLFs1NzYwLDU3OTFdLFs1NzkyLDU4ODddLFs2MDE2LDYxNDNdLFs2MTQ0LDYzMTldLFsxMDI0MCwxMDQ5NV0sWzQwOTYwLDQyMTI3XSxbNTg4OCw1OTE5LDU5MjAsNTk1MSw1OTUyLDU5ODMsNTk4NCw2MDE1XSxbNjYzMDQsNjYzNTFdLFs2NjM1Miw2NjM4M10sWzY2NTYwLDY2NjM5XSxbMTE4Nzg0LDExOTAzOSwxMTkwNDAsMTE5Mjk1LDExOTI5NiwxMTkzNzVdLFsxMTk4MDgsMTIwODMxXSxbMTA0NDQ4MCwxMDQ4NTczXSxbNjUwMjQsNjUwMzksOTE3NzYwLDkxNzk5OV0sWzkxNzUwNCw5MTc2MzFdLFs2NDAwLDY0NzldLFs2NDgwLDY1MjddLFs2NTI4LDY2MjNdLFs2NjU2LDY2ODddLFsxMTI2NCwxMTM1OV0sWzExNTY4LDExNjQ3XSxbMTk5MDQsMTk5NjddLFs0MzAwOCw0MzA1NV0sWzY1NTM2LDY1NjYzLDY1NjY0LDY1NzkxLDY1NzkyLDY1ODU1XSxbNjU4NTYsNjU5MzVdLFs2NjQzMiw2NjQ2M10sWzY2NDY0LDY2NTI3XSxbNjY2NDAsNjY2ODddLFs2NjY4OCw2NjczNV0sWzY3NTg0LDY3NjQ3XSxbNjgwOTYsNjgxOTFdLFsxMTk1NTIsMTE5NjQ3XSxbNzM3MjgsNzQ3NTEsNzQ3NTIsNzQ4NzldLFsxMTk2NDgsMTE5Njc5XSxbNzA0MCw3MTAzXSxbNzE2OCw3MjQ3XSxbNzI0OCw3Mjk1XSxbNDMxMzYsNDMyMzFdLFs0MzI2NCw0MzMxMV0sWzQzMzEyLDQzMzU5XSxbNDM1MjAsNDM2MTVdLFs2NTkzNiw2NTk5OV0sWzY2ZTMsNjYwNDddLFs2NjIwOCw2NjI3MSw2NjE3Niw2NjIwNyw2Nzg3Miw2NzkwM10sWzEyNzAyNCwxMjcxMzUsMTI2OTc2LDEyNzAyM11dO2NvbnN0IGk9bmV3IFJlZ0V4cCgiXihcXHMpfChcXHB7TW59KXwoXFxwe0NmfSkkIiwidSIpLHM9bmV3IE1hcH0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmdldFNlcmlmRm9udHM9dC5nZXROb25TdGRGb250TWFwPXQuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzPXQuZ2V0Rm9udE5hbWVUb0ZpbGVNYXA9dm9pZCAwO3QuZ2V0U3RhbmRhcmRGb250TmFtZT1mdW5jdGlvbiBnZXRTdGFuZGFyZEZvbnROYW1lKGUpe2NvbnN0IHQ9KDAsbi5ub3JtYWxpemVGb250TmFtZSkoZSk7cmV0dXJuIGkoKVt0XX07dC5nZXRTeW1ib2xzRm9udHM9dC5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmk9dC5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2s9dC5nZXRTdGRGb250TWFwPXZvaWQgMDt0LmlzS25vd25Gb250TmFtZT1mdW5jdGlvbiBpc0tub3duRm9udE5hbWUoZSl7Y29uc3QgdD0oMCxuLm5vcm1hbGl6ZUZvbnROYW1lKShlKTtyZXR1cm4hIShpKClbdF18fG8oKVt0XXx8YygpW3RdfHxsKClbdF0pfTt2YXIgcj1hKDMpLG49YSgzOCk7Y29uc3QgaT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbIlRpbWVzLVJvbWFuIl09IlRpbWVzLVJvbWFuIjtlLkhlbHZldGljYT0iSGVsdmV0aWNhIjtlLkNvdXJpZXI9IkNvdXJpZXIiO2UuU3ltYm9sPSJTeW1ib2wiO2VbIlRpbWVzLUJvbGQiXT0iVGltZXMtQm9sZCI7ZVsiSGVsdmV0aWNhLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkNvdXJpZXItQm9sZCJdPSJDb3VyaWVyLUJvbGQiO2UuWmFwZkRpbmdiYXRzPSJaYXBmRGluZ2JhdHMiO2VbIlRpbWVzLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiO2VbIkhlbHZldGljYS1PYmxpcXVlIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJDb3VyaWVyLU9ibGlxdWUiXT0iQ291cmllci1PYmxpcXVlIjtlWyJUaW1lcy1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiO2VbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSI7ZS5BcmlhbE5hcnJvdz0iSGVsdmV0aWNhIjtlWyJBcmlhbE5hcnJvdy1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbE5hcnJvdy1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWxOYXJyb3ctSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkFyaWFsQmxhY2s9IkhlbHZldGljYSI7ZVsiQXJpYWxCbGFjay1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbEJsYWNrLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbEJsYWNrLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZVsiQXJpYWwtQmxhY2siXT0iSGVsdmV0aWNhIjtlWyJBcmlhbC1CbGFjay1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbC1CbGFjay1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWwtQmxhY2stSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkFyaWFsPSJIZWx2ZXRpY2EiO2VbIkFyaWFsLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbC1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWxNVD0iSGVsdmV0aWNhIjtlWyJBcmlhbC1Cb2xkSXRhbGljTVQiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbC1Cb2xkTVQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsLUl0YWxpY01UIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJBcmlhbC1Cb2xkSXRhbGljTVQtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsLUJvbGRNVC1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbC1JdGFsaWNNVC1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWxVbmljb2RlTVM9IkhlbHZldGljYSI7ZVsiQXJpYWxVbmljb2RlTVMtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWxVbmljb2RlTVMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsVW5pY29kZU1TLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZVsiQ291cmllci1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiO2VbIkNvdXJpZXItSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSI7ZS5Db3VyaWVyTmV3PSJDb3VyaWVyIjtlWyJDb3VyaWVyTmV3LUJvbGQiXT0iQ291cmllci1Cb2xkIjtlWyJDb3VyaWVyTmV3LUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSI7ZVsiQ291cmllck5ldy1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIjtlWyJDb3VyaWVyTmV3UFMtQm9sZEl0YWxpY01UIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiO2VbIkNvdXJpZXJOZXdQUy1Cb2xkTVQiXT0iQ291cmllci1Cb2xkIjtlWyJDb3VyaWVyTmV3UFMtSXRhbGljTVQiXT0iQ291cmllci1PYmxpcXVlIjtlLkNvdXJpZXJOZXdQU01UPSJDb3VyaWVyIjtlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkhlbHZldGljYS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIlN5bWJvbC1Cb2xkIl09IlN5bWJvbCI7ZVsiU3ltYm9sLUJvbGRJdGFsaWMiXT0iU3ltYm9sIjtlWyJTeW1ib2wtSXRhbGljIl09IlN5bWJvbCI7ZS5UaW1lc05ld1JvbWFuPSJUaW1lcy1Sb21hbiI7ZVsiVGltZXNOZXdSb21hbi1Cb2xkIl09IlRpbWVzLUJvbGQiO2VbIlRpbWVzTmV3Um9tYW4tQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiO2UuVGltZXNOZXdSb21hblBTPSJUaW1lcy1Sb21hbiI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGQiXT0iVGltZXMtQm9sZCI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWNNVCJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuUFMtQm9sZE1UIl09IlRpbWVzLUJvbGQiO2VbIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWMiXT0iVGltZXMtSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuUFMtSXRhbGljTVQiXT0iVGltZXMtSXRhbGljIjtlLlRpbWVzTmV3Um9tYW5QU01UPSJUaW1lcy1Sb21hbiI7ZVsiVGltZXNOZXdSb21hblBTTVQtQm9sZCJdPSJUaW1lcy1Cb2xkIjtlWyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiO2VbIlRpbWVzTmV3Um9tYW5QU01ULUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMifSkpO3QuZ2V0U3RkRm9udE1hcD1pO2NvbnN0IHM9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkNvdXJpZXI9IkZveGl0Rml4ZWQucGZiIjtlWyJDb3VyaWVyLUJvbGQiXT0iRm94aXRGaXhlZEJvbGQucGZiIjtlWyJDb3VyaWVyLUJvbGRPYmxpcXVlIl09IkZveGl0Rml4ZWRCb2xkSXRhbGljLnBmYiI7ZVsiQ291cmllci1PYmxpcXVlIl09IkZveGl0Rml4ZWRJdGFsaWMucGZiIjtlLkhlbHZldGljYT0iTGliZXJhdGlvblNhbnMtUmVndWxhci50dGYiO2VbIkhlbHZldGljYS1Cb2xkIl09IkxpYmVyYXRpb25TYW5zLUJvbGQudHRmIjtlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0iTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYiO2VbIkhlbHZldGljYS1PYmxpcXVlIl09IkxpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiO2VbIlRpbWVzLVJvbWFuIl09IkZveGl0U2VyaWYucGZiIjtlWyJUaW1lcy1Cb2xkIl09IkZveGl0U2VyaWZCb2xkLnBmYiI7ZVsiVGltZXMtQm9sZEl0YWxpYyJdPSJGb3hpdFNlcmlmQm9sZEl0YWxpYy5wZmIiO2VbIlRpbWVzLUl0YWxpYyJdPSJGb3hpdFNlcmlmSXRhbGljLnBmYiI7ZS5TeW1ib2w9IkZveGl0U3ltYm9sLnBmYiI7ZS5aYXBmRGluZ2JhdHM9IkZveGl0RGluZ2JhdHMucGZiIjtlWyJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIl09IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIjtlWyJMaWJlcmF0aW9uU2Fucy1Cb2xkIl09IkxpYmVyYXRpb25TYW5zLUJvbGQudHRmIjtlWyJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiXT0iTGliZXJhdGlvblNhbnMtSXRhbGljLnR0ZiI7ZVsiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiJ9KSk7dC5nZXRGb250TmFtZVRvRmlsZU1hcD1zO2NvbnN0IG89KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkNhbGlicmk9IkhlbHZldGljYSI7ZVsiQ2FsaWJyaS1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJDYWxpYnJpLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJDYWxpYnJpLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5DZW50dXJ5R290aGljPSJIZWx2ZXRpY2EiO2VbIkNlbnR1cnlHb3RoaWMtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQ2VudHVyeUdvdGhpYy1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQ2VudHVyeUdvdGhpYy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQ29taWNTYW5zTVM9IkNvbWljIFNhbnMgTVMiO2VbIkNvbWljU2Fuc01TLUJvbGQiXT0iQ29taWMgU2FucyBNUy1Cb2xkIjtlWyJDb21pY1NhbnNNUy1Cb2xkSXRhbGljIl09IkNvbWljIFNhbnMgTVMtQm9sZEl0YWxpYyI7ZVsiQ29taWNTYW5zTVMtSXRhbGljIl09IkNvbWljIFNhbnMgTVMtSXRhbGljIjtlLkltcGFjdD0iSGVsdmV0aWNhIjtlWyJJdGNTeW1ib2wtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiSXRjU3ltYm9sLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJJdGNTeW1ib2wtQm9vayJdPSJIZWx2ZXRpY2EiO2VbIkl0Y1N5bWJvbC1Cb29rSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJJdGNTeW1ib2wtTWVkaXVtIl09IkhlbHZldGljYSI7ZVsiSXRjU3ltYm9sLU1lZGl1bUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5MdWNpZGFDb25zb2xlPSJDb3VyaWVyIjtlWyJMdWNpZGFDb25zb2xlLUJvbGQiXT0iQ291cmllci1Cb2xkIjtlWyJMdWNpZGFDb25zb2xlLUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSI7ZVsiTHVjaWRhQ29uc29sZS1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIjtlWyJMdWNpZGFTYW5zLURlbWkiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIk1TLUdvdGhpYyJdPSJNUyBHb3RoaWMiO2VbIk1TLUdvdGhpYy1Cb2xkIl09Ik1TIEdvdGhpYy1Cb2xkIjtlWyJNUy1Hb3RoaWMtQm9sZEl0YWxpYyJdPSJNUyBHb3RoaWMtQm9sZEl0YWxpYyI7ZVsiTVMtR290aGljLUl0YWxpYyJdPSJNUyBHb3RoaWMtSXRhbGljIjtlWyJNUy1NaW5jaG8iXT0iTVMgTWluY2hvIjtlWyJNUy1NaW5jaG8tQm9sZCJdPSJNUyBNaW5jaG8tQm9sZCI7ZVsiTVMtTWluY2hvLUJvbGRJdGFsaWMiXT0iTVMgTWluY2hvLUJvbGRJdGFsaWMiO2VbIk1TLU1pbmNoby1JdGFsaWMiXT0iTVMgTWluY2hvLUl0YWxpYyI7ZVsiTVMtUEdvdGhpYyJdPSJNUyBQR290aGljIjtlWyJNUy1QR290aGljLUJvbGQiXT0iTVMgUEdvdGhpYy1Cb2xkIjtlWyJNUy1QR290aGljLUJvbGRJdGFsaWMiXT0iTVMgUEdvdGhpYy1Cb2xkSXRhbGljIjtlWyJNUy1QR290aGljLUl0YWxpYyJdPSJNUyBQR290aGljLUl0YWxpYyI7ZVsiTVMtUE1pbmNobyJdPSJNUyBQTWluY2hvIjtlWyJNUy1QTWluY2hvLUJvbGQiXT0iTVMgUE1pbmNoby1Cb2xkIjtlWyJNUy1QTWluY2hvLUJvbGRJdGFsaWMiXT0iTVMgUE1pbmNoby1Cb2xkSXRhbGljIjtlWyJNUy1QTWluY2hvLUl0YWxpYyJdPSJNUyBQTWluY2hvLUl0YWxpYyI7ZS5OdXB0aWFsU2NyaXB0PSJUaW1lcy1JdGFsaWMiO2UuU2Vnb2VVSVN5bWJvbD0iSGVsdmV0aWNhIn0pKTt0LmdldE5vblN0ZEZvbnRNYXA9bztjb25zdCBjPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiQWRvYmUgSmVuc29uIl09ITA7ZVsiQWRvYmUgVGV4dCJdPSEwO2UuQWxiZXJ0dXM9ITA7ZS5BbGR1cz0hMDtlLkFsZXhhbmRyaWE9ITA7ZS5BbGdlcmlhbj0hMDtlWyJBbWVyaWNhbiBUeXBld3JpdGVyIl09ITA7ZS5BbnRpcXVhPSEwO2UuQXBleD0hMDtlLkFybm89ITA7ZS5Bc3Rlcj0hMDtlLkF1cm9yYT0hMDtlLkJhc2tlcnZpbGxlPSEwO2UuQmVsbD0hMDtlLkJlbWJvPSEwO2VbIkJlbWJvIFNjaG9vbGJvb2siXT0hMDtlLkJlbmd1aWF0PSEwO2VbIkJlcmtlbGV5IE9sZCBTdHlsZSJdPSEwO2VbIkJlcm5oYXJkIE1vZGVybiJdPSEwO2VbIkJlcnRob2xkIENpdHkiXT0hMDtlLkJvZG9uaT0hMDtlWyJCYXVlciBCb2RvbmkiXT0hMDtlWyJCb29rIEFudGlxdWEiXT0hMDtlLkJvb2ttYW49ITA7ZVsiQm9yZGVhdXggUm9tYW4iXT0hMDtlWyJDYWxpZm9ybmlhbiBGQiJdPSEwO2UuQ2FsaXN0bz0hMDtlLkNhbHZlcnQ9ITA7ZS5DYXBpdGFscz0hMDtlLkNhbWJyaWE9ITA7ZS5DYXJ0aWVyPSEwO2UuQ2FzbG9uPSEwO2UuQ2F0dWxsPSEwO2UuQ2VudGF1cj0hMDtlWyJDZW50dXJ5IE9sZCBTdHlsZSJdPSEwO2VbIkNlbnR1cnkgU2Nob29sYm9vayJdPSEwO2UuQ2hhcGFycmFsPSEwO2VbIkNoYXJpcyBTSUwiXT0hMDtlLkNoZWx0ZW5oYW09ITA7ZVsiQ2hvbGxhIFNsYWIiXT0hMDtlLkNsYXJlbmRvbj0hMDtlLkNsZWFyZmFjZT0hMDtlLkNvY2hpbj0hMDtlLkNvbG9ubmE9ITA7ZVsiQ29tcHV0ZXIgTW9kZXJuIl09ITA7ZVsiQ29uY3JldGUgUm9tYW4iXT0hMDtlLkNvbnN0YW50aWE9ITA7ZVsiQ29vcGVyIEJsYWNrIl09ITA7ZS5Db3JvbmE9ITA7ZS5FY290eXBlPSEwO2UuRWd5cHRpZW5uZT0hMDtlLkVsZXBoYW50PSEwO2UuRXhjZWxzaW9yPSEwO2UuRmFpcmZpZWxkPSEwO2VbIkZGIFNjYWxhIl09ITA7ZS5Gb2xrYXJkPSEwO2UuRm9vdGxpZ2h0PSEwO2UuRnJlZVNlcmlmPSEwO2VbIkZyaXogUXVhZHJhdGEiXT0hMDtlLkdhcmFtb25kPSEwO2UuR2VudGl1bT0hMDtlLkdlb3JnaWE9ITA7ZS5HbG91Y2VzdGVyPSEwO2VbIkdvdWR5IE9sZCBTdHlsZSJdPSEwO2VbIkdvdWR5IFNjaG9vbGJvb2siXT0hMDtlWyJHb3VkeSBQcm8gRm9udCJdPSEwO2UuR3Jhbmpvbj0hMDtlWyJHdWFyZGlhbiBFZ3lwdGlhbiJdPSEwO2UuSGVhdGhlcj0hMDtlLkhlcmN1bGVzPSEwO2VbIkhpZ2ggVG93ZXIgVGV4dCJdPSEwO2UuSGlyb3NoaWdlPSEwO2VbIkhvZWZsZXIgVGV4dCJdPSEwO2VbIkh1bWFuYSBTZXJpZiJdPSEwO2UuSW1wcmludD0hMDtlWyJJb25pYyBOby4gNSJdPSEwO2UuSmFuc29uPSEwO2UuSm9hbm5hPSEwO2UuS29yaW5uYT0hMDtlLkxleGljb249ITA7ZS5MaWJlcmF0aW9uU2VyaWY9ITA7ZVsiTGliZXJhdGlvbiBTZXJpZiJdPSEwO2VbIkxpbnV4IExpYmVydGluZSJdPSEwO2UuTGl0ZXJhdHVybmF5YT0hMDtlLkx1Y2lkYT0hMDtlWyJMdWNpZGEgQnJpZ2h0Il09ITA7ZS5NZWxpb3I9ITA7ZS5NZW1waGlzPSEwO2UuTWlsbGVyPSEwO2UuTWluaW9uPSEwO2UuTW9kZXJuPSEwO2VbIk1vbmEgTGlzYSJdPSEwO2VbIk1ycyBFYXZlcyJdPSEwO2VbIk1TIFNlcmlmIl09ITA7ZVsiTXVzZW8gU2xhYiJdPSEwO2VbIk5ldyBZb3JrIl09ITA7ZVsiTmltYnVzIFJvbWFuIl09ITA7ZVsiTlBTIFJhd2xpbnNvbiBSb2Fkd2F5Il09ITA7ZS5OdXB0aWFsU2NyaXB0PSEwO2UuUGFsYXRpbm89ITA7ZS5QZXJwZXR1YT0hMDtlLlBsYW50aW49ITA7ZVsiUGxhbnRpbiBTY2hvb2xib29rIl09ITA7ZS5QbGF5YmlsbD0hMDtlWyJQb29yIFJpY2hhcmQiXT0hMDtlWyJSYXdsaW5zb24gUm9hZHdheSJdPSEwO2UuUmVuYXVsdD0hMDtlLlJlcXVpZW09ITA7ZS5Sb2Nrd2VsbD0hMDtlLlJvbWFuPSEwO2VbIlJvdGlzIFNlcmlmIl09ITA7ZS5TYWJvbj0hMDtlLlNjYWxhPSEwO2UuU2VhZ3VsbD0hMDtlLlNpc3RpbmE9ITA7ZS5Tb3V2ZW5pcj0hMDtlLlNUSVg9ITA7ZVsiU3RvbmUgSW5mb3JtYWwiXT0hMDtlWyJTdG9uZSBTZXJpZiJdPSEwO2UuU3lsZmFlbj0hMDtlLlRpbWVzPSEwO2UuVHJhamFuPSEwO2VbIlRyaW5pdMOpIl09ITA7ZVsiVHJ1bXAgTWVkaWFldmFsIl09ITA7ZS5VdG9waWE9ITA7ZVsiVmFsZSBUeXBlIl09ITA7ZVsiQml0c3RyZWFtIFZlcmEiXT0hMDtlWyJWZXJhIFNlcmlmIl09ITA7ZS5WZXJzYWlsbGVzPSEwO2UuV2FudGVkPSEwO2UuV2Vpc3M9ITA7ZVsiV2lkZSBMYXRpbiJdPSEwO2UuV2luZHNvcj0hMDtlLlhJVFM9ITB9KSk7dC5nZXRTZXJpZkZvbnRzPWM7Y29uc3QgbD0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuRGluZ2JhdHM9ITA7ZS5TeW1ib2w9ITA7ZS5aYXBmRGluZ2JhdHM9ITA7ZS5XaW5nZGluZ3M9ITA7ZVsiV2luZ2RpbmdzLUJvbGQiXT0hMDtlWyJXaW5nZGluZ3MtUmVndWxhciJdPSEwfSkpO3QuZ2V0U3ltYm9sc0ZvbnRzPWw7Y29uc3QgaD0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMl09MTA7ZVszXT0zMjtlWzRdPTMzO2VbNV09MzQ7ZVs2XT0zNTtlWzddPTM2O2VbOF09Mzc7ZVs5XT0zODtlWzEwXT0zOTtlWzExXT00MDtlWzEyXT00MTtlWzEzXT00MjtlWzE0XT00MztlWzE1XT00NDtlWzE2XT00NTtlWzE3XT00NjtlWzE4XT00NztlWzE5XT00ODtlWzIwXT00OTtlWzIxXT01MDtlWzIyXT01MTtlWzIzXT01MjtlWzI0XT01MztlWzI1XT01NDtlWzI2XT01NTtlWzI3XT01NjtlWzI4XT01NztlWzI5XT01ODtlWzMwXT04OTQ7ZVszMV09NjA7ZVszMl09NjE7ZVszM109NjI7ZVszNF09NjM7ZVszNV09NjQ7ZVszNl09NjU7ZVszN109NjY7ZVszOF09Njc7ZVszOV09Njg7ZVs0MF09Njk7ZVs0MV09NzA7ZVs0Ml09NzE7ZVs0M109NzI7ZVs0NF09NzM7ZVs0NV09NzQ7ZVs0Nl09NzU7ZVs0N109NzY7ZVs0OF09Nzc7ZVs0OV09Nzg7ZVs1MF09Nzk7ZVs1MV09ODA7ZVs1Ml09ODE7ZVs1M109ODI7ZVs1NF09ODM7ZVs1NV09ODQ7ZVs1Nl09ODU7ZVs1N109ODY7ZVs1OF09ODc7ZVs1OV09ODg7ZVs2MF09ODk7ZVs2MV09OTA7ZVs2Ml09OTE7ZVs2M109OTI7ZVs2NF09OTM7ZVs2NV09OTQ7ZVs2Nl09OTU7ZVs2N109OTY7ZVs2OF09OTc7ZVs2OV09OTg7ZVs3MF09OTk7ZVs3MV09MTAwO2VbNzJdPTEwMTtlWzczXT0xMDI7ZVs3NF09MTAzO2VbNzVdPTEwNDtlWzc2XT0xMDU7ZVs3N109MTA2O2VbNzhdPTEwNztlWzc5XT0xMDg7ZVs4MF09MTA5O2VbODFdPTExMDtlWzgyXT0xMTE7ZVs4M109MTEyO2VbODRdPTExMztlWzg1XT0xMTQ7ZVs4Nl09MTE1O2VbODddPTExNjtlWzg4XT0xMTc7ZVs4OV09MTE4O2VbOTBdPTExOTtlWzkxXT0xMjA7ZVs5Ml09MTIxO2VbOTNdPTEyMjtlWzk0XT0xMjM7ZVs5NV09MTI0O2VbOTZdPTEyNTtlWzk3XT0xMjY7ZVs5OF09MTk2O2VbOTldPTE5NztlWzEwMF09MTk5O2VbMTAxXT0yMDE7ZVsxMDJdPTIwOTtlWzEwM109MjE0O2VbMTA0XT0yMjA7ZVsxMDVdPTIyNTtlWzEwNl09MjI0O2VbMTA3XT0yMjY7ZVsxMDhdPTIyODtlWzEwOV09MjI3O2VbMTEwXT0yMjk7ZVsxMTFdPTIzMTtlWzExMl09MjMzO2VbMTEzXT0yMzI7ZVsxMTRdPTIzNDtlWzExNV09MjM1O2VbMTE2XT0yMzc7ZVsxMTddPTIzNjtlWzExOF09MjM4O2VbMTE5XT0yMzk7ZVsxMjBdPTI0MTtlWzEyMV09MjQzO2VbMTIyXT0yNDI7ZVsxMjNdPTI0NDtlWzEyNF09MjQ2O2VbMTI1XT0yNDU7ZVsxMjZdPTI1MDtlWzEyN109MjQ5O2VbMTI4XT0yNTE7ZVsxMjldPTI1MjtlWzEzMF09ODIyNDtlWzEzMV09MTc2O2VbMTMyXT0xNjI7ZVsxMzNdPTE2MztlWzEzNF09MTY3O2VbMTM1XT04MjI2O2VbMTM2XT0xODI7ZVsxMzddPTIyMztlWzEzOF09MTc0O2VbMTM5XT0xNjk7ZVsxNDBdPTg0ODI7ZVsxNDFdPTE4MDtlWzE0Ml09MTY4O2VbMTQzXT04ODAwO2VbMTQ0XT0xOTg7ZVsxNDVdPTIxNjtlWzE0Nl09ODczNDtlWzE0N109MTc3O2VbMTQ4XT04ODA0O2VbMTQ5XT04ODA1O2VbMTUwXT0xNjU7ZVsxNTFdPTE4MTtlWzE1Ml09ODcwNjtlWzE1M109ODcyMTtlWzE1NF09ODcxOTtlWzE1Nl09ODc0NztlWzE1N109MTcwO2VbMTU4XT0xODY7ZVsxNTldPTg0ODY7ZVsxNjBdPTIzMDtlWzE2MV09MjQ4O2VbMTYyXT0xOTE7ZVsxNjNdPTE2MTtlWzE2NF09MTcyO2VbMTY1XT04NzMwO2VbMTY2XT00MDI7ZVsxNjddPTg3NzY7ZVsxNjhdPTg3MTA7ZVsxNjldPTE3MTtlWzE3MF09MTg3O2VbMTcxXT04MjMwO2VbMTc5XT04MjIwO2VbMTgwXT04MjIxO2VbMTgxXT04MjE2O2VbMTgyXT04MjE3O2VbMjAwXT0xOTM7ZVsyMDNdPTIwNTtlWzIwN109MjExO2VbMjEwXT0yMTg7ZVsyMjNdPTcxMTtlWzIyNF09MzIxO2VbMjI1XT0zMjI7ZVsyMjZdPTM1MjtlWzIyN109MzUzO2VbMjI4XT0zODE7ZVsyMjldPTM4MjtlWzIzM109MjIxO2VbMjM0XT0yNTM7ZVsyNTJdPTI2MztlWzI1M109MjY4O2VbMjU0XT0yNjk7ZVsyNThdPTI1ODtlWzI2MF09MjYwO2VbMjYxXT0yNjE7ZVsyNjVdPTI4MDtlWzI2Nl09MjgxO2VbMjY3XT0yODI7ZVsyNjhdPTI4MztlWzI2OV09MzEzO2VbMjc1XT0zMjM7ZVsyNzZdPTMyNDtlWzI3OF09MzI4O2VbMjgzXT0zNDQ7ZVsyODRdPTM0NTtlWzI4NV09MzQ2O2VbMjg2XT0zNDc7ZVsyOTJdPTM2NztlWzI5NV09Mzc3O2VbMjk2XT0zNzg7ZVsyOThdPTM4MDtlWzMwNV09OTYzO2VbMzA2XT05NjQ7ZVszMDddPTk2NjtlWzMwOF09ODIxNTtlWzMwOV09ODI1MjtlWzMxMF09ODMxOTtlWzMxMV09ODM1OTtlWzMxMl09ODU5MjtlWzMxM109ODU5MztlWzMzN109OTU1MjtlWzQ5M109MTAzOTtlWzQ5NF09MTA0MDtlWzY3Ml09MTQ4ODtlWzY3M109MTQ4OTtlWzY3NF09MTQ5MDtlWzY3NV09MTQ5MTtlWzY3Nl09MTQ5MjtlWzY3N109MTQ5MztlWzY3OF09MTQ5NDtlWzY3OV09MTQ5NTtlWzY4MF09MTQ5NjtlWzY4MV09MTQ5NztlWzY4Ml09MTQ5ODtlWzY4M109MTQ5OTtlWzY4NF09MTUwMDtlWzY4NV09MTUwMTtlWzY4Nl09MTUwMjtlWzY4N109MTUwMztlWzY4OF09MTUwNDtlWzY4OV09MTUwNTtlWzY5MF09MTUwNjtlWzY5MV09MTUwNztlWzY5Ml09MTUwODtlWzY5M109MTUwOTtlWzY5NF09MTUxMDtlWzY5NV09MTUxMTtlWzY5Nl09MTUxMjtlWzY5N109MTUxMztlWzY5OF09MTUxNDtlWzcwNV09MTUyNDtlWzcwNl09ODM2MjtlWzcxMF09NjQyODg7ZVs3MTFdPTY0Mjk4O2VbNzU5XT0xNjE3O2VbNzYxXT0xNzc2O2VbNzYzXT0xNzc4O2VbNzc1XT0xNjUyO2VbNzc3XT0xNzY0O2VbNzc4XT0xNzgwO2VbNzc5XT0xNzgxO2VbNzgwXT0xNzgyO2VbNzgyXT03NzE7ZVs3ODNdPTY0NzI2O2VbNzg2XT04MzYzO2VbNzg4XT04NTMyO2VbNzkwXT03Njg7ZVs3OTFdPTc2OTtlWzc5Ml09NzY4O2VbNzk1XT04MDM7ZVs3OTddPTY0MzM2O2VbNzk4XT02NDMzNztlWzc5OV09NjQzNDI7ZVs4MDBdPTY0MzQzO2VbODAxXT02NDM0NDtlWzgwMl09NjQzNDU7ZVs4MDNdPTY0MzYyO2VbODA0XT02NDM2MztlWzgwNV09NjQzNjQ7ZVsyNDI0XT03ODIxO2VbMjQyNV09NzgyMjtlWzI0MjZdPTc4MjM7ZVsyNDI3XT03ODI0O2VbMjQyOF09NzgyNTtlWzI0MjldPTc4MjY7ZVsyNDMwXT03ODI3O2VbMjQzM109NzY4MjtlWzI2NzhdPTgwNDU7ZVsyNjc5XT04MDQ2O2VbMjgzMF09MTU1MjtlWzI4MzhdPTY4NjtlWzI4NDBdPTc1MTtlWzI4NDJdPTc1MztlWzI4NDNdPTc1NDtlWzI4NDRdPTc1NTtlWzI4NDZdPTc1NztlWzI4NTZdPTc2NztlWzI4NTddPTg0ODtlWzI4NThdPTg0OTtlWzI4NjJdPTg1MztlWzI4NjNdPTg1NDtlWzI4NjRdPTg1NTtlWzI4NjVdPTg2MTtlWzI4NjZdPTg2MjtlWzI5MDZdPTc0NjA7ZVsyOTA4XT03NDYyO2VbMjkwOV09NzQ2MztlWzI5MTBdPTc0NjQ7ZVsyOTEyXT03NDY2O2VbMjkxM109NzQ2NztlWzI5MTRdPTc0Njg7ZVsyOTE2XT03NDcwO2VbMjkxN109NzQ3MTtlWzI5MThdPTc0NzI7ZVsyOTIwXT03NDc0O2VbMjkyMV09NzQ3NTtlWzI5MjJdPTc0NzY7ZVsyOTI0XT03NDc4O2VbMjkyNV09NzQ3OTtlWzI5MjZdPTc0ODA7ZVsyOTI4XT03NDgyO2VbMjkyOV09NzQ4MztlWzI5MzBdPTc0ODQ7ZVsyOTMyXT03NDg2O2VbMjkzM109NzQ4NztlWzI5MzRdPTc0ODg7ZVsyOTM2XT03NDkwO2VbMjkzN109NzQ5MTtlWzI5MzhdPTc0OTI7ZVsyOTQwXT03NDk0O2VbMjk0MV09NzQ5NTtlWzI5NDJdPTc0OTY7ZVsyOTQ0XT03NDk4O2VbMjk0Nl09NzUwMDtlWzI5NDhdPTc1MDI7ZVsyOTUwXT03NTA0O2VbMjk1MV09NzUwNTtlWzI5NTJdPTc1MDY7ZVsyOTU0XT03NTA4O2VbMjk1NV09NzUwOTtlWzI5NTZdPTc1MTA7ZVsyOTU4XT03NTEyO2VbMjk1OV09NzUxMztlWzI5NjBdPTc1MTQ7ZVsyOTYyXT03NTE2O2VbMjk2M109NzUxNztlWzI5NjRdPTc1MTg7ZVsyOTY2XT03NTIwO2VbMjk2N109NzUyMTtlWzI5NjhdPTc1MjI7ZVsyOTcwXT03NTI0O2VbMjk3MV09NzUyNTtlWzI5NzJdPTc1MjY7ZVsyOTc0XT03NTI4O2VbMjk3NV09NzUyOTtlWzI5NzZdPTc1MzA7ZVsyOTc4XT0xNTM3O2VbMjk3OV09MTUzODtlWzI5ODBdPTE1Mzk7ZVsyOTgyXT0xNTQ5O2VbMjk4M109MTU1MTtlWzI5ODRdPTE1NTI7ZVsyOTg2XT0xNTU0O2VbMjk4N109MTU1NTtlWzI5ODhdPTE1NTY7ZVsyOTkwXT0xNjIzO2VbMjk5MV09MTYyNDtlWzI5OTVdPTE3NzU7ZVsyOTk5XT0xNzkxO2VbMzAwMl09NjQyOTA7ZVszMDAzXT02NDI5MTtlWzMwMDRdPTY0MjkyO2VbMzAwNl09NjQyOTQ7ZVszMDA3XT02NDI5NTtlWzMwMDhdPTY0Mjk2O2VbMzAxMV09MTkwMDtlWzMwMTRdPTgyMjM7ZVszMDE1XT04MjQ0O2VbMzAxN109NzUzMjtlWzMwMThdPTc1MzM7ZVszMDE5XT03NTM0O2VbMzA3NV09NzU5MDtlWzMwNzZdPTc1OTE7ZVszMDc5XT03NTk0O2VbMzA4MF09NzU5NTtlWzMwODNdPTc1OTg7ZVszMDg0XT03NTk5O2VbMzA4N109NzYwMjtlWzMwODhdPTc2MDM7ZVszMDkxXT03NjA2O2VbMzA5Ml09NzYwNztlWzMwOTVdPTc2MTA7ZVszMDk2XT03NjExO2VbMzA5OV09NzYxNDtlWzMxMDBdPTc2MTU7ZVszMTAzXT03NjE4O2VbMzEwNF09NzYxOTtlWzMxMDddPTgzMzc7ZVszMTA4XT04MzM4O2VbMzExNl09MTg4NDtlWzMxMTldPTE4ODU7ZVszMTIwXT0xODg1O2VbMzEyM109MTg4NjtlWzMxMjRdPTE4ODY7ZVszMTI3XT0xODg3O2VbMzEyOF09MTg4NztlWzMxMzFdPTE4ODg7ZVszMTMyXT0xODg4O2VbMzEzNV09MTg4OTtlWzMxMzZdPTE4ODk7ZVszMTM5XT0xODkwO2VbMzE0MF09MTg5MDtlWzMxNDNdPTE4OTE7ZVszMTQ0XT0xODkxO2VbMzE0N109MTg5MjtlWzMxNDhdPTE4OTI7ZVszMTUzXT01ODA7ZVszMTU0XT01ODE7ZVszMTU3XT01ODQ7ZVszMTU4XT01ODU7ZVszMTYxXT01ODg7ZVszMTYyXT01ODk7ZVszMTY1XT04OTE7ZVszMTY2XT04OTI7ZVszMTY5XT0xMjc0O2VbMzE3MF09MTI3NTtlWzMxNzNdPTEyNzg7ZVszMTc0XT0xMjc5O2VbMzE4MV09NzYyMjtlWzMxODJdPTc2MjM7ZVszMjgyXT0xMTc5OTtlWzMzMTZdPTU3ODtlWzMzNzldPTQyNzg1O2VbMzM5M109MTE1OTtlWzM0MTZdPTgzNzd9KSk7dC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHM9aDtjb25zdCB1PSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsyMjddPTMyMjtlWzI2NF09MjYxO2VbMjkxXT0zNDZ9KSk7dC5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2s9dTtjb25zdCBkPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsxXT0zMjtlWzRdPTY1O2VbNV09MTkyO2VbNl09MTkzO2VbOV09MTk2O2VbMTddPTY2O2VbMThdPTY3O2VbMjFdPTI2ODtlWzI0XT02ODtlWzI4XT02OTtlWzI5XT0yMDA7ZVszMF09MjAxO2VbMzJdPTI4MjtlWzM4XT03MDtlWzM5XT03MTtlWzQ0XT03MjtlWzQ3XT03MztlWzQ4XT0yMDQ7ZVs0OV09MjA1O2VbNThdPTc0O2VbNjBdPTc1O2VbNjJdPTc2O2VbNjhdPTc3O2VbNjldPTc4O2VbNzVdPTc5O2VbNzZdPTIxMDtlWzgwXT0yMTQ7ZVs4N109ODA7ZVs4OV09ODE7ZVs5MF09ODI7ZVs5Ml09MzQ0O2VbOTRdPTgzO2VbOTddPTM1MjtlWzEwMF09ODQ7ZVsxMDRdPTg1O2VbMTA5XT0yMjA7ZVsxMTVdPTg2O2VbMTE2XT04NztlWzEyMV09ODg7ZVsxMjJdPTg5O2VbMTI0XT0yMjE7ZVsxMjddPTkwO2VbMTI5XT0zODE7ZVsyNThdPTk3O2VbMjU5XT0yMjQ7ZVsyNjBdPTIyNTtlWzI2M109MjI4O2VbMjY4XT0yNjE7ZVsyNzFdPTk4O2VbMjcyXT05OTtlWzI3M109MjYzO2VbMjc1XT0yNjk7ZVsyODJdPTEwMDtlWzI4Nl09MTAxO2VbMjg3XT0yMzI7ZVsyODhdPTIzMztlWzI5MF09MjgzO2VbMjk1XT0yODE7ZVsyOTZdPTEwMjtlWzMzNl09MTAzO2VbMzQ2XT0xMDQ7ZVszNDldPTEwNTtlWzM1MF09MjM2O2VbMzUxXT0yMzc7ZVszNjFdPTEwNjtlWzM2NF09MTA3O2VbMzY3XT0xMDg7ZVszNzFdPTMyMjtlWzM3M109MTA5O2VbMzc0XT0xMTA7ZVszODFdPTExMTtlWzM4Ml09MjQyO2VbMzgzXT0yNDM7ZVszODZdPTI0NjtlWzM5M109MTEyO2VbMzk1XT0xMTM7ZVszOTZdPTExNDtlWzM5OF09MzQ1O2VbNDAwXT0xMTU7ZVs0MDFdPTM0NztlWzQwM109MzUzO2VbNDEwXT0xMTY7ZVs0MzddPTExNztlWzQ0Ml09MjUyO2VbNDQ4XT0xMTg7ZVs0NDldPTExOTtlWzQ1NF09MTIwO2VbNDU1XT0xMjE7ZVs0NTddPTI1MztlWzQ2MF09MTIyO2VbNDYyXT0zODI7ZVs0NjNdPTM4MDtlWzg1M109NDQ7ZVs4NTVdPTU4O2VbODU2XT00NjtlWzg3Nl09NDc7ZVs4NzhdPTQ1O2VbODgyXT00NTtlWzg5NF09NDA7ZVs4OTVdPTQxO2VbODk2XT05MTtlWzg5N109OTM7ZVs5MjNdPTY0O2VbMTAwNF09NDg7ZVsxMDA1XT00OTtlWzEwMDZdPTUwO2VbMTAwN109NTE7ZVsxMDA4XT01MjtlWzEwMDldPTUzO2VbMTAxMF09NTQ7ZVsxMDExXT01NTtlWzEwMTJdPTU2O2VbMTAxM109NTc7ZVsxMDgxXT0zNztlWzEwODVdPTQzO2VbMTA4Nl09NDV9KSk7dC5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmk9ZH0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlRvVW5pY29kZU1hcD10LklkZW50aXR5VG9Vbmljb2RlTWFwPXZvaWQgMDt2YXIgcj1hKDIpO3QuVG9Vbmljb2RlTWFwPWNsYXNzIFRvVW5pY29kZU1hcHtjb25zdHJ1Y3RvcihlPVtdKXt0aGlzLl9tYXA9ZX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX21hcC5sZW5ndGh9Zm9yRWFjaChlKXtmb3IoY29uc3QgdCBpbiB0aGlzLl9tYXApZSh0LHRoaXMuX21hcFt0XS5jaGFyQ29kZUF0KDApKX1oYXMoZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX1nZXQoZSl7cmV0dXJuIHRoaXMuX21hcFtlXX1jaGFyQ29kZU9mKGUpe2NvbnN0IHQ9dGhpcy5fbWFwO2lmKHQubGVuZ3RoPD02NTUzNilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcihjb25zdCBhIGluIHQpaWYodFthXT09PWUpcmV0dXJuIDB8YTtyZXR1cm4tMX1hbWVuZChlKXtmb3IoY29uc3QgdCBpbiBlKXRoaXMuX21hcFt0XT1lW3RdfX07dC5JZGVudGl0eVRvVW5pY29kZU1hcD1jbGFzcyBJZGVudGl0eVRvVW5pY29kZU1hcHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmlyc3RDaGFyPWU7dGhpcy5sYXN0Q2hhcj10fWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5sYXN0Q2hhcisxLXRoaXMuZmlyc3RDaGFyfWZvckVhY2goZSl7Zm9yKGxldCB0PXRoaXMuZmlyc3RDaGFyLGE9dGhpcy5sYXN0Q2hhcjt0PD1hO3QrKyllKHQsdCl9aGFzKGUpe3JldHVybiB0aGlzLmZpcnN0Q2hhcjw9ZSYmZTw9dGhpcy5sYXN0Q2hhcn1nZXQoZSl7aWYodGhpcy5maXJzdENoYXI8PWUmJmU8PXRoaXMubGFzdENoYXIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSl9Y2hhckNvZGVPZihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZT49dGhpcy5maXJzdENoYXImJmU8PXRoaXMubGFzdENoYXI/ZTotMX1hbWVuZChlKXsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGFtZW5kKCkiKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ0ZGRm9udD12b2lkIDA7dmFyIHI9YSgzNSksbj1hKDM4KSxpPWEoMik7dC5DRkZGb250PWNsYXNzIENGRkZvbnR7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnByb3BlcnRpZXM9dDtjb25zdCBhPW5ldyByLkNGRlBhcnNlcihlLHQsbi5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpO3RoaXMuY2ZmPWEucGFyc2UoKTt0aGlzLmNmZi5kdXBsaWNhdGVGaXJzdEdseXBoKCk7Y29uc3Qgcz1uZXcgci5DRkZDb21waWxlcih0aGlzLmNmZik7dGhpcy5zZWFjcz10aGlzLmNmZi5zZWFjczt0cnl7dGhpcy5kYXRhPXMuY29tcGlsZSgpfWNhdGNoeygwLGkud2FybikoIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIit0LmxvYWRlZE5hbWUpO3RoaXMuZGF0YT1lfXRoaXMuX2NyZWF0ZUJ1aWx0SW5FbmNvZGluZygpfWdldCBudW1HbHlwaHMoKXtyZXR1cm4gdGhpcy5jZmYuY2hhclN0cmluZ3MuY291bnR9Z2V0Q2hhcnNldCgpe3JldHVybiB0aGlzLmNmZi5jaGFyc2V0LmNoYXJzZXR9Z2V0R2x5cGhNYXBwaW5nKCl7Y29uc3QgZT10aGlzLmNmZix0PXRoaXMucHJvcGVydGllcyx7Y2lkVG9HaWRNYXA6YSxjTWFwOnJ9PXQsaT1lLmNoYXJzZXQuY2hhcnNldDtsZXQgcyxvO2lmKHQuY29tcG9zaXRlKXtsZXQgdCxuO2lmKGE/Lmxlbmd0aD4wKXt0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBlPTAscj1hLmxlbmd0aDtlPHI7ZSsrKXtjb25zdCByPWFbZV07dm9pZCAwIT09ciYmKHRbcl09ZSl9fXM9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlLmlzQ0lERm9udClmb3Iobz0wO288aS5sZW5ndGg7bysrKXtjb25zdCBlPWlbb107bj1yLmNoYXJDb2RlT2YoZSk7dm9pZCAwIT09dD8uW25dJiYobj10W25dKTtzW25dPW99ZWxzZSBmb3Iobz0wO288ZS5jaGFyU3RyaW5ncy5jb3VudDtvKyspe249ci5jaGFyQ29kZU9mKG8pO3Nbbl09b31yZXR1cm4gc31sZXQgYz1lLmVuY29kaW5nP2UuZW5jb2RpbmcuZW5jb2Rpbmc6bnVsbDt0LmlzSW50ZXJuYWxGb250JiYoYz10LmRlZmF1bHRFbmNvZGluZyk7cz0oMCxuLnR5cGUxRm9udEdseXBoTWFwcGluZykodCxjLGkpO3JldHVybiBzfWhhc0dseXBoSWQoZSl7cmV0dXJuIHRoaXMuY2ZmLmhhc0dseXBoSWQoZSl9X2NyZWF0ZUJ1aWx0SW5FbmNvZGluZygpe2NvbnN0e2NoYXJzZXQ6ZSxlbmNvZGluZzp0fT10aGlzLmNmZjtpZighZXx8IXQpcmV0dXJuO2NvbnN0IGE9ZS5jaGFyc2V0LHI9dC5lbmNvZGluZyxuPVtdO2Zvcihjb25zdCBlIGluIHIpe2NvbnN0IHQ9cltlXTtpZih0Pj0wKXtjb25zdCByPWFbdF07ciYmKG5bZV09cil9fW4ubGVuZ3RoPjAmJih0aGlzLnByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nPW4pfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Gb250UmVuZGVyZXJGYWN0b3J5PXZvaWQgMDt2YXIgcj1hKDIpLG49YSgzNSksaT1hKDM5KSxzPWEoMzcpLG89YSg4KTtmdW5jdGlvbiBnZXRVaW50MzIoZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdKT4+PjB9ZnVuY3Rpb24gZ2V0VWludDE2KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfWZ1bmN0aW9uIGdldEludDE2KGUsdCl7cmV0dXJuKGVbdF08PDI0fGVbdCsxXTw8MTYpPj4xNn1mdW5jdGlvbiBnZXRJbnQ4KGUsdCl7cmV0dXJuIGVbdF08PDI0Pj4yNH1mdW5jdGlvbiBnZXRGbG9hdDIxNChlLHQpe3JldHVybiBnZXRJbnQxNihlLHQpLzE2Mzg0fWZ1bmN0aW9uIGdldFN1YnJvdXRpbmVCaWFzKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGE9MzI3Njg7dDwxMjQwP2E9MTA3OnQ8MzM5MDAmJihhPTExMzEpO3JldHVybiBhfWZ1bmN0aW9uIHBhcnNlQ21hcChlLHQsYSl7Y29uc3Qgbj0xPT09Z2V0VWludDE2KGUsdCsyKT9nZXRVaW50MzIoZSx0KzgpOmdldFVpbnQzMihlLHQrMTYpLGk9Z2V0VWludDE2KGUsdCtuKTtsZXQgcyxvLGM7aWYoND09PWkpe2dldFVpbnQxNihlLHQrbisyKTtjb25zdCBhPWdldFVpbnQxNihlLHQrbis2KT4+MTtvPXQrbisxNDtzPVtdO2ZvcihjPTA7YzxhO2MrKyxvKz0yKXNbY109e2VuZDpnZXRVaW50MTYoZSxvKX07bys9Mjtmb3IoYz0wO2M8YTtjKyssbys9MilzW2NdLnN0YXJ0PWdldFVpbnQxNihlLG8pO2ZvcihjPTA7YzxhO2MrKyxvKz0yKXNbY10uaWREZWx0YT1nZXRVaW50MTYoZSxvKTtmb3IoYz0wO2M8YTtjKyssbys9Mil7bGV0IHQ9Z2V0VWludDE2KGUsbyk7aWYoMCE9PXQpe3NbY10uaWRzPVtdO2ZvcihsZXQgYT0wLHI9c1tjXS5lbmQtc1tjXS5zdGFydCsxO2E8cjthKyspe3NbY10uaWRzW2FdPWdldFVpbnQxNihlLG8rdCk7dCs9Mn19fXJldHVybiBzfWlmKDEyPT09aSl7Y29uc3QgYT1nZXRVaW50MzIoZSx0K24rMTIpO289dCtuKzE2O3M9W107Zm9yKGM9MDtjPGE7YysrKXt0PWdldFVpbnQzMihlLG8pO3MucHVzaCh7c3RhcnQ6dCxlbmQ6Z2V0VWludDMyKGUsbys0KSxpZERlbHRhOmdldFVpbnQzMihlLG8rOCktdH0pO28rPTEyfXJldHVybiBzfXRocm93IG5ldyByLkZvcm1hdEVycm9yKGB1bnN1cHBvcnRlZCBjbWFwOiAke2l9YCl9ZnVuY3Rpb24gcGFyc2VDZmYoZSx0LGEscil7Y29uc3QgaT1uZXcgbi5DRkZQYXJzZXIobmV3IG8uU3RyZWFtKGUsdCxhLXQpLHt9LHIpLnBhcnNlKCk7cmV0dXJue2dseXBoczppLmNoYXJTdHJpbmdzLm9iamVjdHMsc3VicnM6aS50b3BEaWN0LnByaXZhdGVEaWN0Py5zdWJyc0luZGV4Py5vYmplY3RzLGdzdWJyczppLmdsb2JhbFN1YnJJbmRleD8ub2JqZWN0cyxpc0NGRkNJREZvbnQ6aS5pc0NJREZvbnQsZmRTZWxlY3Q6aS5mZFNlbGVjdCxmZEFycmF5OmkuZmRBcnJheX19ZnVuY3Rpb24gbG9va3VwQ21hcChlLHQpe2NvbnN0IGE9dC5jb2RlUG9pbnRBdCgwKTtsZXQgcj0wLG49MCxpPWUubGVuZ3RoLTE7Zm9yKDtuPGk7KXtjb25zdCB0PW4raSsxPj4xO2E8ZVt0XS5zdGFydD9pPXQtMTpuPXR9ZVtuXS5zdGFydDw9YSYmYTw9ZVtuXS5lbmQmJihyPWVbbl0uaWREZWx0YSsoZVtuXS5pZHM/ZVtuXS5pZHNbYS1lW25dLnN0YXJ0XTphKSY2NTUzNSk7cmV0dXJue2NoYXJDb2RlOmEsZ2x5cGhJZDpyfX1mdW5jdGlvbiBjb21waWxlR2x5ZihlLHQsYSl7ZnVuY3Rpb24gbW92ZVRvKGUsYSl7dC5wdXNoKHtjbWQ6Im1vdmVUbyIsYXJnczpbZSxhXX0pfWZ1bmN0aW9uIGxpbmVUbyhlLGEpe3QucHVzaCh7Y21kOiJsaW5lVG8iLGFyZ3M6W2UsYV19KX1mdW5jdGlvbiBxdWFkcmF0aWNDdXJ2ZVRvKGUsYSxyLG4pe3QucHVzaCh7Y21kOiJxdWFkcmF0aWNDdXJ2ZVRvIixhcmdzOltlLGEscixuXX0pfWxldCByPTA7Y29uc3Qgbj1nZXRJbnQxNihlLHIpO2xldCBpLHM9MCxvPTA7cis9MTA7aWYobjwwKWRve2k9Z2V0VWludDE2KGUscik7Y29uc3Qgbj1nZXRVaW50MTYoZSxyKzIpO3IrPTQ7bGV0IGMsbDtpZigxJmkpe2lmKDImaSl7Yz1nZXRJbnQxNihlLHIpO2w9Z2V0SW50MTYoZSxyKzIpfWVsc2V7Yz1nZXRVaW50MTYoZSxyKTtsPWdldFVpbnQxNihlLHIrMil9cis9NH1lbHNlIGlmKDImaSl7Yz1nZXRJbnQ4KGUscisrKTtsPWdldEludDgoZSxyKyspfWVsc2V7Yz1lW3IrK107bD1lW3IrK119aWYoMiZpKXtzPWM7bz1sfWVsc2V7cz0wO289MH1sZXQgaD0xLHU9MSxkPTAsZj0wO2lmKDgmaSl7aD11PWdldEZsb2F0MjE0KGUscik7cis9Mn1lbHNlIGlmKDY0Jmkpe2g9Z2V0RmxvYXQyMTQoZSxyKTt1PWdldEZsb2F0MjE0KGUscisyKTtyKz00fWVsc2UgaWYoMTI4Jmkpe2g9Z2V0RmxvYXQyMTQoZSxyKTtkPWdldEZsb2F0MjE0KGUscisyKTtmPWdldEZsb2F0MjE0KGUscis0KTt1PWdldEZsb2F0MjE0KGUscis2KTtyKz04fWNvbnN0IGc9YS5nbHlwaHNbbl07aWYoZyl7dC5wdXNoKHtjbWQ6InNhdmUifSx7Y21kOiJ0cmFuc2Zvcm0iLGFyZ3M6W2gsZCxmLHUscyxvXX0pO2NvbXBpbGVHbHlmKGcsdCxhKTt0LnB1c2goe2NtZDoicmVzdG9yZSJ9KX19d2hpbGUoMzImaSk7ZWxzZXtjb25zdCB0PVtdO2xldCBhLGM7Zm9yKGE9MDthPG47YSsrKXt0LnB1c2goZ2V0VWludDE2KGUscikpO3IrPTJ9cis9MitnZXRVaW50MTYoZSxyKTtjb25zdCBsPXQuYXQoLTEpKzEsaD1bXTtmb3IoO2gubGVuZ3RoPGw7KXtpPWVbcisrXTtsZXQgdD0xOzgmaSYmKHQrPWVbcisrXSk7Zm9yKDt0LS0gPjA7KWgucHVzaCh7ZmxhZ3M6aX0pfWZvcihhPTA7YTxsO2ErKyl7c3dpdGNoKDE4JmhbYV0uZmxhZ3Mpe2Nhc2UgMDpzKz1nZXRJbnQxNihlLHIpO3IrPTI7YnJlYWs7Y2FzZSAyOnMtPWVbcisrXTticmVhaztjYXNlIDE4OnMrPWVbcisrXX1oW2FdLng9c31mb3IoYT0wO2E8bDthKyspe3N3aXRjaCgzNiZoW2FdLmZsYWdzKXtjYXNlIDA6bys9Z2V0SW50MTYoZSxyKTtyKz0yO2JyZWFrO2Nhc2UgNDpvLT1lW3IrK107YnJlYWs7Y2FzZSAzNjpvKz1lW3IrK119aFthXS55PW99bGV0IHU9MDtmb3Iocj0wO3I8bjtyKyspe2NvbnN0IGU9dFtyXSxuPWguc2xpY2UodSxlKzEpO2lmKDEmblswXS5mbGFncyluLnB1c2goblswXSk7ZWxzZSBpZigxJm4uYXQoLTEpLmZsYWdzKW4udW5zaGlmdChuLmF0KC0xKSk7ZWxzZXtjb25zdCBlPXtmbGFnczoxLHg6KG5bMF0ueCtuLmF0KC0xKS54KS8yLHk6KG5bMF0ueStuLmF0KC0xKS55KS8yfTtuLnVuc2hpZnQoZSk7bi5wdXNoKGUpfW1vdmVUbyhuWzBdLngsblswXS55KTtmb3IoYT0xLGM9bi5sZW5ndGg7YTxjO2ErKylpZigxJm5bYV0uZmxhZ3MpbGluZVRvKG5bYV0ueCxuW2FdLnkpO2Vsc2UgaWYoMSZuW2ErMV0uZmxhZ3Mpe3F1YWRyYXRpY0N1cnZlVG8oblthXS54LG5bYV0ueSxuW2ErMV0ueCxuW2ErMV0ueSk7YSsrfWVsc2UgcXVhZHJhdGljQ3VydmVUbyhuW2FdLngsblthXS55LChuW2FdLngrblthKzFdLngpLzIsKG5bYV0ueStuW2ErMV0ueSkvMik7dT1lKzF9fX1mdW5jdGlvbiBjb21waWxlQ2hhclN0cmluZyhlLHQsYSxuKXtmdW5jdGlvbiBtb3ZlVG8oZSxhKXt0LnB1c2goe2NtZDoibW92ZVRvIixhcmdzOltlLGFdfSl9ZnVuY3Rpb24gbGluZVRvKGUsYSl7dC5wdXNoKHtjbWQ6ImxpbmVUbyIsYXJnczpbZSxhXX0pfWZ1bmN0aW9uIGJlemllckN1cnZlVG8oZSxhLHIsbixpLHMpe3QucHVzaCh7Y21kOiJiZXppZXJDdXJ2ZVRvIixhcmdzOltlLGEscixuLGksc119KX1jb25zdCBpPVtdO2xldCBvPTAsYz0wLGw9MDshZnVuY3Rpb24gcGFyc2UoZSl7bGV0IGg9MDtmb3IoO2g8ZS5sZW5ndGg7KXtsZXQgdSxkLGYsZyxwLG0sYix5LHcsUz0hMSx4PWVbaCsrXTtzd2l0Y2goeCl7Y2FzZSAxOmNhc2UgMzpjYXNlIDE4OmNhc2UgMjM6bCs9aS5sZW5ndGg+PjE7Uz0hMDticmVhaztjYXNlIDQ6Yys9aS5wb3AoKTttb3ZlVG8obyxjKTtTPSEwO2JyZWFrO2Nhc2UgNTpmb3IoO2kubGVuZ3RoPjA7KXtvKz1pLnNoaWZ0KCk7Yys9aS5zaGlmdCgpO2xpbmVUbyhvLGMpfWJyZWFrO2Nhc2UgNjpmb3IoO2kubGVuZ3RoPjA7KXtvKz1pLnNoaWZ0KCk7bGluZVRvKG8sYyk7aWYoMD09PWkubGVuZ3RoKWJyZWFrO2MrPWkuc2hpZnQoKTtsaW5lVG8obyxjKX1icmVhaztjYXNlIDc6Zm9yKDtpLmxlbmd0aD4wOyl7Yys9aS5zaGlmdCgpO2xpbmVUbyhvLGMpO2lmKDA9PT1pLmxlbmd0aClicmVhaztvKz1pLnNoaWZ0KCk7bGluZVRvKG8sYyl9YnJlYWs7Y2FzZSA4OmZvcig7aS5sZW5ndGg+MDspe3U9bytpLnNoaWZ0KCk7Zj1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpfWJyZWFrO2Nhc2UgMTA6eT1pLnBvcCgpO3c9bnVsbDtpZihhLmlzQ0ZGQ0lERm9udCl7Y29uc3QgZT1hLmZkU2VsZWN0LmdldEZESW5kZXgobik7aWYoZT49MCYmZTxhLmZkQXJyYXkubGVuZ3RoKXtjb25zdCB0PWEuZmRBcnJheVtlXTtsZXQgcjt0LnByaXZhdGVEaWN0Py5zdWJyc0luZGV4JiYocj10LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cyk7aWYocil7eSs9Z2V0U3Vicm91dGluZUJpYXMocik7dz1yW3ldfX1lbHNlKDAsci53YXJuKSgiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguIil9ZWxzZSB3PWEuc3VicnNbeSthLnN1YnJzQmlhc107dyYmcGFyc2Uodyk7YnJlYWs7Y2FzZSAxMTpyZXR1cm47Y2FzZSAxMjp4PWVbaCsrXTtzd2l0Y2goeCl7Y2FzZSAzNDp1PW8raS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7cD1jK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxjLGQscCxvLHApO3U9bytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxwLGQsYyxvLGMpO2JyZWFrO2Nhc2UgMzU6dT1vK2kuc2hpZnQoKTtmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2M9ZytpLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7dT1vK2kuc2hpZnQoKTtmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2M9ZytpLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7aS5wb3AoKTticmVhaztjYXNlIDM2OnU9bytpLnNoaWZ0KCk7cD1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO209cCtpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUscCxkLG0sbyxtKTt1PW8raS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Yj1tK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxtLGQsYixvLGMpO2JyZWFrO2Nhc2UgMzc6Y29uc3QgZT1vLHQ9Yzt1PW8raS5zaGlmdCgpO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7Yz1nK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKTt1PW8raS5zaGlmdCgpO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZDtjPWc7TWF0aC5hYnMoby1lKT5NYXRoLmFicyhjLXQpP28rPWkuc2hpZnQoKTpjKz1pLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgdW5rbm93biBvcGVyYXRvcjogMTIgJHt4fWApfWJyZWFrO2Nhc2UgMTQ6aWYoaS5sZW5ndGg+PTQpe2NvbnN0IGU9aS5wb3AoKSxyPWkucG9wKCk7Yz1pLnBvcCgpO289aS5wb3AoKTt0LnB1c2goe2NtZDoic2F2ZSJ9LHtjbWQ6InRyYW5zbGF0ZSIsYXJnczpbbyxjXX0pO2xldCBuPWxvb2t1cENtYXAoYS5jbWFwLFN0cmluZy5mcm9tQ2hhckNvZGUoYS5nbHlwaE5hbWVNYXBbcy5TdGFuZGFyZEVuY29kaW5nW2VdXSkpO2NvbXBpbGVDaGFyU3RyaW5nKGEuZ2x5cGhzW24uZ2x5cGhJZF0sdCxhLG4uZ2x5cGhJZCk7dC5wdXNoKHtjbWQ6InJlc3RvcmUifSk7bj1sb29rdXBDbWFwKGEuY21hcCxTdHJpbmcuZnJvbUNoYXJDb2RlKGEuZ2x5cGhOYW1lTWFwW3MuU3RhbmRhcmRFbmNvZGluZ1tyXV0pKTtjb21waWxlQ2hhclN0cmluZyhhLmdseXBoc1tuLmdseXBoSWRdLHQsYSxuLmdseXBoSWQpfXJldHVybjtjYXNlIDE5OmNhc2UgMjA6bCs9aS5sZW5ndGg+PjE7aCs9bCs3Pj4zO1M9ITA7YnJlYWs7Y2FzZSAyMTpjKz1pLnBvcCgpO28rPWkucG9wKCk7bW92ZVRvKG8sYyk7Uz0hMDticmVhaztjYXNlIDIyOm8rPWkucG9wKCk7bW92ZVRvKG8sYyk7Uz0hMDticmVhaztjYXNlIDI0OmZvcig7aS5sZW5ndGg+Mjspe3U9bytpLnNoaWZ0KCk7Zj1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpfW8rPWkuc2hpZnQoKTtjKz1pLnNoaWZ0KCk7bGluZVRvKG8sYyk7YnJlYWs7Y2FzZSAyNTpmb3IoO2kubGVuZ3RoPjY7KXtvKz1pLnNoaWZ0KCk7Yys9aS5zaGlmdCgpO2xpbmVUbyhvLGMpfXU9bytpLnNoaWZ0KCk7Zj1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO2JyZWFrO2Nhc2UgMjY6aS5sZW5ndGglMiYmKG8rPWkuc2hpZnQoKSk7Zm9yKDtpLmxlbmd0aD4wOyl7dT1vO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZDtjPWcraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpfWJyZWFrO2Nhc2UgMjc6aS5sZW5ndGglMiYmKGMrPWkuc2hpZnQoKSk7Zm9yKDtpLmxlbmd0aD4wOyl7dT1vK2kuc2hpZnQoKTtmPWM7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7Yz1nO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpfWJyZWFrO2Nhc2UgMjg6aS5wdXNoKChlW2hdPDwyNHxlW2grMV08PDE2KT4+MTYpO2grPTI7YnJlYWs7Y2FzZSAyOTp5PWkucG9wKCkrYS5nc3VicnNCaWFzO3c9YS5nc3VicnNbeV07dyYmcGFyc2Uodyk7YnJlYWs7Y2FzZSAzMDpmb3IoO2kubGVuZ3RoPjA7KXt1PW87Zj1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtjPWcrKDE9PT1pLmxlbmd0aD9pLnNoaWZ0KCk6MCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7aWYoMD09PWkubGVuZ3RoKWJyZWFrO3U9bytpLnNoaWZ0KCk7Zj1jO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO289ZCsoMT09PWkubGVuZ3RoP2kuc2hpZnQoKTowKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1icmVhaztjYXNlIDMxOmZvcig7aS5sZW5ndGg+MDspe3U9bytpLnNoaWZ0KCk7Zj1jO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO289ZCsoMT09PWkubGVuZ3RoP2kuc2hpZnQoKTowKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKTtpZigwPT09aS5sZW5ndGgpYnJlYWs7dT1vO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7Yz1nKygxPT09aS5sZW5ndGg/aS5zaGlmdCgpOjApO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpfWJyZWFrO2RlZmF1bHQ6aWYoeDwzMil0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgdW5rbm93biBvcGVyYXRvcjogJHt4fWApO2lmKHg8MjQ3KWkucHVzaCh4LTEzOSk7ZWxzZSBpZih4PDI1MSlpLnB1c2goMjU2Kih4LTI0NykrZVtoKytdKzEwOCk7ZWxzZSBpZih4PDI1NSlpLnB1c2goMjU2Ki0oeC0yNTEpLWVbaCsrXS0xMDgpO2Vsc2V7aS5wdXNoKChlW2hdPDwyNHxlW2grMV08PDE2fGVbaCsyXTw8OHxlW2grM10pLzY1NTM2KTtoKz00fX1TJiYoaS5sZW5ndGg9MCl9fShlKX1jb25zdCBjPVtdO2NsYXNzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbnN0cnVjdG9yPT09Q29tcGlsZWRGb250JiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQ29tcGlsZWRGb250LiIpO3RoaXMuZm9udE1hdHJpeD1lO3RoaXMuY29tcGlsZWRHbHlwaHM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWQ9T2JqZWN0LmNyZWF0ZShudWxsKX1nZXRQYXRoSnMoZSl7Y29uc3R7Y2hhckNvZGU6dCxnbHlwaElkOmF9PWxvb2t1cENtYXAodGhpcy5jbWFwLGUpO2xldCByPXRoaXMuY29tcGlsZWRHbHlwaHNbYV07aWYoIXIpdHJ5e3I9dGhpcy5jb21waWxlR2x5cGgodGhpcy5nbHlwaHNbYV0sYSk7dGhpcy5jb21waWxlZEdseXBoc1thXT1yfWNhdGNoKGUpe3RoaXMuY29tcGlsZWRHbHlwaHNbYV09Yzt2b2lkIDA9PT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdF0mJih0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdF09YSk7dGhyb3cgZX12b2lkIDA9PT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdF0mJih0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdF09YSk7cmV0dXJuIHJ9Y29tcGlsZUdseXBoKGUsdCl7aWYoIWV8fDA9PT1lLmxlbmd0aHx8MTQ9PT1lWzBdKXJldHVybiBjO2xldCBhPXRoaXMuZm9udE1hdHJpeDtpZih0aGlzLmlzQ0ZGQ0lERm9udCl7Y29uc3QgZT10aGlzLmZkU2VsZWN0LmdldEZESW5kZXgodCk7aWYoZT49MCYmZTx0aGlzLmZkQXJyYXkubGVuZ3RoKXthPXRoaXMuZmRBcnJheVtlXS5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKXx8ci5GT05UX0lERU5USVRZX01BVFJJWH1lbHNlKDAsci53YXJuKSgiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguIil9Y29uc3Qgbj1be2NtZDoic2F2ZSJ9LHtjbWQ6InRyYW5zZm9ybSIsYXJnczphLnNsaWNlKCl9LHtjbWQ6InNjYWxlIixhcmdzOlsic2l6ZSIsIi1zaXplIl19XTt0aGlzLmNvbXBpbGVHbHlwaEltcGwoZSxuLHQpO24ucHVzaCh7Y21kOiJyZXN0b3JlIn0pO3JldHVybiBufWNvbXBpbGVHbHlwaEltcGwoKXsoMCxyLnVucmVhY2hhYmxlKSgiQ2hpbGRyZW4gY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IHRoaXMuIil9aGFzQnVpbHRQYXRoKGUpe2NvbnN0e2NoYXJDb2RlOnQsZ2x5cGhJZDphfT1sb29rdXBDbWFwKHRoaXMuY21hcCxlKTtyZXR1cm4gdm9pZCAwIT09dGhpcy5jb21waWxlZEdseXBoc1thXSYmdm9pZCAwIT09dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdfX1jbGFzcyBUcnVlVHlwZUNvbXBpbGVkIGV4dGVuZHMgQ29tcGlsZWRGb250e2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcihhfHxbNDg4ZS02LDAsMCw0ODhlLTYsMCwwXSk7dGhpcy5nbHlwaHM9ZTt0aGlzLmNtYXA9dH1jb21waWxlR2x5cGhJbXBsKGUsdCl7Y29tcGlsZUdseWYoZSx0LHRoaXMpfX1jbGFzcyBUeXBlMkNvbXBpbGVkIGV4dGVuZHMgQ29tcGlsZWRGb250e2NvbnN0cnVjdG9yKGUsdCxhLHIpe3N1cGVyKGF8fFsuMDAxLDAsMCwuMDAxLDAsMF0pO3RoaXMuZ2x5cGhzPWUuZ2x5cGhzO3RoaXMuZ3N1YnJzPWUuZ3N1YnJzfHxbXTt0aGlzLnN1YnJzPWUuc3VicnN8fFtdO3RoaXMuY21hcD10O3RoaXMuZ2x5cGhOYW1lTWFwPXJ8fCgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKTt0aGlzLmdzdWJyc0JpYXM9Z2V0U3Vicm91dGluZUJpYXModGhpcy5nc3VicnMpO3RoaXMuc3VicnNCaWFzPWdldFN1YnJvdXRpbmVCaWFzKHRoaXMuc3VicnMpO3RoaXMuaXNDRkZDSURGb250PWUuaXNDRkZDSURGb250O3RoaXMuZmRTZWxlY3Q9ZS5mZFNlbGVjdDt0aGlzLmZkQXJyYXk9ZS5mZEFycmF5fWNvbXBpbGVHbHlwaEltcGwoZSx0LGEpe2NvbXBpbGVDaGFyU3RyaW5nKGUsdCx0aGlzLGEpfX10LkZvbnRSZW5kZXJlckZhY3Rvcnk9Y2xhc3MgRm9udFJlbmRlcmVyRmFjdG9yeXtzdGF0aWMgY3JlYXRlKGUsdCl7Y29uc3QgYT1uZXcgVWludDhBcnJheShlLmRhdGEpO2xldCBuLGkscyxvLGMsbDtjb25zdCBoPWdldFVpbnQxNihhLDQpO2ZvcihsZXQgZT0wLHU9MTI7ZTxoO2UrKyx1Kz0xNil7Y29uc3QgZT0oMCxyLmJ5dGVzVG9TdHJpbmcpKGEuc3ViYXJyYXkodSx1KzQpKSxoPWdldFVpbnQzMihhLHUrOCksZD1nZXRVaW50MzIoYSx1KzEyKTtzd2l0Y2goZSl7Y2FzZSJjbWFwIjpuPXBhcnNlQ21hcChhLGgpO2JyZWFrO2Nhc2UiZ2x5ZiI6aT1hLnN1YmFycmF5KGgsaCtkKTticmVhaztjYXNlImxvY2EiOnM9YS5zdWJhcnJheShoLGgrZCk7YnJlYWs7Y2FzZSJoZWFkIjpsPWdldFVpbnQxNihhLGgrMTgpO2M9Z2V0VWludDE2KGEsaCs1MCk7YnJlYWs7Y2FzZSJDRkYgIjpvPXBhcnNlQ2ZmKGEsaCxoK2QsdCl9fWlmKGkpe2NvbnN0IHQ9bD9bMS9sLDAsMCwxL2wsMCwwXTplLmZvbnRNYXRyaXg7cmV0dXJuIG5ldyBUcnVlVHlwZUNvbXBpbGVkKGZ1bmN0aW9uIHBhcnNlR2x5ZlRhYmxlKGUsdCxhKXtsZXQgcixuO2lmKGEpe3I9NDtuPWdldFVpbnQzMn1lbHNle3I9MjtuPShlLHQpPT4yKmdldFVpbnQxNihlLHQpfWNvbnN0IGk9W107bGV0IHM9bih0LDApO2ZvcihsZXQgYT1yO2E8dC5sZW5ndGg7YSs9cil7Y29uc3Qgcj1uKHQsYSk7aS5wdXNoKGUuc3ViYXJyYXkocyxyKSk7cz1yfXJldHVybiBpfShpLHMsYyksbix0KX1yZXR1cm4gbmV3IFR5cGUyQ29tcGlsZWQobyxuLGUuZm9udE1hdHJpeCxlLmdseXBoTmFtZU1hcCl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmdldE1ldHJpY3M9dC5nZXRGb250QmFzaWNNZXRyaWNzPXZvaWQgMDt2YXIgcj1hKDMpO2NvbnN0IG49KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkNvdXJpZXI9NjAwO2VbIkNvdXJpZXItQm9sZCJdPTYwMDtlWyJDb3VyaWVyLUJvbGRPYmxpcXVlIl09NjAwO2VbIkNvdXJpZXItT2JsaXF1ZSJdPTYwMDtlLkhlbHZldGljYT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4O2UuZXhjbGFtPTI3ODtlLnF1b3RlZGJsPTM1NTtlLm51bWJlcnNpZ249NTU2O2UuZG9sbGFyPTU1NjtlLnBlcmNlbnQ9ODg5O2UuYW1wZXJzYW5kPTY2NztlLnF1b3RlcmlnaHQ9MjIyO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9Mzg5O2UucGx1cz01ODQ7ZS5jb21tYT0yNzg7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI3ODtlLnNsYXNoPTI3ODtlLnplcm89NTU2O2Uub25lPTU1NjtlLnR3bz01NTY7ZS50aHJlZT01NTY7ZS5mb3VyPTU1NjtlLmZpdmU9NTU2O2Uuc2l4PTU1NjtlLnNldmVuPTU1NjtlLmVpZ2h0PTU1NjtlLm5pbmU9NTU2O2UuY29sb249Mjc4O2Uuc2VtaWNvbG9uPTI3ODtlLmxlc3M9NTg0O2UuZXF1YWw9NTg0O2UuZ3JlYXRlcj01ODQ7ZS5xdWVzdGlvbj01NTY7ZS5hdD0xMDE1O2UuQT02Njc7ZS5CPTY2NztlLkM9NzIyO2UuRD03MjI7ZS5FPTY2NztlLkY9NjExO2UuRz03Nzg7ZS5IPTcyMjtlLkk9Mjc4O2UuSj01MDA7ZS5LPTY2NztlLkw9NTU2O2UuTT04MzM7ZS5OPTcyMjtlLk89Nzc4O2UuUD02Njc7ZS5RPTc3ODtlLlI9NzIyO2UuUz02Njc7ZS5UPTYxMTtlLlU9NzIyO2UuVj02Njc7ZS5XPTk0NDtlLlg9NjY3O2UuWT02Njc7ZS5aPTYxMTtlLmJyYWNrZXRsZWZ0PTI3ODtlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9Mjc4O2UuYXNjaWljaXJjdW09NDY5O2UudW5kZXJzY29yZT01NTY7ZS5xdW90ZWxlZnQ9MjIyO2UuYT01NTY7ZS5iPTU1NjtlLmM9NTAwO2UuZD01NTY7ZS5lPTU1NjtlLmY9Mjc4O2UuZz01NTY7ZS5oPTU1NjtlLmk9MjIyO2Uuaj0yMjI7ZS5rPTUwMDtlLmw9MjIyO2UubT04MzM7ZS5uPTU1NjtlLm89NTU2O2UucD01NTY7ZS5xPTU1NjtlLnI9MzMzO2Uucz01MDA7ZS50PTI3ODtlLnU9NTU2O2Uudj01MDA7ZS53PTcyMjtlLng9NTAwO2UueT01MDA7ZS56PTUwMDtlLmJyYWNlbGVmdD0zMzQ7ZS5iYXI9MjYwO2UuYnJhY2VyaWdodD0zMzQ7ZS5hc2NpaXRpbGRlPTU4NDtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01NTY7ZS5zdGVybGluZz01NTY7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTU2O2UuZmxvcmluPTU1NjtlLnNlY3Rpb249NTU2O2UuY3VycmVuY3k9NTU2O2UucXVvdGVzaW5nbGU9MTkxO2UucXVvdGVkYmxsZWZ0PTMzMztlLmd1aWxsZW1vdGxlZnQ9NTU2O2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01MDA7ZS5mbD01MDA7ZS5lbmRhc2g9NTU2O2UuZGFnZ2VyPTU1NjtlLmRhZ2dlcmRibD01NTY7ZS5wZXJpb2RjZW50ZXJlZD0yNzg7ZS5wYXJhZ3JhcGg9NTM3O2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTIyMjtlLnF1b3RlZGJsYmFzZT0zMzM7ZS5xdW90ZWRibHJpZ2h0PTMzMztlLmd1aWxsZW1vdHJpZ2h0PTU1NjtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj02MTE7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTFlMztlLm9yZGZlbWluaW5lPTM3MDtlLkxzbGFzaD01NTY7ZS5Pc2xhc2g9Nzc4O2UuT0U9MWUzO2Uub3JkbWFzY3VsaW5lPTM2NTtlLmFlPTg4OTtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yMjI7ZS5vc2xhc2g9NjExO2Uub2U9OTQ0O2UuZ2VybWFuZGJscz02MTE7ZS5JZGllcmVzaXM9Mjc4O2UuZWFjdXRlPTU1NjtlLmFicmV2ZT01NTY7ZS51aHVuZ2FydW1sYXV0PTU1NjtlLmVjYXJvbj01NTY7ZS5ZZGllcmVzaXM9NjY3O2UuZGl2aWRlPTU4NDtlLllhY3V0ZT02Njc7ZS5BY2lyY3VtZmxleD02Njc7ZS5hYWN1dGU9NTU2O2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTUwMDtlLnNjb21tYWFjY2VudD01MDA7ZS5lY2lyY3VtZmxleD01NTY7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01NTY7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01NTY7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03Mzc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj01MDA7ZS5hcmluZz01NTY7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTIyMjtlLmFncmF2ZT01NTY7ZS5UY29tbWFhY2NlbnQ9NjExO2UuQ2FjdXRlPTcyMjtlLmF0aWxkZT01NTY7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj01MDA7ZS5zY2VkaWxsYT01MDA7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00NzE7ZS5SY2Fyb249NzIyO2UuR2NvbW1hYWNjZW50PTc3ODtlLnVjaXJjdW1mbGV4PTU1NjtlLmFjaXJjdW1mbGV4PTU1NjtlLkFtYWNyb249NjY3O2UucmNhcm9uPTMzMztlLmNjZWRpbGxhPTUwMDtlLlpkb3RhY2NlbnQ9NjExO2UuVGhvcm49NjY3O2UuT21hY3Jvbj03Nzg7ZS5SYWN1dGU9NzIyO2UuU2FjdXRlPTY2NztlLmRjYXJvbj02NDM7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTU1NjtlLnRocmVlc3VwZXJpb3I9MzMzO2UuT2dyYXZlPTc3ODtlLkFncmF2ZT02Njc7ZS5BYnJldmU9NjY3O2UubXVsdGlwbHk9NTg0O2UudWFjdXRlPTU1NjtlLlRjYXJvbj02MTE7ZS5wYXJ0aWFsZGlmZj00NzY7ZS55ZGllcmVzaXM9NTAwO2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01NTY7ZS5lZGllcmVzaXM9NTU2O2UuY2FjdXRlPTUwMDtlLm5hY3V0ZT01NTY7ZS51bWFjcm9uPTU1NjtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mjc4O2UucGx1c21pbnVzPTU4NDtlLmJyb2tlbmJhcj0yNjA7ZS5yZWdpc3RlcmVkPTczNztlLkdicmV2ZT03Nzg7ZS5JZG90YWNjZW50PTI3ODtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTMzMztlLm9tYWNyb249NTU2O2UuWmFjdXRlPTYxMTtlLlpjYXJvbj02MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTcyMjtlLmxjb21tYWFjY2VudD0yMjI7ZS50Y2Fyb249MzE3O2UuZW9nb25laz01NTY7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT02Njc7ZS5BZGllcmVzaXM9NjY3O2UuZWdyYXZlPTU1NjtlLnphY3V0ZT01MDA7ZS5pb2dvbmVrPTIyMjtlLk9hY3V0ZT03Nzg7ZS5vYWN1dGU9NTU2O2UuYW1hY3Jvbj01NTY7ZS5zYWN1dGU9NTAwO2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTc3ODtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01NTY7ZS50d29zdXBlcmlvcj0zMzM7ZS5PZGllcmVzaXM9Nzc4O2UubXU9NTU2O2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTU2O2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NTU2O2UudGhyZWVxdWFydGVycz04MzQ7ZS5TY2VkaWxsYT02Njc7ZS5sY2Fyb249Mjk5O2UuS2NvbW1hYWNjZW50PTY2NztlLkxhY3V0ZT01NTY7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD01NTY7ZS5JZ3JhdmU9Mjc4O2UuSW1hY3Jvbj0yNzg7ZS5MY2Fyb249NTU2O2Uub25laGFsZj04MzQ7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTU2O2UubnRpbGRlPTU1NjtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NTU2O2UuZ2JyZXZlPTU1NjtlLm9uZXF1YXJ0ZXI9ODM0O2UuU2Nhcm9uPTY2NztlLlNjb21tYWFjY2VudD02Njc7ZS5PaHVuZ2FydW1sYXV0PTc3ODtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTU2O2UuQ2Nhcm9uPTcyMjtlLnVncmF2ZT01NTY7ZS5yYWRpY2FsPTQ1MztlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9MzMzO2UuTnRpbGRlPTcyMjtlLm90aWxkZT01NTY7ZS5SY29tbWFhY2NlbnQ9NzIyO2UuTGNvbW1hYWNjZW50PTU1NjtlLkF0aWxkZT02Njc7ZS5Bb2dvbmVrPTY2NztlLkFyaW5nPTY2NztlLk90aWxkZT03Nzg7ZS56ZG90YWNjZW50PTUwMDtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTI3ODtlLmtjb21tYWFjY2VudD01MDA7ZS5taW51cz01ODQ7ZS5JY2lyY3VtZmxleD0yNzg7ZS5uY2Fyb249NTU2O2UudGNvbW1hYWNjZW50PTI3ODtlLmxvZ2ljYWxub3Q9NTg0O2Uub2RpZXJlc2lzPTU1NjtlLnVkaWVyZXNpcz01NTY7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTU2O2UuZXRoPTU1NjtlLnpjYXJvbj01MDA7ZS5uY29tbWFhY2NlbnQ9NTU2O2Uub25lc3VwZXJpb3I9MzMzO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTU1Nn0pKTtlWyJIZWx2ZXRpY2EtQm9sZCJdPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NDc0O2UubnVtYmVyc2lnbj01NTY7ZS5kb2xsYXI9NTU2O2UucGVyY2VudD04ODk7ZS5hbXBlcnNhbmQ9NzIyO2UucXVvdGVyaWdodD0yNzg7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz0zODk7ZS5wbHVzPTU4NDtlLmNvbW1hPTI3ODtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9Mjc4O2Uuc2xhc2g9Mjc4O2UuemVybz01NTY7ZS5vbmU9NTU2O2UudHdvPTU1NjtlLnRocmVlPTU1NjtlLmZvdXI9NTU2O2UuZml2ZT01NTY7ZS5zaXg9NTU2O2Uuc2V2ZW49NTU2O2UuZWlnaHQ9NTU2O2UubmluZT01NTY7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz01ODQ7ZS5lcXVhbD01ODQ7ZS5ncmVhdGVyPTU4NDtlLnF1ZXN0aW9uPTYxMTtlLmF0PTk3NTtlLkE9NzIyO2UuQj03MjI7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03MjI7ZS5JPTI3ODtlLko9NTU2O2UuSz03MjI7ZS5MPTYxMTtlLk09ODMzO2UuTj03MjI7ZS5PPTc3ODtlLlA9NjY3O2UuUT03Nzg7ZS5SPTcyMjtlLlM9NjY3O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz05NDQ7ZS5YPTY2NztlLlk9NjY3O2UuWj02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTU4NDtlLnVuZGVyc2NvcmU9NTU2O2UucXVvdGVsZWZ0PTI3ODtlLmE9NTU2O2UuYj02MTE7ZS5jPTU1NjtlLmQ9NjExO2UuZT01NTY7ZS5mPTMzMztlLmc9NjExO2UuaD02MTE7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz01NTY7ZS5sPTI3ODtlLm09ODg5O2Uubj02MTE7ZS5vPTYxMTtlLnA9NjExO2UucT02MTE7ZS5yPTM4OTtlLnM9NTU2O2UudD0zMzM7ZS51PTYxMTtlLnY9NTU2O2Uudz03Nzg7ZS54PTU1NjtlLnk9NTU2O2Uuej01MDA7ZS5icmFjZWxlZnQ9Mzg5O2UuYmFyPTI4MDtlLmJyYWNlcmlnaHQ9Mzg5O2UuYXNjaWl0aWxkZT01ODQ7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTU2O2Uuc3Rlcmxpbmc9NTU2O2UuZnJhY3Rpb249MTY3O2UueWVuPTU1NjtlLmZsb3Jpbj01NTY7ZS5zZWN0aW9uPTU1NjtlLmN1cnJlbmN5PTU1NjtlLnF1b3Rlc2luZ2xlPTIzODtlLnF1b3RlZGJsbGVmdD01MDA7ZS5ndWlsbGVtb3RsZWZ0PTU1NjtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NjExO2UuZmw9NjExO2UuZW5kYXNoPTU1NjtlLmRhZ2dlcj01NTY7ZS5kYWdnZXJkYmw9NTU2O2UucGVyaW9kY2VudGVyZWQ9Mjc4O2UucGFyYWdyYXBoPTU1NjtlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0yNzg7ZS5xdW90ZWRibGJhc2U9NTAwO2UucXVvdGVkYmxyaWdodD01MDA7ZS5ndWlsbGVtb3RyaWdodD01NTY7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NjExO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zNzA7ZS5Mc2xhc2g9NjExO2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zNjU7ZS5hZT04ODk7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTYxMTtlLm9lPTk0NDtlLmdlcm1hbmRibHM9NjExO2UuSWRpZXJlc2lzPTI3ODtlLmVhY3V0ZT01NTY7ZS5hYnJldmU9NTU2O2UudWh1bmdhcnVtbGF1dD02MTE7ZS5lY2Fyb249NTU2O2UuWWRpZXJlc2lzPTY2NztlLmRpdmlkZT01ODQ7ZS5ZYWN1dGU9NjY3O2UuQWNpcmN1bWZsZXg9NzIyO2UuYWFjdXRlPTU1NjtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01NTY7ZS5zY29tbWFhY2NlbnQ9NTU2O2UuZWNpcmN1bWZsZXg9NTU2O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTU2O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NjExO2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzM3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NTU2O2UuYXJpbmc9NTU2O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTU2O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTU2O2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249NTU2O2Uuc2NlZGlsbGE9NTU2O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDk0O2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD02MTE7ZS5hY2lyY3VtZmxleD01NTY7ZS5BbWFjcm9uPTcyMjtlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT01NTY7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTY2NztlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT02Njc7ZS5kY2Fyb249NzQzO2UuVW1hY3Jvbj03MjI7ZS51cmluZz02MTE7ZS50aHJlZXN1cGVyaW9yPTMzMztlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NzIyO2UuQWJyZXZlPTcyMjtlLm11bHRpcGx5PTU4NDtlLnVhY3V0ZT02MTE7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDk0O2UueWRpZXJlc2lzPTU1NjtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTU2O2UuZWRpZXJlc2lzPTU1NjtlLmNhY3V0ZT01NTY7ZS5uYWN1dGU9NjExO2UudW1hY3Jvbj02MTE7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTI3ODtlLnBsdXNtaW51cz01ODQ7ZS5icm9rZW5iYXI9MjgwO2UucmVnaXN0ZXJlZD03Mzc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0yNzg7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTYxMTtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTM4OTtlLmVvZ29uZWs9NTU2O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NzIyO2UuQWRpZXJlc2lzPTcyMjtlLmVncmF2ZT01NTY7ZS56YWN1dGU9NTAwO2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTYxMTtlLmFtYWNyb249NTU2O2Uuc2FjdXRlPTU1NjtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NjExO2UudHdvc3VwZXJpb3I9MzMzO2UuT2RpZXJlc2lzPTc3ODtlLm11PTYxMTtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTYxMTtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTYxMTtlLnRocmVlcXVhcnRlcnM9ODM0O2UuU2NlZGlsbGE9NjY3O2UubGNhcm9uPTQwMDtlLktjb21tYWFjY2VudD03MjI7ZS5MYWN1dGU9NjExO2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NTU2O2UuSWdyYXZlPTI3ODtlLkltYWNyb249Mjc4O2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9ODM0O2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTYxMTtlLm50aWxkZT02MTE7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTU1NjtlLmdicmV2ZT02MTE7ZS5vbmVxdWFydGVyPTgzNDtlLlNjYXJvbj02Njc7ZS5TY29tbWFhY2NlbnQ9NjY3O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTYxMTtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NjExO2UucmFkaWNhbD01NDk7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT03MjI7ZS5vdGlsZGU9NjExO2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD02MTE7ZS5BdGlsZGU9NzIyO2UuQW9nb25laz03MjI7ZS5BcmluZz03MjI7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD01MDA7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0yNzg7ZS5rY29tbWFhY2NlbnQ9NTU2O2UubWludXM9NTg0O2UuSWNpcmN1bWZsZXg9Mjc4O2UubmNhcm9uPTYxMTtlLnRjb21tYWFjY2VudD0zMzM7ZS5sb2dpY2Fsbm90PTU4NDtlLm9kaWVyZXNpcz02MTE7ZS51ZGllcmVzaXM9NjExO2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTYxMTtlLmV0aD02MTE7ZS56Y2Fyb249NTAwO2UubmNvbW1hYWNjZW50PTYxMTtlLm9uZXN1cGVyaW9yPTMzMztlLmltYWNyb249Mjc4O2UuRXVybz01NTZ9KSk7ZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3ODtlLmV4Y2xhbT0zMzM7ZS5xdW90ZWRibD00NzQ7ZS5udW1iZXJzaWduPTU1NjtlLmRvbGxhcj01NTY7ZS5wZXJjZW50PTg4OTtlLmFtcGVyc2FuZD03MjI7ZS5xdW90ZXJpZ2h0PTI3ODtlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTM4OTtlLnBsdXM9NTg0O2UuY29tbWE9Mjc4O2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNzg7ZS5zbGFzaD0yNzg7ZS56ZXJvPTU1NjtlLm9uZT01NTY7ZS50d289NTU2O2UudGhyZWU9NTU2O2UuZm91cj01NTY7ZS5maXZlPTU1NjtlLnNpeD01NTY7ZS5zZXZlbj01NTY7ZS5laWdodD01NTY7ZS5uaW5lPTU1NjtlLmNvbG9uPTMzMztlLnNlbWljb2xvbj0zMzM7ZS5sZXNzPTU4NDtlLmVxdWFsPTU4NDtlLmdyZWF0ZXI9NTg0O2UucXVlc3Rpb249NjExO2UuYXQ9OTc1O2UuQT03MjI7ZS5CPTcyMjtlLkM9NzIyO2UuRD03MjI7ZS5FPTY2NztlLkY9NjExO2UuRz03Nzg7ZS5IPTcyMjtlLkk9Mjc4O2UuSj01NTY7ZS5LPTcyMjtlLkw9NjExO2UuTT04MzM7ZS5OPTcyMjtlLk89Nzc4O2UuUD02Njc7ZS5RPTc3ODtlLlI9NzIyO2UuUz02Njc7ZS5UPTYxMTtlLlU9NzIyO2UuVj02Njc7ZS5XPTk0NDtlLlg9NjY3O2UuWT02Njc7ZS5aPTYxMTtlLmJyYWNrZXRsZWZ0PTMzMztlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9MzMzO2UuYXNjaWljaXJjdW09NTg0O2UudW5kZXJzY29yZT01NTY7ZS5xdW90ZWxlZnQ9Mjc4O2UuYT01NTY7ZS5iPTYxMTtlLmM9NTU2O2UuZD02MTE7ZS5lPTU1NjtlLmY9MzMzO2UuZz02MTE7ZS5oPTYxMTtlLmk9Mjc4O2Uuaj0yNzg7ZS5rPTU1NjtlLmw9Mjc4O2UubT04ODk7ZS5uPTYxMTtlLm89NjExO2UucD02MTE7ZS5xPTYxMTtlLnI9Mzg5O2Uucz01NTY7ZS50PTMzMztlLnU9NjExO2Uudj01NTY7ZS53PTc3ODtlLng9NTU2O2UueT01NTY7ZS56PTUwMDtlLmJyYWNlbGVmdD0zODk7ZS5iYXI9MjgwO2UuYnJhY2VyaWdodD0zODk7ZS5hc2NpaXRpbGRlPTU4NDtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01NTY7ZS5zdGVybGluZz01NTY7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTU2O2UuZmxvcmluPTU1NjtlLnNlY3Rpb249NTU2O2UuY3VycmVuY3k9NTU2O2UucXVvdGVzaW5nbGU9MjM4O2UucXVvdGVkYmxsZWZ0PTUwMDtlLmd1aWxsZW1vdGxlZnQ9NTU2O2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT02MTE7ZS5mbD02MTE7ZS5lbmRhc2g9NTU2O2UuZGFnZ2VyPTU1NjtlLmRhZ2dlcmRibD01NTY7ZS5wZXJpb2RjZW50ZXJlZD0yNzg7ZS5wYXJhZ3JhcGg9NTU2O2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTI3ODtlLnF1b3RlZGJsYmFzZT01MDA7ZS5xdW90ZWRibHJpZ2h0PTUwMDtlLmd1aWxsZW1vdHJpZ2h0PTU1NjtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj02MTE7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTFlMztlLm9yZGZlbWluaW5lPTM3MDtlLkxzbGFzaD02MTE7ZS5Pc2xhc2g9Nzc4O2UuT0U9MWUzO2Uub3JkbWFzY3VsaW5lPTM2NTtlLmFlPTg4OTtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yNzg7ZS5vc2xhc2g9NjExO2Uub2U9OTQ0O2UuZ2VybWFuZGJscz02MTE7ZS5JZGllcmVzaXM9Mjc4O2UuZWFjdXRlPTU1NjtlLmFicmV2ZT01NTY7ZS51aHVuZ2FydW1sYXV0PTYxMTtlLmVjYXJvbj01NTY7ZS5ZZGllcmVzaXM9NjY3O2UuZGl2aWRlPTU4NDtlLllhY3V0ZT02Njc7ZS5BY2lyY3VtZmxleD03MjI7ZS5hYWN1dGU9NTU2O2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTU1NjtlLnNjb21tYWFjY2VudD01NTY7ZS5lY2lyY3VtZmxleD01NTY7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01NTY7ZS5VYWN1dGU9NzIyO2UudW9nb25laz02MTE7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03Mzc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj01NTY7ZS5hcmluZz01NTY7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTI3ODtlLmFncmF2ZT01NTY7ZS5UY29tbWFhY2NlbnQ9NjExO2UuQ2FjdXRlPTcyMjtlLmF0aWxkZT01NTY7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj01NTY7ZS5zY2VkaWxsYT01NTY7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00OTQ7ZS5SY2Fyb249NzIyO2UuR2NvbW1hYWNjZW50PTc3ODtlLnVjaXJjdW1mbGV4PTYxMTtlLmFjaXJjdW1mbGV4PTU1NjtlLkFtYWNyb249NzIyO2UucmNhcm9uPTM4OTtlLmNjZWRpbGxhPTU1NjtlLlpkb3RhY2NlbnQ9NjExO2UuVGhvcm49NjY3O2UuT21hY3Jvbj03Nzg7ZS5SYWN1dGU9NzIyO2UuU2FjdXRlPTY2NztlLmRjYXJvbj03NDM7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTYxMTtlLnRocmVlc3VwZXJpb3I9MzMzO2UuT2dyYXZlPTc3ODtlLkFncmF2ZT03MjI7ZS5BYnJldmU9NzIyO2UubXVsdGlwbHk9NTg0O2UudWFjdXRlPTYxMTtlLlRjYXJvbj02MTE7ZS5wYXJ0aWFsZGlmZj00OTQ7ZS55ZGllcmVzaXM9NTU2O2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01NTY7ZS5lZGllcmVzaXM9NTU2O2UuY2FjdXRlPTU1NjtlLm5hY3V0ZT02MTE7ZS51bWFjcm9uPTYxMTtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mjc4O2UucGx1c21pbnVzPTU4NDtlLmJyb2tlbmJhcj0yODA7ZS5yZWdpc3RlcmVkPTczNztlLkdicmV2ZT03Nzg7ZS5JZG90YWNjZW50PTI3ODtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTM4OTtlLm9tYWNyb249NjExO2UuWmFjdXRlPTYxMTtlLlpjYXJvbj02MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTcyMjtlLmxjb21tYWFjY2VudD0yNzg7ZS50Y2Fyb249Mzg5O2UuZW9nb25laz01NTY7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT03MjI7ZS5BZGllcmVzaXM9NzIyO2UuZWdyYXZlPTU1NjtlLnphY3V0ZT01MDA7ZS5pb2dvbmVrPTI3ODtlLk9hY3V0ZT03Nzg7ZS5vYWN1dGU9NjExO2UuYW1hY3Jvbj01NTY7ZS5zYWN1dGU9NTU2O2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTc3ODtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj02MTE7ZS50d29zdXBlcmlvcj0zMzM7ZS5PZGllcmVzaXM9Nzc4O2UubXU9NjExO2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NjExO2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NjExO2UudGhyZWVxdWFydGVycz04MzQ7ZS5TY2VkaWxsYT02Njc7ZS5sY2Fyb249NDAwO2UuS2NvbW1hYWNjZW50PTcyMjtlLkxhY3V0ZT02MTE7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD01NTY7ZS5JZ3JhdmU9Mjc4O2UuSW1hY3Jvbj0yNzg7ZS5MY2Fyb249NjExO2Uub25laGFsZj04MzQ7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NjExO2UubnRpbGRlPTYxMTtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NTU2O2UuZ2JyZXZlPTYxMTtlLm9uZXF1YXJ0ZXI9ODM0O2UuU2Nhcm9uPTY2NztlLlNjb21tYWFjY2VudD02Njc7ZS5PaHVuZ2FydW1sYXV0PTc3ODtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NjExO2UuQ2Nhcm9uPTcyMjtlLnVncmF2ZT02MTE7ZS5yYWRpY2FsPTU0OTtlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9Mzg5O2UuTnRpbGRlPTcyMjtlLm90aWxkZT02MTE7ZS5SY29tbWFhY2NlbnQ9NzIyO2UuTGNvbW1hYWNjZW50PTYxMTtlLkF0aWxkZT03MjI7ZS5Bb2dvbmVrPTcyMjtlLkFyaW5nPTcyMjtlLk90aWxkZT03Nzg7ZS56ZG90YWNjZW50PTUwMDtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTI3ODtlLmtjb21tYWFjY2VudD01NTY7ZS5taW51cz01ODQ7ZS5JY2lyY3VtZmxleD0yNzg7ZS5uY2Fyb249NjExO2UudGNvbW1hYWNjZW50PTMzMztlLmxvZ2ljYWxub3Q9NTg0O2Uub2RpZXJlc2lzPTYxMTtlLnVkaWVyZXNpcz02MTE7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NjExO2UuZXRoPTYxMTtlLnpjYXJvbj01MDA7ZS5uY29tbWFhY2NlbnQ9NjExO2Uub25lc3VwZXJpb3I9MzMzO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTU1Nn0pKTtlWyJIZWx2ZXRpY2EtT2JsaXF1ZSJdPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5leGNsYW09Mjc4O2UucXVvdGVkYmw9MzU1O2UubnVtYmVyc2lnbj01NTY7ZS5kb2xsYXI9NTU2O2UucGVyY2VudD04ODk7ZS5hbXBlcnNhbmQ9NjY3O2UucXVvdGVyaWdodD0yMjI7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz0zODk7ZS5wbHVzPTU4NDtlLmNvbW1hPTI3ODtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9Mjc4O2Uuc2xhc2g9Mjc4O2UuemVybz01NTY7ZS5vbmU9NTU2O2UudHdvPTU1NjtlLnRocmVlPTU1NjtlLmZvdXI9NTU2O2UuZml2ZT01NTY7ZS5zaXg9NTU2O2Uuc2V2ZW49NTU2O2UuZWlnaHQ9NTU2O2UubmluZT01NTY7ZS5jb2xvbj0yNzg7ZS5zZW1pY29sb249Mjc4O2UubGVzcz01ODQ7ZS5lcXVhbD01ODQ7ZS5ncmVhdGVyPTU4NDtlLnF1ZXN0aW9uPTU1NjtlLmF0PTEwMTU7ZS5BPTY2NztlLkI9NjY3O2UuQz03MjI7ZS5EPTcyMjtlLkU9NjY3O2UuRj02MTE7ZS5HPTc3ODtlLkg9NzIyO2UuST0yNzg7ZS5KPTUwMDtlLks9NjY3O2UuTD01NTY7ZS5NPTgzMztlLk49NzIyO2UuTz03Nzg7ZS5QPTY2NztlLlE9Nzc4O2UuUj03MjI7ZS5TPTY2NztlLlQ9NjExO2UuVT03MjI7ZS5WPTY2NztlLlc9OTQ0O2UuWD02Njc7ZS5ZPTY2NztlLlo9NjExO2UuYnJhY2tldGxlZnQ9Mjc4O2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0yNzg7ZS5hc2NpaWNpcmN1bT00Njk7ZS51bmRlcnNjb3JlPTU1NjtlLnF1b3RlbGVmdD0yMjI7ZS5hPTU1NjtlLmI9NTU2O2UuYz01MDA7ZS5kPTU1NjtlLmU9NTU2O2UuZj0yNzg7ZS5nPTU1NjtlLmg9NTU2O2UuaT0yMjI7ZS5qPTIyMjtlLms9NTAwO2UubD0yMjI7ZS5tPTgzMztlLm49NTU2O2Uubz01NTY7ZS5wPTU1NjtlLnE9NTU2O2Uucj0zMzM7ZS5zPTUwMDtlLnQ9Mjc4O2UudT01NTY7ZS52PTUwMDtlLnc9NzIyO2UueD01MDA7ZS55PTUwMDtlLno9NTAwO2UuYnJhY2VsZWZ0PTMzNDtlLmJhcj0yNjA7ZS5icmFjZXJpZ2h0PTMzNDtlLmFzY2lpdGlsZGU9NTg0O2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTU1NjtlLnN0ZXJsaW5nPTU1NjtlLmZyYWN0aW9uPTE2NztlLnllbj01NTY7ZS5mbG9yaW49NTU2O2Uuc2VjdGlvbj01NTY7ZS5jdXJyZW5jeT01NTY7ZS5xdW90ZXNpbmdsZT0xOTE7ZS5xdW90ZWRibGxlZnQ9MzMzO2UuZ3VpbGxlbW90bGVmdD01NTY7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTUwMDtlLmZsPTUwMDtlLmVuZGFzaD01NTY7ZS5kYWdnZXI9NTU2O2UuZGFnZ2VyZGJsPTU1NjtlLnBlcmlvZGNlbnRlcmVkPTI3ODtlLnBhcmFncmFwaD01Mzc7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MjIyO2UucXVvdGVkYmxiYXNlPTMzMztlLnF1b3RlZGJscmlnaHQ9MzMzO2UuZ3VpbGxlbW90cmlnaHQ9NTU2O2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTYxMTtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9MWUzO2Uub3JkZmVtaW5pbmU9MzcwO2UuTHNsYXNoPTU1NjtlLk9zbGFzaD03Nzg7ZS5PRT0xZTM7ZS5vcmRtYXNjdWxpbmU9MzY1O2UuYWU9ODg5O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTIyMjtlLm9zbGFzaD02MTE7ZS5vZT05NDQ7ZS5nZXJtYW5kYmxzPTYxMTtlLklkaWVyZXNpcz0yNzg7ZS5lYWN1dGU9NTU2O2UuYWJyZXZlPTU1NjtlLnVodW5nYXJ1bWxhdXQ9NTU2O2UuZWNhcm9uPTU1NjtlLllkaWVyZXNpcz02Njc7ZS5kaXZpZGU9NTg0O2UuWWFjdXRlPTY2NztlLkFjaXJjdW1mbGV4PTY2NztlLmFhY3V0ZT01NTY7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTAwO2Uuc2NvbW1hYWNjZW50PTUwMDtlLmVjaXJjdW1mbGV4PTU1NjtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTU1NjtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTU1NjtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTczNztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTUwMDtlLmFyaW5nPTU1NjtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9MjIyO2UuYWdyYXZlPTU1NjtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NzIyO2UuYXRpbGRlPTU1NjtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTUwMDtlLnNjZWRpbGxhPTUwMDtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ3MTtlLlJjYXJvbj03MjI7ZS5HY29tbWFhY2NlbnQ9Nzc4O2UudWNpcmN1bWZsZXg9NTU2O2UuYWNpcmN1bWZsZXg9NTU2O2UuQW1hY3Jvbj02Njc7ZS5yY2Fyb249MzMzO2UuY2NlZGlsbGE9NTAwO2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj02Njc7ZS5PbWFjcm9uPTc3ODtlLlJhY3V0ZT03MjI7ZS5TYWN1dGU9NjY3O2UuZGNhcm9uPTY0MztlLlVtYWNyb249NzIyO2UudXJpbmc9NTU2O2UudGhyZWVzdXBlcmlvcj0zMzM7ZS5PZ3JhdmU9Nzc4O2UuQWdyYXZlPTY2NztlLkFicmV2ZT02Njc7ZS5tdWx0aXBseT01ODQ7ZS51YWN1dGU9NTU2O2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ3NjtlLnlkaWVyZXNpcz01MDA7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTU1NjtlLmVkaWVyZXNpcz01NTY7ZS5jYWN1dGU9NTAwO2UubmFjdXRlPTU1NjtlLnVtYWNyb249NTU2O2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0yNzg7ZS5wbHVzbWludXM9NTg0O2UuYnJva2VuYmFyPTI2MDtlLnJlZ2lzdGVyZWQ9NzM3O2UuR2JyZXZlPTc3ODtlLklkb3RhY2NlbnQ9Mjc4O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9MzMzO2Uub21hY3Jvbj01NTY7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NzIyO2UubGNvbW1hYWNjZW50PTIyMjtlLnRjYXJvbj0zMTc7ZS5lb2dvbmVrPTU1NjtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTY2NztlLkFkaWVyZXNpcz02Njc7ZS5lZ3JhdmU9NTU2O2UuemFjdXRlPTUwMDtlLmlvZ29uZWs9MjIyO2UuT2FjdXRlPTc3ODtlLm9hY3V0ZT01NTY7ZS5hbWFjcm9uPTU1NjtlLnNhY3V0ZT01MDA7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9Nzc4O2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTU1NjtlLnR3b3N1cGVyaW9yPTMzMztlLk9kaWVyZXNpcz03Nzg7ZS5tdT01NTY7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01NTY7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD01NTY7ZS50aHJlZXF1YXJ0ZXJzPTgzNDtlLlNjZWRpbGxhPTY2NztlLmxjYXJvbj0yOTk7ZS5LY29tbWFhY2NlbnQ9NjY3O2UuTGFjdXRlPTU1NjtlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTU1NjtlLklncmF2ZT0yNzg7ZS5JbWFjcm9uPTI3ODtlLkxjYXJvbj01NTY7ZS5vbmVoYWxmPTgzNDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01NTY7ZS5udGlsZGU9NTU2O2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj01NTY7ZS5nYnJldmU9NTU2O2Uub25lcXVhcnRlcj04MzQ7ZS5TY2Fyb249NjY3O2UuU2NvbW1hYWNjZW50PTY2NztlLk9odW5nYXJ1bWxhdXQ9Nzc4O2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01NTY7ZS5DY2Fyb249NzIyO2UudWdyYXZlPTU1NjtlLnJhZGljYWw9NDUzO2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zMzM7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTU1NjtlLlJjb21tYWFjY2VudD03MjI7ZS5MY29tbWFhY2NlbnQ9NTU2O2UuQXRpbGRlPTY2NztlLkFvZ29uZWs9NjY3O2UuQXJpbmc9NjY3O2UuT3RpbGRlPTc3ODtlLnpkb3RhY2NlbnQ9NTAwO2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mjc4O2Uua2NvbW1hYWNjZW50PTUwMDtlLm1pbnVzPTU4NDtlLkljaXJjdW1mbGV4PTI3ODtlLm5jYXJvbj01NTY7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD01ODQ7ZS5vZGllcmVzaXM9NTU2O2UudWRpZXJlc2lzPTU1NjtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01NTY7ZS5ldGg9NTU2O2UuemNhcm9uPTUwMDtlLm5jb21tYWFjY2VudD01NTY7ZS5vbmVzdXBlcmlvcj0zMzM7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTU2fSkpO2UuU3ltYm9sPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09MzMzO2UudW5pdmVyc2FsPTcxMztlLm51bWJlcnNpZ249NTAwO2UuZXhpc3RlbnRpYWw9NTQ5O2UucGVyY2VudD04MzM7ZS5hbXBlcnNhbmQ9Nzc4O2Uuc3VjaHRoYXQ9NDM5O2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2ttYXRoPTUwMDtlLnBsdXM9NTQ5O2UuY29tbWE9MjUwO2UubWludXM9NTQ5O2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249Mjc4O2Uuc2VtaWNvbG9uPTI3ODtlLmxlc3M9NTQ5O2UuZXF1YWw9NTQ5O2UuZ3JlYXRlcj01NDk7ZS5xdWVzdGlvbj00NDQ7ZS5jb25ncnVlbnQ9NTQ5O2UuQWxwaGE9NzIyO2UuQmV0YT02Njc7ZS5DaGk9NzIyO2UuRGVsdGE9NjEyO2UuRXBzaWxvbj02MTE7ZS5QaGk9NzYzO2UuR2FtbWE9NjAzO2UuRXRhPTcyMjtlLklvdGE9MzMzO2UudGhldGExPTYzMTtlLkthcHBhPTcyMjtlLkxhbWJkYT02ODY7ZS5NdT04ODk7ZS5OdT03MjI7ZS5PbWljcm9uPTcyMjtlLlBpPTc2ODtlLlRoZXRhPTc0MTtlLlJobz01NTY7ZS5TaWdtYT01OTI7ZS5UYXU9NjExO2UuVXBzaWxvbj02OTA7ZS5zaWdtYTE9NDM5O2UuT21lZ2E9NzY4O2UuWGk9NjQ1O2UuUHNpPTc5NTtlLlpldGE9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UudGhlcmVmb3JlPTg2MztlLmJyYWNrZXRyaWdodD0zMzM7ZS5wZXJwZW5kaWN1bGFyPTY1ODtlLnVuZGVyc2NvcmU9NTAwO2UucmFkaWNhbGV4PTUwMDtlLmFscGhhPTYzMTtlLmJldGE9NTQ5O2UuY2hpPTU0OTtlLmRlbHRhPTQ5NDtlLmVwc2lsb249NDM5O2UucGhpPTUyMTtlLmdhbW1hPTQxMTtlLmV0YT02MDM7ZS5pb3RhPTMyOTtlLnBoaTE9NjAzO2Uua2FwcGE9NTQ5O2UubGFtYmRhPTU0OTtlLm11PTU3NjtlLm51PTUyMTtlLm9taWNyb249NTQ5O2UucGk9NTQ5O2UudGhldGE9NTIxO2UucmhvPTU0OTtlLnNpZ21hPTYwMztlLnRhdT00Mzk7ZS51cHNpbG9uPTU3NjtlLm9tZWdhMT03MTM7ZS5vbWVnYT02ODY7ZS54aT00OTM7ZS5wc2k9Njg2O2UuemV0YT00OTQ7ZS5icmFjZWxlZnQ9NDgwO2UuYmFyPTIwMDtlLmJyYWNlcmlnaHQ9NDgwO2Uuc2ltaWxhcj01NDk7ZS5FdXJvPTc1MDtlLlVwc2lsb24xPTYyMDtlLm1pbnV0ZT0yNDc7ZS5sZXNzZXF1YWw9NTQ5O2UuZnJhY3Rpb249MTY3O2UuaW5maW5pdHk9NzEzO2UuZmxvcmluPTUwMDtlLmNsdWI9NzUzO2UuZGlhbW9uZD03NTM7ZS5oZWFydD03NTM7ZS5zcGFkZT03NTM7ZS5hcnJvd2JvdGg9MTA0MjtlLmFycm93bGVmdD05ODc7ZS5hcnJvd3VwPTYwMztlLmFycm93cmlnaHQ9OTg3O2UuYXJyb3dkb3duPTYwMztlLmRlZ3JlZT00MDA7ZS5wbHVzbWludXM9NTQ5O2Uuc2Vjb25kPTQxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5tdWx0aXBseT01NDk7ZS5wcm9wb3J0aW9uYWw9NzEzO2UucGFydGlhbGRpZmY9NDk0O2UuYnVsbGV0PTQ2MDtlLmRpdmlkZT01NDk7ZS5ub3RlcXVhbD01NDk7ZS5lcXVpdmFsZW5jZT01NDk7ZS5hcHByb3hlcXVhbD01NDk7ZS5lbGxpcHNpcz0xZTM7ZS5hcnJvd3ZlcnRleD02MDM7ZS5hcnJvd2hvcml6ZXg9MWUzO2UuY2FycmlhZ2VyZXR1cm49NjU4O2UuYWxlcGg9ODIzO2UuSWZyYWt0dXI9Njg2O2UuUmZyYWt0dXI9Nzk1O2Uud2VpZXJzdHJhc3M9OTg3O2UuY2lyY2xlbXVsdGlwbHk9NzY4O2UuY2lyY2xlcGx1cz03Njg7ZS5lbXB0eXNldD04MjM7ZS5pbnRlcnNlY3Rpb249NzY4O2UudW5pb249NzY4O2UucHJvcGVyc3VwZXJzZXQ9NzEzO2UucmVmbGV4c3VwZXJzZXQ9NzEzO2Uubm90c3Vic2V0PTcxMztlLnByb3BlcnN1YnNldD03MTM7ZS5yZWZsZXhzdWJzZXQ9NzEzO2UuZWxlbWVudD03MTM7ZS5ub3RlbGVtZW50PTcxMztlLmFuZ2xlPTc2ODtlLmdyYWRpZW50PTcxMztlLnJlZ2lzdGVyc2VyaWY9NzkwO2UuY29weXJpZ2h0c2VyaWY9NzkwO2UudHJhZGVtYXJrc2VyaWY9ODkwO2UucHJvZHVjdD04MjM7ZS5yYWRpY2FsPTU0OTtlLmRvdG1hdGg9MjUwO2UubG9naWNhbG5vdD03MTM7ZS5sb2dpY2FsYW5kPTYwMztlLmxvZ2ljYWxvcj02MDM7ZS5hcnJvd2RibGJvdGg9MTA0MjtlLmFycm93ZGJsbGVmdD05ODc7ZS5hcnJvd2RibHVwPTYwMztlLmFycm93ZGJscmlnaHQ9OTg3O2UuYXJyb3dkYmxkb3duPTYwMztlLmxvemVuZ2U9NDk0O2UuYW5nbGVsZWZ0PTMyOTtlLnJlZ2lzdGVyc2Fucz03OTA7ZS5jb3B5cmlnaHRzYW5zPTc5MDtlLnRyYWRlbWFya3NhbnM9Nzg2O2Uuc3VtbWF0aW9uPTcxMztlLnBhcmVubGVmdHRwPTM4NDtlLnBhcmVubGVmdGV4PTM4NDtlLnBhcmVubGVmdGJ0PTM4NDtlLmJyYWNrZXRsZWZ0dHA9Mzg0O2UuYnJhY2tldGxlZnRleD0zODQ7ZS5icmFja2V0bGVmdGJ0PTM4NDtlLmJyYWNlbGVmdHRwPTQ5NDtlLmJyYWNlbGVmdG1pZD00OTQ7ZS5icmFjZWxlZnRidD00OTQ7ZS5icmFjZWV4PTQ5NDtlLmFuZ2xlcmlnaHQ9MzI5O2UuaW50ZWdyYWw9Mjc0O2UuaW50ZWdyYWx0cD02ODY7ZS5pbnRlZ3JhbGV4PTY4NjtlLmludGVncmFsYnQ9Njg2O2UucGFyZW5yaWdodHRwPTM4NDtlLnBhcmVucmlnaHRleD0zODQ7ZS5wYXJlbnJpZ2h0YnQ9Mzg0O2UuYnJhY2tldHJpZ2h0dHA9Mzg0O2UuYnJhY2tldHJpZ2h0ZXg9Mzg0O2UuYnJhY2tldHJpZ2h0YnQ9Mzg0O2UuYnJhY2VyaWdodHRwPTQ5NDtlLmJyYWNlcmlnaHRtaWQ9NDk0O2UuYnJhY2VyaWdodGJ0PTQ5NDtlLmFwcGxlPTc5MH0pKTtlWyJUaW1lcy1Sb21hbiJdPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NDA4O2UubnVtYmVyc2lnbj01MDA7ZS5kb2xsYXI9NTAwO2UucGVyY2VudD04MzM7ZS5hbXBlcnNhbmQ9Nzc4O2UucXVvdGVyaWdodD0zMzM7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz01MDA7ZS5wbHVzPTU2NDtlLmNvbW1hPTI1MDtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9MjUwO2Uuc2xhc2g9Mjc4O2UuemVybz01MDA7ZS5vbmU9NTAwO2UudHdvPTUwMDtlLnRocmVlPTUwMDtlLmZvdXI9NTAwO2UuZml2ZT01MDA7ZS5zaXg9NTAwO2Uuc2V2ZW49NTAwO2UuZWlnaHQ9NTAwO2UubmluZT01MDA7ZS5jb2xvbj0yNzg7ZS5zZW1pY29sb249Mjc4O2UubGVzcz01NjQ7ZS5lcXVhbD01NjQ7ZS5ncmVhdGVyPTU2NDtlLnF1ZXN0aW9uPTQ0NDtlLmF0PTkyMTtlLkE9NzIyO2UuQj02Njc7ZS5DPTY2NztlLkQ9NzIyO2UuRT02MTE7ZS5GPTU1NjtlLkc9NzIyO2UuSD03MjI7ZS5JPTMzMztlLko9Mzg5O2UuSz03MjI7ZS5MPTYxMTtlLk09ODg5O2UuTj03MjI7ZS5PPTcyMjtlLlA9NTU2O2UuUT03MjI7ZS5SPTY2NztlLlM9NTU2O2UuVD02MTE7ZS5VPTcyMjtlLlY9NzIyO2UuVz05NDQ7ZS5YPTcyMjtlLlk9NzIyO2UuWj02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTQ2OTtlLnVuZGVyc2NvcmU9NTAwO2UucXVvdGVsZWZ0PTMzMztlLmE9NDQ0O2UuYj01MDA7ZS5jPTQ0NDtlLmQ9NTAwO2UuZT00NDQ7ZS5mPTMzMztlLmc9NTAwO2UuaD01MDA7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz01MDA7ZS5sPTI3ODtlLm09Nzc4O2Uubj01MDA7ZS5vPTUwMDtlLnA9NTAwO2UucT01MDA7ZS5yPTMzMztlLnM9Mzg5O2UudD0yNzg7ZS51PTUwMDtlLnY9NTAwO2Uudz03MjI7ZS54PTUwMDtlLnk9NTAwO2Uuej00NDQ7ZS5icmFjZWxlZnQ9NDgwO2UuYmFyPTIwMDtlLmJyYWNlcmlnaHQ9NDgwO2UuYXNjaWl0aWxkZT01NDE7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTAwO2Uuc3Rlcmxpbmc9NTAwO2UuZnJhY3Rpb249MTY3O2UueWVuPTUwMDtlLmZsb3Jpbj01MDA7ZS5zZWN0aW9uPTUwMDtlLmN1cnJlbmN5PTUwMDtlLnF1b3Rlc2luZ2xlPTE4MDtlLnF1b3RlZGJsbGVmdD00NDQ7ZS5ndWlsbGVtb3RsZWZ0PTUwMDtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTU2O2UuZmw9NTU2O2UuZW5kYXNoPTUwMDtlLmRhZ2dlcj01MDA7ZS5kYWdnZXJkYmw9NTAwO2UucGVyaW9kY2VudGVyZWQ9MjUwO2UucGFyYWdyYXBoPTQ1MztlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0zMzM7ZS5xdW90ZWRibGJhc2U9NDQ0O2UucXVvdGVkYmxyaWdodD00NDQ7ZS5ndWlsbGVtb3RyaWdodD01MDA7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NDQ0O2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT04ODk7ZS5vcmRmZW1pbmluZT0yNzY7ZS5Mc2xhc2g9NjExO2UuT3NsYXNoPTcyMjtlLk9FPTg4OTtlLm9yZG1hc2N1bGluZT0zMTA7ZS5hZT02Njc7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTUwMDtlLm9lPTcyMjtlLmdlcm1hbmRibHM9NTAwO2UuSWRpZXJlc2lzPTMzMztlLmVhY3V0ZT00NDQ7ZS5hYnJldmU9NDQ0O2UudWh1bmdhcnVtbGF1dD01MDA7ZS5lY2Fyb249NDQ0O2UuWWRpZXJlc2lzPTcyMjtlLmRpdmlkZT01NjQ7ZS5ZYWN1dGU9NzIyO2UuQWNpcmN1bWZsZXg9NzIyO2UuYWFjdXRlPTQ0NDtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01MDA7ZS5zY29tbWFhY2NlbnQ9Mzg5O2UuZWNpcmN1bWZsZXg9NDQ0O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NDQ0O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTAwO2UuRWRpZXJlc2lzPTYxMTtlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzYwO2UuRW1hY3Jvbj02MTE7ZS5jY2Fyb249NDQ0O2UuYXJpbmc9NDQ0O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NDQ0O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT02Njc7ZS5hdGlsZGU9NDQ0O2UuRWRvdGFjY2VudD02MTE7ZS5zY2Fyb249Mzg5O2Uuc2NlZGlsbGE9Mzg5O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDcxO2UuUmNhcm9uPTY2NztlLkdjb21tYWFjY2VudD03MjI7ZS51Y2lyY3VtZmxleD01MDA7ZS5hY2lyY3VtZmxleD00NDQ7ZS5BbWFjcm9uPTcyMjtlLnJjYXJvbj0zMzM7ZS5jY2VkaWxsYT00NDQ7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTU1NjtlLk9tYWNyb249NzIyO2UuUmFjdXRlPTY2NztlLlNhY3V0ZT01NTY7ZS5kY2Fyb249NTg4O2UuVW1hY3Jvbj03MjI7ZS51cmluZz01MDA7ZS50aHJlZXN1cGVyaW9yPTMwMDtlLk9ncmF2ZT03MjI7ZS5BZ3JhdmU9NzIyO2UuQWJyZXZlPTcyMjtlLm11bHRpcGx5PTU2NDtlLnVhY3V0ZT01MDA7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDc2O2UueWRpZXJlc2lzPTUwMDtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02MTE7ZS5hZGllcmVzaXM9NDQ0O2UuZWRpZXJlc2lzPTQ0NDtlLmNhY3V0ZT00NDQ7ZS5uYWN1dGU9NTAwO2UudW1hY3Jvbj01MDA7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTMzMztlLnBsdXNtaW51cz01NjQ7ZS5icm9rZW5iYXI9MjAwO2UucmVnaXN0ZXJlZD03NjA7ZS5HYnJldmU9NzIyO2UuSWRvdGFjY2VudD0zMzM7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTYxMTtlLnJhY3V0ZT0zMzM7ZS5vbWFjcm9uPTUwMDtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT02Njc7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTMyNjtlLmVvZ29uZWs9NDQ0O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NzIyO2UuQWRpZXJlc2lzPTcyMjtlLmVncmF2ZT00NDQ7ZS56YWN1dGU9NDQ0O2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9NzIyO2Uub2FjdXRlPTUwMDtlLmFtYWNyb249NDQ0O2Uuc2FjdXRlPTM4OTtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03MjI7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTAwO2UudHdvc3VwZXJpb3I9MzAwO2UuT2RpZXJlc2lzPTcyMjtlLm11PTUwMDtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTUwMDtlLkVvZ29uZWs9NjExO2UuZGNyb2F0PTUwMDtlLnRocmVlcXVhcnRlcnM9NzUwO2UuU2NlZGlsbGE9NTU2O2UubGNhcm9uPTM0NDtlLktjb21tYWFjY2VudD03MjI7ZS5MYWN1dGU9NjExO2UudHJhZGVtYXJrPTk4MDtlLmVkb3RhY2NlbnQ9NDQ0O2UuSWdyYXZlPTMzMztlLkltYWNyb249MzMzO2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9NzUwO2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTUwMDtlLm50aWxkZT01MDA7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02MTE7ZS5lbWFjcm9uPTQ0NDtlLmdicmV2ZT01MDA7ZS5vbmVxdWFydGVyPTc1MDtlLlNjYXJvbj01NTY7ZS5TY29tbWFhY2NlbnQ9NTU2O2UuT2h1bmdhcnVtbGF1dD03MjI7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTUwMDtlLkNjYXJvbj02Njc7ZS51Z3JhdmU9NTAwO2UucmFkaWNhbD00NTM7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTMzMztlLk50aWxkZT03MjI7ZS5vdGlsZGU9NTAwO2UuUmNvbW1hYWNjZW50PTY2NztlLkxjb21tYWFjY2VudD02MTE7ZS5BdGlsZGU9NzIyO2UuQW9nb25laz03MjI7ZS5BcmluZz03MjI7ZS5PdGlsZGU9NzIyO2UuemRvdGFjY2VudD00NDQ7ZS5FY2Fyb249NjExO2UuSW9nb25laz0zMzM7ZS5rY29tbWFhY2NlbnQ9NTAwO2UubWludXM9NTY0O2UuSWNpcmN1bWZsZXg9MzMzO2UubmNhcm9uPTUwMDtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTU2NDtlLm9kaWVyZXNpcz01MDA7ZS51ZGllcmVzaXM9NTAwO2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTUwMDtlLmV0aD01MDA7ZS56Y2Fyb249NDQ0O2UubmNvbW1hYWNjZW50PTUwMDtlLm9uZXN1cGVyaW9yPTMwMDtlLmltYWNyb249Mjc4O2UuRXVybz01MDB9KSk7ZVsiVGltZXMtQm9sZCJdPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NTU1O2UubnVtYmVyc2lnbj01MDA7ZS5kb2xsYXI9NTAwO2UucGVyY2VudD0xZTM7ZS5hbXBlcnNhbmQ9ODMzO2UucXVvdGVyaWdodD0zMzM7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz01MDA7ZS5wbHVzPTU3MDtlLmNvbW1hPTI1MDtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9MjUwO2Uuc2xhc2g9Mjc4O2UuemVybz01MDA7ZS5vbmU9NTAwO2UudHdvPTUwMDtlLnRocmVlPTUwMDtlLmZvdXI9NTAwO2UuZml2ZT01MDA7ZS5zaXg9NTAwO2Uuc2V2ZW49NTAwO2UuZWlnaHQ9NTAwO2UubmluZT01MDA7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz01NzA7ZS5lcXVhbD01NzA7ZS5ncmVhdGVyPTU3MDtlLnF1ZXN0aW9uPTUwMDtlLmF0PTkzMDtlLkE9NzIyO2UuQj02Njc7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03Nzg7ZS5JPTM4OTtlLko9NTAwO2UuSz03Nzg7ZS5MPTY2NztlLk09OTQ0O2UuTj03MjI7ZS5PPTc3ODtlLlA9NjExO2UuUT03Nzg7ZS5SPTcyMjtlLlM9NTU2O2UuVD02Njc7ZS5VPTcyMjtlLlY9NzIyO2UuVz0xZTM7ZS5YPTcyMjtlLlk9NzIyO2UuWj02Njc7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTU4MTtlLnVuZGVyc2NvcmU9NTAwO2UucXVvdGVsZWZ0PTMzMztlLmE9NTAwO2UuYj01NTY7ZS5jPTQ0NDtlLmQ9NTU2O2UuZT00NDQ7ZS5mPTMzMztlLmc9NTAwO2UuaD01NTY7ZS5pPTI3ODtlLmo9MzMzO2Uuaz01NTY7ZS5sPTI3ODtlLm09ODMzO2Uubj01NTY7ZS5vPTUwMDtlLnA9NTU2O2UucT01NTY7ZS5yPTQ0NDtlLnM9Mzg5O2UudD0zMzM7ZS51PTU1NjtlLnY9NTAwO2Uudz03MjI7ZS54PTUwMDtlLnk9NTAwO2Uuej00NDQ7ZS5icmFjZWxlZnQ9Mzk0O2UuYmFyPTIyMDtlLmJyYWNlcmlnaHQ9Mzk0O2UuYXNjaWl0aWxkZT01MjA7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTAwO2Uuc3Rlcmxpbmc9NTAwO2UuZnJhY3Rpb249MTY3O2UueWVuPTUwMDtlLmZsb3Jpbj01MDA7ZS5zZWN0aW9uPTUwMDtlLmN1cnJlbmN5PTUwMDtlLnF1b3Rlc2luZ2xlPTI3ODtlLnF1b3RlZGJsbGVmdD01MDA7ZS5ndWlsbGVtb3RsZWZ0PTUwMDtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTU2O2UuZmw9NTU2O2UuZW5kYXNoPTUwMDtlLmRhZ2dlcj01MDA7ZS5kYWdnZXJkYmw9NTAwO2UucGVyaW9kY2VudGVyZWQ9MjUwO2UucGFyYWdyYXBoPTU0MDtlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0zMzM7ZS5xdW90ZWRibGJhc2U9NTAwO2UucXVvdGVkYmxyaWdodD01MDA7ZS5ndWlsbGVtb3RyaWdodD01MDA7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NTAwO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zMDA7ZS5Mc2xhc2g9NjY3O2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zMzA7ZS5hZT03MjI7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTUwMDtlLm9lPTcyMjtlLmdlcm1hbmRibHM9NTU2O2UuSWRpZXJlc2lzPTM4OTtlLmVhY3V0ZT00NDQ7ZS5hYnJldmU9NTAwO2UudWh1bmdhcnVtbGF1dD01NTY7ZS5lY2Fyb249NDQ0O2UuWWRpZXJlc2lzPTcyMjtlLmRpdmlkZT01NzA7ZS5ZYWN1dGU9NzIyO2UuQWNpcmN1bWZsZXg9NzIyO2UuYWFjdXRlPTUwMDtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01MDA7ZS5zY29tbWFhY2NlbnQ9Mzg5O2UuZWNpcmN1bWZsZXg9NDQ0O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTAwO2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTU2O2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzQ3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NDQ0O2UuYXJpbmc9NTAwO2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTAwO2UuVGNvbW1hYWNjZW50PTY2NztlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTAwO2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249Mzg5O2Uuc2NlZGlsbGE9Mzg5O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDk0O2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD01NTY7ZS5hY2lyY3VtZmxleD01MDA7ZS5BbWFjcm9uPTcyMjtlLnJjYXJvbj00NDQ7ZS5jY2VkaWxsYT00NDQ7ZS5aZG90YWNjZW50PTY2NztlLlRob3JuPTYxMTtlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT01NTY7ZS5kY2Fyb249NjcyO2UuVW1hY3Jvbj03MjI7ZS51cmluZz01NTY7ZS50aHJlZXN1cGVyaW9yPTMwMDtlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NzIyO2UuQWJyZXZlPTcyMjtlLm11bHRpcGx5PTU3MDtlLnVhY3V0ZT01NTY7ZS5UY2Fyb249NjY3O2UucGFydGlhbGRpZmY9NDk0O2UueWRpZXJlc2lzPTUwMDtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTAwO2UuZWRpZXJlc2lzPTQ0NDtlLmNhY3V0ZT00NDQ7ZS5uYWN1dGU9NTU2O2UudW1hY3Jvbj01NTY7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTM4OTtlLnBsdXNtaW51cz01NzA7ZS5icm9rZW5iYXI9MjIwO2UucmVnaXN0ZXJlZD03NDc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0zODk7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT00NDQ7ZS5vbWFjcm9uPTUwMDtlLlphY3V0ZT02Njc7ZS5aY2Fyb249NjY3O2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTQxNjtlLmVvZ29uZWs9NDQ0O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NzIyO2UuQWRpZXJlc2lzPTcyMjtlLmVncmF2ZT00NDQ7ZS56YWN1dGU9NDQ0O2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTUwMDtlLmFtYWNyb249NTAwO2Uuc2FjdXRlPTM4OTtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTU2O2UudHdvc3VwZXJpb3I9MzAwO2UuT2RpZXJlc2lzPTc3ODtlLm11PTU1NjtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTUwMDtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTU1NjtlLnRocmVlcXVhcnRlcnM9NzUwO2UuU2NlZGlsbGE9NTU2O2UubGNhcm9uPTM5NDtlLktjb21tYWFjY2VudD03Nzg7ZS5MYWN1dGU9NjY3O2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NDQ0O2UuSWdyYXZlPTM4OTtlLkltYWNyb249Mzg5O2UuTGNhcm9uPTY2NztlLm9uZWhhbGY9NzUwO2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTUwMDtlLm50aWxkZT01NTY7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTQ0NDtlLmdicmV2ZT01MDA7ZS5vbmVxdWFydGVyPTc1MDtlLlNjYXJvbj01NTY7ZS5TY29tbWFhY2NlbnQ9NTU2O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTUwMDtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NTU2O2UucmFkaWNhbD01NDk7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTQ0NDtlLk50aWxkZT03MjI7ZS5vdGlsZGU9NTAwO2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD02Njc7ZS5BdGlsZGU9NzIyO2UuQW9nb25laz03MjI7ZS5BcmluZz03MjI7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD00NDQ7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0zODk7ZS5rY29tbWFhY2NlbnQ9NTU2O2UubWludXM9NTcwO2UuSWNpcmN1bWZsZXg9Mzg5O2UubmNhcm9uPTU1NjtlLnRjb21tYWFjY2VudD0zMzM7ZS5sb2dpY2Fsbm90PTU3MDtlLm9kaWVyZXNpcz01MDA7ZS51ZGllcmVzaXM9NTU2O2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTUwMDtlLmV0aD01MDA7ZS56Y2Fyb249NDQ0O2UubmNvbW1hYWNjZW50PTU1NjtlLm9uZXN1cGVyaW9yPTMwMDtlLmltYWNyb249Mjc4O2UuRXVybz01MDB9KSk7ZVsiVGltZXMtQm9sZEl0YWxpYyJdPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09Mzg5O2UucXVvdGVkYmw9NTU1O2UubnVtYmVyc2lnbj01MDA7ZS5kb2xsYXI9NTAwO2UucGVyY2VudD04MzM7ZS5hbXBlcnNhbmQ9Nzc4O2UucXVvdGVyaWdodD0zMzM7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz01MDA7ZS5wbHVzPTU3MDtlLmNvbW1hPTI1MDtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9MjUwO2Uuc2xhc2g9Mjc4O2UuemVybz01MDA7ZS5vbmU9NTAwO2UudHdvPTUwMDtlLnRocmVlPTUwMDtlLmZvdXI9NTAwO2UuZml2ZT01MDA7ZS5zaXg9NTAwO2Uuc2V2ZW49NTAwO2UuZWlnaHQ9NTAwO2UubmluZT01MDA7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz01NzA7ZS5lcXVhbD01NzA7ZS5ncmVhdGVyPTU3MDtlLnF1ZXN0aW9uPTUwMDtlLmF0PTgzMjtlLkE9NjY3O2UuQj02Njc7ZS5DPTY2NztlLkQ9NzIyO2UuRT02Njc7ZS5GPTY2NztlLkc9NzIyO2UuSD03Nzg7ZS5JPTM4OTtlLko9NTAwO2UuSz02Njc7ZS5MPTYxMTtlLk09ODg5O2UuTj03MjI7ZS5PPTcyMjtlLlA9NjExO2UuUT03MjI7ZS5SPTY2NztlLlM9NTU2O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz04ODk7ZS5YPTY2NztlLlk9NjExO2UuWj02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTU3MDtlLnVuZGVyc2NvcmU9NTAwO2UucXVvdGVsZWZ0PTMzMztlLmE9NTAwO2UuYj01MDA7ZS5jPTQ0NDtlLmQ9NTAwO2UuZT00NDQ7ZS5mPTMzMztlLmc9NTAwO2UuaD01NTY7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz01MDA7ZS5sPTI3ODtlLm09Nzc4O2Uubj01NTY7ZS5vPTUwMDtlLnA9NTAwO2UucT01MDA7ZS5yPTM4OTtlLnM9Mzg5O2UudD0yNzg7ZS51PTU1NjtlLnY9NDQ0O2Uudz02Njc7ZS54PTUwMDtlLnk9NDQ0O2Uuej0zODk7ZS5icmFjZWxlZnQ9MzQ4O2UuYmFyPTIyMDtlLmJyYWNlcmlnaHQ9MzQ4O2UuYXNjaWl0aWxkZT01NzA7ZS5leGNsYW1kb3duPTM4OTtlLmNlbnQ9NTAwO2Uuc3Rlcmxpbmc9NTAwO2UuZnJhY3Rpb249MTY3O2UueWVuPTUwMDtlLmZsb3Jpbj01MDA7ZS5zZWN0aW9uPTUwMDtlLmN1cnJlbmN5PTUwMDtlLnF1b3Rlc2luZ2xlPTI3ODtlLnF1b3RlZGJsbGVmdD01MDA7ZS5ndWlsbGVtb3RsZWZ0PTUwMDtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTU2O2UuZmw9NTU2O2UuZW5kYXNoPTUwMDtlLmRhZ2dlcj01MDA7ZS5kYWdnZXJkYmw9NTAwO2UucGVyaW9kY2VudGVyZWQ9MjUwO2UucGFyYWdyYXBoPTUwMDtlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0zMzM7ZS5xdW90ZWRibGJhc2U9NTAwO2UucXVvdGVkYmxyaWdodD01MDA7ZS5ndWlsbGVtb3RyaWdodD01MDA7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NTAwO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT05NDQ7ZS5vcmRmZW1pbmluZT0yNjY7ZS5Mc2xhc2g9NjExO2UuT3NsYXNoPTcyMjtlLk9FPTk0NDtlLm9yZG1hc2N1bGluZT0zMDA7ZS5hZT03MjI7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTUwMDtlLm9lPTcyMjtlLmdlcm1hbmRibHM9NTAwO2UuSWRpZXJlc2lzPTM4OTtlLmVhY3V0ZT00NDQ7ZS5hYnJldmU9NTAwO2UudWh1bmdhcnVtbGF1dD01NTY7ZS5lY2Fyb249NDQ0O2UuWWRpZXJlc2lzPTYxMTtlLmRpdmlkZT01NzA7ZS5ZYWN1dGU9NjExO2UuQWNpcmN1bWZsZXg9NjY3O2UuYWFjdXRlPTUwMDtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT00NDQ7ZS5zY29tbWFhY2NlbnQ9Mzg5O2UuZWNpcmN1bWZsZXg9NDQ0O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTAwO2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTU2O2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzQ3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NDQ0O2UuYXJpbmc9NTAwO2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTAwO2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT02Njc7ZS5hdGlsZGU9NTAwO2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249Mzg5O2Uuc2NlZGlsbGE9Mzg5O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDk0O2UuUmNhcm9uPTY2NztlLkdjb21tYWFjY2VudD03MjI7ZS51Y2lyY3VtZmxleD01NTY7ZS5hY2lyY3VtZmxleD01MDA7ZS5BbWFjcm9uPTY2NztlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT00NDQ7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTYxMTtlLk9tYWNyb249NzIyO2UuUmFjdXRlPTY2NztlLlNhY3V0ZT01NTY7ZS5kY2Fyb249NjA4O2UuVW1hY3Jvbj03MjI7ZS51cmluZz01NTY7ZS50aHJlZXN1cGVyaW9yPTMwMDtlLk9ncmF2ZT03MjI7ZS5BZ3JhdmU9NjY3O2UuQWJyZXZlPTY2NztlLm11bHRpcGx5PTU3MDtlLnVhY3V0ZT01NTY7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDk0O2UueWRpZXJlc2lzPTQ0NDtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTAwO2UuZWRpZXJlc2lzPTQ0NDtlLmNhY3V0ZT00NDQ7ZS5uYWN1dGU9NTU2O2UudW1hY3Jvbj01NTY7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTM4OTtlLnBsdXNtaW51cz01NzA7ZS5icm9rZW5iYXI9MjIwO2UucmVnaXN0ZXJlZD03NDc7ZS5HYnJldmU9NzIyO2UuSWRvdGFjY2VudD0zODk7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTUwMDtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT02Njc7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTM2NjtlLmVvZ29uZWs9NDQ0O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NjY3O2UuQWRpZXJlc2lzPTY2NztlLmVncmF2ZT00NDQ7ZS56YWN1dGU9Mzg5O2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9NzIyO2Uub2FjdXRlPTUwMDtlLmFtYWNyb249NTAwO2Uuc2FjdXRlPTM4OTtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03MjI7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTAwO2UudHdvc3VwZXJpb3I9MzAwO2UuT2RpZXJlc2lzPTcyMjtlLm11PTU3NjtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTUwMDtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTUwMDtlLnRocmVlcXVhcnRlcnM9NzUwO2UuU2NlZGlsbGE9NTU2O2UubGNhcm9uPTM4MjtlLktjb21tYWFjY2VudD02Njc7ZS5MYWN1dGU9NjExO2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NDQ0O2UuSWdyYXZlPTM4OTtlLkltYWNyb249Mzg5O2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9NzUwO2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTUwMDtlLm50aWxkZT01NTY7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTQ0NDtlLmdicmV2ZT01MDA7ZS5vbmVxdWFydGVyPTc1MDtlLlNjYXJvbj01NTY7ZS5TY29tbWFhY2NlbnQ9NTU2O2UuT2h1bmdhcnVtbGF1dD03MjI7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTUwMDtlLkNjYXJvbj02Njc7ZS51Z3JhdmU9NTU2O2UucmFkaWNhbD01NDk7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT03MjI7ZS5vdGlsZGU9NTAwO2UuUmNvbW1hYWNjZW50PTY2NztlLkxjb21tYWFjY2VudD02MTE7ZS5BdGlsZGU9NjY3O2UuQW9nb25laz02Njc7ZS5BcmluZz02Njc7ZS5PdGlsZGU9NzIyO2UuemRvdGFjY2VudD0zODk7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0zODk7ZS5rY29tbWFhY2NlbnQ9NTAwO2UubWludXM9NjA2O2UuSWNpcmN1bWZsZXg9Mzg5O2UubmNhcm9uPTU1NjtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTYwNjtlLm9kaWVyZXNpcz01MDA7ZS51ZGllcmVzaXM9NTU2O2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTUwMDtlLmV0aD01MDA7ZS56Y2Fyb249Mzg5O2UubmNvbW1hYWNjZW50PTU1NjtlLm9uZXN1cGVyaW9yPTMwMDtlLmltYWNyb249Mjc4O2UuRXVybz01MDB9KSk7ZVsiVGltZXMtSXRhbGljIl09KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MDtlLmV4Y2xhbT0zMzM7ZS5xdW90ZWRibD00MjA7ZS5udW1iZXJzaWduPTUwMDtlLmRvbGxhcj01MDA7ZS5wZXJjZW50PTgzMztlLmFtcGVyc2FuZD03Nzg7ZS5xdW90ZXJpZ2h0PTMzMztlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTUwMDtlLnBsdXM9Njc1O2UuY29tbWE9MjUwO2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNTA7ZS5zbGFzaD0yNzg7ZS56ZXJvPTUwMDtlLm9uZT01MDA7ZS50d289NTAwO2UudGhyZWU9NTAwO2UuZm91cj01MDA7ZS5maXZlPTUwMDtlLnNpeD01MDA7ZS5zZXZlbj01MDA7ZS5laWdodD01MDA7ZS5uaW5lPTUwMDtlLmNvbG9uPTMzMztlLnNlbWljb2xvbj0zMzM7ZS5sZXNzPTY3NTtlLmVxdWFsPTY3NTtlLmdyZWF0ZXI9Njc1O2UucXVlc3Rpb249NTAwO2UuYXQ9OTIwO2UuQT02MTE7ZS5CPTYxMTtlLkM9NjY3O2UuRD03MjI7ZS5FPTYxMTtlLkY9NjExO2UuRz03MjI7ZS5IPTcyMjtlLkk9MzMzO2UuSj00NDQ7ZS5LPTY2NztlLkw9NTU2O2UuTT04MzM7ZS5OPTY2NztlLk89NzIyO2UuUD02MTE7ZS5RPTcyMjtlLlI9NjExO2UuUz01MDA7ZS5UPTU1NjtlLlU9NzIyO2UuVj02MTE7ZS5XPTgzMztlLlg9NjExO2UuWT01NTY7ZS5aPTU1NjtlLmJyYWNrZXRsZWZ0PTM4OTtlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9Mzg5O2UuYXNjaWljaXJjdW09NDIyO2UudW5kZXJzY29yZT01MDA7ZS5xdW90ZWxlZnQ9MzMzO2UuYT01MDA7ZS5iPTUwMDtlLmM9NDQ0O2UuZD01MDA7ZS5lPTQ0NDtlLmY9Mjc4O2UuZz01MDA7ZS5oPTUwMDtlLmk9Mjc4O2Uuaj0yNzg7ZS5rPTQ0NDtlLmw9Mjc4O2UubT03MjI7ZS5uPTUwMDtlLm89NTAwO2UucD01MDA7ZS5xPTUwMDtlLnI9Mzg5O2Uucz0zODk7ZS50PTI3ODtlLnU9NTAwO2Uudj00NDQ7ZS53PTY2NztlLng9NDQ0O2UueT00NDQ7ZS56PTM4OTtlLmJyYWNlbGVmdD00MDA7ZS5iYXI9Mjc1O2UuYnJhY2VyaWdodD00MDA7ZS5hc2NpaXRpbGRlPTU0MTtlLmV4Y2xhbWRvd249Mzg5O2UuY2VudD01MDA7ZS5zdGVybGluZz01MDA7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTAwO2UuZmxvcmluPTUwMDtlLnNlY3Rpb249NTAwO2UuY3VycmVuY3k9NTAwO2UucXVvdGVzaW5nbGU9MjE0O2UucXVvdGVkYmxsZWZ0PTU1NjtlLmd1aWxsZW1vdGxlZnQ9NTAwO2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01MDA7ZS5mbD01MDA7ZS5lbmRhc2g9NTAwO2UuZGFnZ2VyPTUwMDtlLmRhZ2dlcmRibD01MDA7ZS5wZXJpb2RjZW50ZXJlZD0yNTA7ZS5wYXJhZ3JhcGg9NTIzO2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTMzMztlLnF1b3RlZGJsYmFzZT01NTY7ZS5xdW90ZWRibHJpZ2h0PTU1NjtlLmd1aWxsZW1vdHJpZ2h0PTUwMDtlLmVsbGlwc2lzPTg4OTtlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj01MDA7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTg4OTtlLkFFPTg4OTtlLm9yZGZlbWluaW5lPTI3NjtlLkxzbGFzaD01NTY7ZS5Pc2xhc2g9NzIyO2UuT0U9OTQ0O2Uub3JkbWFzY3VsaW5lPTMxMDtlLmFlPTY2NztlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yNzg7ZS5vc2xhc2g9NTAwO2Uub2U9NjY3O2UuZ2VybWFuZGJscz01MDA7ZS5JZGllcmVzaXM9MzMzO2UuZWFjdXRlPTQ0NDtlLmFicmV2ZT01MDA7ZS51aHVuZ2FydW1sYXV0PTUwMDtlLmVjYXJvbj00NDQ7ZS5ZZGllcmVzaXM9NTU2O2UuZGl2aWRlPTY3NTtlLllhY3V0ZT01NTY7ZS5BY2lyY3VtZmxleD02MTE7ZS5hYWN1dGU9NTAwO2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTQ0NDtlLnNjb21tYWFjY2VudD0zODk7ZS5lY2lyY3VtZmxleD00NDQ7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01MDA7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01MDA7ZS5FZGllcmVzaXM9NjExO2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03NjA7ZS5FbWFjcm9uPTYxMTtlLmNjYXJvbj00NDQ7ZS5hcmluZz01MDA7ZS5OY29tbWFhY2NlbnQ9NjY3O2UubGFjdXRlPTI3ODtlLmFncmF2ZT01MDA7ZS5UY29tbWFhY2NlbnQ9NTU2O2UuQ2FjdXRlPTY2NztlLmF0aWxkZT01MDA7ZS5FZG90YWNjZW50PTYxMTtlLnNjYXJvbj0zODk7ZS5zY2VkaWxsYT0zODk7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00NzE7ZS5SY2Fyb249NjExO2UuR2NvbW1hYWNjZW50PTcyMjtlLnVjaXJjdW1mbGV4PTUwMDtlLmFjaXJjdW1mbGV4PTUwMDtlLkFtYWNyb249NjExO2UucmNhcm9uPTM4OTtlLmNjZWRpbGxhPTQ0NDtlLlpkb3RhY2NlbnQ9NTU2O2UuVGhvcm49NjExO2UuT21hY3Jvbj03MjI7ZS5SYWN1dGU9NjExO2UuU2FjdXRlPTUwMDtlLmRjYXJvbj01NDQ7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTUwMDtlLnRocmVlc3VwZXJpb3I9MzAwO2UuT2dyYXZlPTcyMjtlLkFncmF2ZT02MTE7ZS5BYnJldmU9NjExO2UubXVsdGlwbHk9Njc1O2UudWFjdXRlPTUwMDtlLlRjYXJvbj01NTY7ZS5wYXJ0aWFsZGlmZj00NzY7ZS55ZGllcmVzaXM9NDQ0O2UuTmFjdXRlPTY2NztlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTYxMTtlLmFkaWVyZXNpcz01MDA7ZS5lZGllcmVzaXM9NDQ0O2UuY2FjdXRlPTQ0NDtlLm5hY3V0ZT01MDA7ZS51bWFjcm9uPTUwMDtlLk5jYXJvbj02Njc7ZS5JYWN1dGU9MzMzO2UucGx1c21pbnVzPTY3NTtlLmJyb2tlbmJhcj0yNzU7ZS5yZWdpc3RlcmVkPTc2MDtlLkdicmV2ZT03MjI7ZS5JZG90YWNjZW50PTMzMztlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjExO2UucmFjdXRlPTM4OTtlLm9tYWNyb249NTAwO2UuWmFjdXRlPTU1NjtlLlpjYXJvbj01NTY7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTY2NztlLmxjb21tYWFjY2VudD0yNzg7ZS50Y2Fyb249MzAwO2UuZW9nb25laz00NDQ7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT02MTE7ZS5BZGllcmVzaXM9NjExO2UuZWdyYXZlPTQ0NDtlLnphY3V0ZT0zODk7ZS5pb2dvbmVrPTI3ODtlLk9hY3V0ZT03MjI7ZS5vYWN1dGU9NTAwO2UuYW1hY3Jvbj01MDA7ZS5zYWN1dGU9Mzg5O2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTcyMjtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01MDA7ZS50d29zdXBlcmlvcj0zMDA7ZS5PZGllcmVzaXM9NzIyO2UubXU9NTAwO2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTAwO2UuRW9nb25laz02MTE7ZS5kY3JvYXQ9NTAwO2UudGhyZWVxdWFydGVycz03NTA7ZS5TY2VkaWxsYT01MDA7ZS5sY2Fyb249MzAwO2UuS2NvbW1hYWNjZW50PTY2NztlLkxhY3V0ZT01NTY7ZS50cmFkZW1hcms9OTgwO2UuZWRvdGFjY2VudD00NDQ7ZS5JZ3JhdmU9MzMzO2UuSW1hY3Jvbj0zMzM7ZS5MY2Fyb249NjExO2Uub25laGFsZj03NTA7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTAwO2UubnRpbGRlPTUwMDtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTYxMTtlLmVtYWNyb249NDQ0O2UuZ2JyZXZlPTUwMDtlLm9uZXF1YXJ0ZXI9NzUwO2UuU2Nhcm9uPTUwMDtlLlNjb21tYWFjY2VudD01MDA7ZS5PaHVuZ2FydW1sYXV0PTcyMjtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTAwO2UuQ2Nhcm9uPTY2NztlLnVncmF2ZT01MDA7ZS5yYWRpY2FsPTQ1MztlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9Mzg5O2UuTnRpbGRlPTY2NztlLm90aWxkZT01MDA7ZS5SY29tbWFhY2NlbnQ9NjExO2UuTGNvbW1hYWNjZW50PTU1NjtlLkF0aWxkZT02MTE7ZS5Bb2dvbmVrPTYxMTtlLkFyaW5nPTYxMTtlLk90aWxkZT03MjI7ZS56ZG90YWNjZW50PTM4OTtlLkVjYXJvbj02MTE7ZS5Jb2dvbmVrPTMzMztlLmtjb21tYWFjY2VudD00NDQ7ZS5taW51cz02NzU7ZS5JY2lyY3VtZmxleD0zMzM7ZS5uY2Fyb249NTAwO2UudGNvbW1hYWNjZW50PTI3ODtlLmxvZ2ljYWxub3Q9Njc1O2Uub2RpZXJlc2lzPTUwMDtlLnVkaWVyZXNpcz01MDA7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTAwO2UuZXRoPTUwMDtlLnpjYXJvbj0zODk7ZS5uY29tbWFhY2NlbnQ9NTAwO2Uub25lc3VwZXJpb3I9MzAwO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTUwMH0pKTtlLlphcGZEaW5nYmF0cz0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4O2UuYTE9OTc0O2UuYTI9OTYxO2UuYTIwMj05NzQ7ZS5hMz05ODA7ZS5hND03MTk7ZS5hNT03ODk7ZS5hMTE5PTc5MDtlLmExMTg9NzkxO2UuYTExNz02OTA7ZS5hMTE9OTYwO2UuYTEyPTkzOTtlLmExMz01NDk7ZS5hMTQ9ODU1O2UuYTE1PTkxMTtlLmExNj05MzM7ZS5hMTA1PTkxMTtlLmExNz05NDU7ZS5hMTg9OTc0O2UuYTE5PTc1NTtlLmEyMD04NDY7ZS5hMjE9NzYyO2UuYTIyPTc2MTtlLmEyMz01NzE7ZS5hMjQ9Njc3O2UuYTI1PTc2MztlLmEyNj03NjA7ZS5hMjc9NzU5O2UuYTI4PTc1NDtlLmE2PTQ5NDtlLmE3PTU1MjtlLmE4PTUzNztlLmE5PTU3NztlLmExMD02OTI7ZS5hMjk9Nzg2O2UuYTMwPTc4ODtlLmEzMT03ODg7ZS5hMzI9NzkwO2UuYTMzPTc5MztlLmEzND03OTQ7ZS5hMzU9ODE2O2UuYTM2PTgyMztlLmEzNz03ODk7ZS5hMzg9ODQxO2UuYTM5PTgyMztlLmE0MD04MzM7ZS5hNDE9ODE2O2UuYTQyPTgzMTtlLmE0Mz05MjM7ZS5hNDQ9NzQ0O2UuYTQ1PTcyMztlLmE0Nj03NDk7ZS5hNDc9NzkwO2UuYTQ4PTc5MjtlLmE0OT02OTU7ZS5hNTA9Nzc2O2UuYTUxPTc2ODtlLmE1Mj03OTI7ZS5hNTM9NzU5O2UuYTU0PTcwNztlLmE1NT03MDg7ZS5hNTY9NjgyO2UuYTU3PTcwMTtlLmE1OD04MjY7ZS5hNTk9ODE1O2UuYTYwPTc4OTtlLmE2MT03ODk7ZS5hNjI9NzA3O2UuYTYzPTY4NztlLmE2ND02OTY7ZS5hNjU9Njg5O2UuYTY2PTc4NjtlLmE2Nz03ODc7ZS5hNjg9NzEzO2UuYTY5PTc5MTtlLmE3MD03ODU7ZS5hNzE9NzkxO2UuYTcyPTg3MztlLmE3Mz03NjE7ZS5hNzQ9NzYyO2UuYTIwMz03NjI7ZS5hNzU9NzU5O2UuYTIwND03NTk7ZS5hNzY9ODkyO2UuYTc3PTg5MjtlLmE3OD03ODg7ZS5hNzk9Nzg0O2UuYTgxPTQzODtlLmE4Mj0xMzg7ZS5hODM9Mjc3O2UuYTg0PTQxNTtlLmE5Nz0zOTI7ZS5hOTg9MzkyO2UuYTk5PTY2ODtlLmExMDA9NjY4O2UuYTg5PTM5MDtlLmE5MD0zOTA7ZS5hOTM9MzE3O2UuYTk0PTMxNztlLmE5MT0yNzY7ZS5hOTI9Mjc2O2UuYTIwNT01MDk7ZS5hODU9NTA5O2UuYTIwNj00MTA7ZS5hODY9NDEwO2UuYTg3PTIzNDtlLmE4OD0yMzQ7ZS5hOTU9MzM0O2UuYTk2PTMzNDtlLmExMDE9NzMyO2UuYTEwMj01NDQ7ZS5hMTAzPTU0NDtlLmExMDQ9OTEwO2UuYTEwNj02Njc7ZS5hMTA3PTc2MDtlLmExMDg9NzYwO2UuYTExMj03NzY7ZS5hMTExPTU5NTtlLmExMTA9Njk0O2UuYTEwOT02MjY7ZS5hMTIwPTc4ODtlLmExMjE9Nzg4O2UuYTEyMj03ODg7ZS5hMTIzPTc4ODtlLmExMjQ9Nzg4O2UuYTEyNT03ODg7ZS5hMTI2PTc4ODtlLmExMjc9Nzg4O2UuYTEyOD03ODg7ZS5hMTI5PTc4ODtlLmExMzA9Nzg4O2UuYTEzMT03ODg7ZS5hMTMyPTc4ODtlLmExMzM9Nzg4O2UuYTEzND03ODg7ZS5hMTM1PTc4ODtlLmExMzY9Nzg4O2UuYTEzNz03ODg7ZS5hMTM4PTc4ODtlLmExMzk9Nzg4O2UuYTE0MD03ODg7ZS5hMTQxPTc4ODtlLmExNDI9Nzg4O2UuYTE0Mz03ODg7ZS5hMTQ0PTc4ODtlLmExNDU9Nzg4O2UuYTE0Nj03ODg7ZS5hMTQ3PTc4ODtlLmExNDg9Nzg4O2UuYTE0OT03ODg7ZS5hMTUwPTc4ODtlLmExNTE9Nzg4O2UuYTE1Mj03ODg7ZS5hMTUzPTc4ODtlLmExNTQ9Nzg4O2UuYTE1NT03ODg7ZS5hMTU2PTc4ODtlLmExNTc9Nzg4O2UuYTE1OD03ODg7ZS5hMTU5PTc4ODtlLmExNjA9ODk0O2UuYTE2MT04Mzg7ZS5hMTYzPTEwMTY7ZS5hMTY0PTQ1ODtlLmExOTY9NzQ4O2UuYTE2NT05MjQ7ZS5hMTkyPTc0ODtlLmExNjY9OTE4O2UuYTE2Nz05Mjc7ZS5hMTY4PTkyODtlLmExNjk9OTI4O2UuYTE3MD04MzQ7ZS5hMTcxPTg3MztlLmExNzI9ODI4O2UuYTE3Mz05MjQ7ZS5hMTYyPTkyNDtlLmExNzQ9OTE3O2UuYTE3NT05MzA7ZS5hMTc2PTkzMTtlLmExNzc9NDYzO2UuYTE3OD04ODM7ZS5hMTc5PTgzNjtlLmExOTM9ODM2O2UuYTE4MD04Njc7ZS5hMTk5PTg2NztlLmExODE9Njk2O2UuYTIwMD02OTY7ZS5hMTgyPTg3NDtlLmEyMDE9ODc0O2UuYTE4Mz03NjA7ZS5hMTg0PTk0NjtlLmExOTc9NzcxO2UuYTE4NT04NjU7ZS5hMTk0PTc3MTtlLmExOTg9ODg4O2UuYTE4Nj05Njc7ZS5hMTk1PTg4ODtlLmExODc9ODMxO2UuYTE4OD04NzM7ZS5hMTg5PTkyNztlLmExOTA9OTcwO2UuYTE5MT05MTh9KSl9KSk7dC5nZXRNZXRyaWNzPW47Y29uc3QgaT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0Oi00MjZ9O2VbIkNvdXJpZXItQm9sZCJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDM5fTtlWyJDb3VyaWVyLU9ibGlxdWUiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQyNn07ZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDI2fTtlLkhlbHZldGljYT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM307ZVsiSGVsdmV0aWNhLUJvbGQiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUzMn07ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM307ZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MzJ9O2VbIlRpbWVzLVJvbWFuIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NjIseEhlaWdodDo0NTB9O2VbIlRpbWVzLUJvbGQiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY3Nix4SGVpZ2h0OjQ2MX07ZVsiVGltZXMtSXRhbGljIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NTMseEhlaWdodDo0NDF9O2VbIlRpbWVzLUJvbGRJdGFsaWMiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY2OSx4SGVpZ2h0OjQ2Mn07ZS5TeW1ib2w9e2FzY2VudDpNYXRoLk5hTixkZXNjZW50Ok1hdGguTmFOLGNhcEhlaWdodDpNYXRoLk5hTix4SGVpZ2h0Ok1hdGguTmFOfTtlLlphcGZEaW5nYmF0cz17YXNjZW50Ok1hdGguTmFOLGRlc2NlbnQ6TWF0aC5OYU4sY2FwSGVpZ2h0Ok1hdGguTmFOLHhIZWlnaHQ6TWF0aC5OYU59fSkpO3QuZ2V0Rm9udEJhc2ljTWV0cmljcz1pfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkdseWZUYWJsZT12b2lkIDA7dC5HbHlmVGFibGU9Y2xhc3MgR2x5ZlRhYmxle2NvbnN0cnVjdG9yKHtnbHlmVGFibGU6ZSxpc0dseXBoTG9jYXRpb25zTG9uZzp0LGxvY2FUYWJsZTphLG51bUdseXBoczpyfSl7dGhpcy5nbHlwaHM9W107Y29uc3Qgbj1uZXcgRGF0YVZpZXcoYS5idWZmZXIsYS5ieXRlT2Zmc2V0LGEuYnl0ZUxlbmd0aCksaT1uZXcgRGF0YVZpZXcoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCkscz10PzQ6MjtsZXQgbz10P24uZ2V0VWludDMyKDApOjIqbi5nZXRVaW50MTYoMCksYz0wO2ZvcihsZXQgZT0wO2U8cjtlKyspe2MrPXM7Y29uc3QgZT10P24uZ2V0VWludDMyKGMpOjIqbi5nZXRVaW50MTYoYyk7aWYoZT09PW8pe3RoaXMuZ2x5cGhzLnB1c2gobmV3IEdseXBoKHt9KSk7Y29udGludWV9Y29uc3QgYT1HbHlwaC5wYXJzZShvLGkpO3RoaXMuZ2x5cGhzLnB1c2goYSk7bz1lfX1nZXRTaXplKCl7cmV0dXJuIHRoaXMuZ2x5cGhzLnJlZHVjZSgoKGUsdCk9PmUrKHQuZ2V0U2l6ZSgpKzMmLTQpKSwwKX13cml0ZSgpe2NvbnN0IGU9dGhpcy5nZXRTaXplKCksdD1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKGUpKSxhPWU+MTMxMDcwLHI9YT80OjIsbj1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKCh0aGlzLmdseXBocy5sZW5ndGgrMSkqcikpO2E/bi5zZXRVaW50MzIoMCwwKTpuLnNldFVpbnQxNigwLDApO2xldCBpPTAscz0wO2Zvcihjb25zdCBlIG9mIHRoaXMuZ2x5cGhzKXtpKz1lLndyaXRlKGksdCk7aT1pKzMmLTQ7cys9cjthP24uc2V0VWludDMyKHMsaSk6bi5zZXRVaW50MTYocyxpPj4xKX1yZXR1cm57aXNMb2NhdGlvbkxvbmc6YSxsb2NhOm5ldyBVaW50OEFycmF5KG4uYnVmZmVyKSxnbHlmOm5ldyBVaW50OEFycmF5KHQuYnVmZmVyKX19c2NhbGUoZSl7Zm9yKGxldCB0PTAsYT10aGlzLmdseXBocy5sZW5ndGg7dDxhO3QrKyl0aGlzLmdseXBoc1t0XS5zY2FsZShlW3RdKX19O2NsYXNzIEdseXBoe2NvbnN0cnVjdG9yKHtoZWFkZXI6ZT1udWxsLHNpbXBsZTp0PW51bGwsY29tcG9zaXRlczphPW51bGx9KXt0aGlzLmhlYWRlcj1lO3RoaXMuc2ltcGxlPXQ7dGhpcy5jb21wb3NpdGVzPWF9c3RhdGljIHBhcnNlKGUsdCl7Y29uc3RbYSxyXT1HbHlwaEhlYWRlci5wYXJzZShlLHQpO2UrPWE7aWYoci5udW1iZXJPZkNvbnRvdXJzPDApe2NvbnN0IGE9W107Zm9yKDs7KXtjb25zdFtyLG5dPUNvbXBvc2l0ZUdseXBoLnBhcnNlKGUsdCk7ZSs9cjthLnB1c2gobik7aWYoISgzMiZuLmZsYWdzKSlicmVha31yZXR1cm4gbmV3IEdseXBoKHtoZWFkZXI6cixjb21wb3NpdGVzOmF9KX1jb25zdCBuPVNpbXBsZUdseXBoLnBhcnNlKGUsdCxyLm51bWJlck9mQ29udG91cnMpO3JldHVybiBuZXcgR2x5cGgoe2hlYWRlcjpyLHNpbXBsZTpufSl9Z2V0U2l6ZSgpe2lmKCF0aGlzLmhlYWRlcilyZXR1cm4gMDtjb25zdCBlPXRoaXMuc2ltcGxlP3RoaXMuc2ltcGxlLmdldFNpemUoKTp0aGlzLmNvbXBvc2l0ZXMucmVkdWNlKCgoZSx0KT0+ZSt0LmdldFNpemUoKSksMCk7cmV0dXJuIHRoaXMuaGVhZGVyLmdldFNpemUoKStlfXdyaXRlKGUsdCl7aWYoIXRoaXMuaGVhZGVyKXJldHVybiAwO2NvbnN0IGE9ZTtlKz10aGlzLmhlYWRlci53cml0ZShlLHQpO2lmKHRoaXMuc2ltcGxlKWUrPXRoaXMuc2ltcGxlLndyaXRlKGUsdCk7ZWxzZSBmb3IoY29uc3QgYSBvZiB0aGlzLmNvbXBvc2l0ZXMpZSs9YS53cml0ZShlLHQpO3JldHVybiBlLWF9c2NhbGUoZSl7aWYoIXRoaXMuaGVhZGVyKXJldHVybjtjb25zdCB0PSh0aGlzLmhlYWRlci54TWluK3RoaXMuaGVhZGVyLnhNYXgpLzI7dGhpcy5oZWFkZXIuc2NhbGUodCxlKTtpZih0aGlzLnNpbXBsZSl0aGlzLnNpbXBsZS5zY2FsZSh0LGUpO2Vsc2UgZm9yKGNvbnN0IGEgb2YgdGhpcy5jb21wb3NpdGVzKWEuc2NhbGUodCxlKX19Y2xhc3MgR2x5cGhIZWFkZXJ7Y29uc3RydWN0b3Ioe251bWJlck9mQ29udG91cnM6ZSx4TWluOnQseU1pbjphLHhNYXg6cix5TWF4Om59KXt0aGlzLm51bWJlck9mQ29udG91cnM9ZTt0aGlzLnhNaW49dDt0aGlzLnlNaW49YTt0aGlzLnhNYXg9cjt0aGlzLnlNYXg9bn1zdGF0aWMgcGFyc2UoZSx0KXtyZXR1cm5bMTAsbmV3IEdseXBoSGVhZGVyKHtudW1iZXJPZkNvbnRvdXJzOnQuZ2V0SW50MTYoZSkseE1pbjp0LmdldEludDE2KGUrMikseU1pbjp0LmdldEludDE2KGUrNCkseE1heDp0LmdldEludDE2KGUrNikseU1heDp0LmdldEludDE2KGUrOCl9KV19Z2V0U2l6ZSgpe3JldHVybiAxMH13cml0ZShlLHQpe3Quc2V0SW50MTYoZSx0aGlzLm51bWJlck9mQ29udG91cnMpO3Quc2V0SW50MTYoZSsyLHRoaXMueE1pbik7dC5zZXRJbnQxNihlKzQsdGhpcy55TWluKTt0LnNldEludDE2KGUrNix0aGlzLnhNYXgpO3Quc2V0SW50MTYoZSs4LHRoaXMueU1heCk7cmV0dXJuIDEwfXNjYWxlKGUsdCl7dGhpcy54TWluPU1hdGgucm91bmQoZSsodGhpcy54TWluLWUpKnQpO3RoaXMueE1heD1NYXRoLnJvdW5kKGUrKHRoaXMueE1heC1lKSp0KX19Y2xhc3MgQ29udG91cntjb25zdHJ1Y3Rvcih7ZmxhZ3M6ZSx4Q29vcmRpbmF0ZXM6dCx5Q29vcmRpbmF0ZXM6YX0pe3RoaXMueENvb3JkaW5hdGVzPXQ7dGhpcy55Q29vcmRpbmF0ZXM9YTt0aGlzLmZsYWdzPWV9fWNsYXNzIFNpbXBsZUdseXBoe2NvbnN0cnVjdG9yKHtjb250b3VyczplLGluc3RydWN0aW9uczp0fSl7dGhpcy5jb250b3Vycz1lO3RoaXMuaW5zdHJ1Y3Rpb25zPXR9c3RhdGljIHBhcnNlKGUsdCxhKXtjb25zdCByPVtdO2ZvcihsZXQgbj0wO248YTtuKyspe2NvbnN0IGE9dC5nZXRVaW50MTYoZSk7ZSs9MjtyLnB1c2goYSl9Y29uc3Qgbj1yW2EtMV0rMSxpPXQuZ2V0VWludDE2KGUpO2UrPTI7Y29uc3Qgcz1uZXcgVWludDhBcnJheSh0KS5zbGljZShlLGUraSk7ZSs9aTtjb25zdCBvPVtdO2ZvcihsZXQgYT0wO2E8bjtlKyssYSsrKXtsZXQgcj10LmdldFVpbnQ4KGUpO28ucHVzaChyKTtpZig4JnIpe2NvbnN0IG49dC5nZXRVaW50OCgrK2UpO3JePTg7Zm9yKGxldCBlPTA7ZTxuO2UrKylvLnB1c2gocik7YSs9bn19Y29uc3QgYz1bXTtsZXQgbD1bXSxoPVtdLHU9W107Y29uc3QgZD1bXTtsZXQgZj0wLGc9MDtmb3IobGV0IGE9MDthPG47YSsrKXtjb25zdCBuPW9bYV07aWYoMiZuKXtjb25zdCBhPXQuZ2V0VWludDgoZSsrKTtnKz0xNiZuP2E6LWE7bC5wdXNoKGcpfWVsc2UgaWYoMTYmbilsLnB1c2goZyk7ZWxzZXtnKz10LmdldEludDE2KGUpO2UrPTI7bC5wdXNoKGcpfWlmKHJbZl09PT1hKXtmKys7Yy5wdXNoKGwpO2w9W119fWc9MDtmPTA7Zm9yKGxldCBhPTA7YTxuO2ErKyl7Y29uc3Qgbj1vW2FdO2lmKDQmbil7Y29uc3QgYT10LmdldFVpbnQ4KGUrKyk7Zys9MzImbj9hOi1hO2gucHVzaChnKX1lbHNlIGlmKDMyJm4paC5wdXNoKGcpO2Vsc2V7Zys9dC5nZXRJbnQxNihlKTtlKz0yO2gucHVzaChnKX11LnB1c2goMSZufDY0Jm4pO2lmKHJbZl09PT1hKXtsPWNbZl07ZisrO2QucHVzaChuZXcgQ29udG91cih7ZmxhZ3M6dSx4Q29vcmRpbmF0ZXM6bCx5Q29vcmRpbmF0ZXM6aH0pKTtoPVtdO3U9W119fXJldHVybiBuZXcgU2ltcGxlR2x5cGgoe2NvbnRvdXJzOmQsaW5zdHJ1Y3Rpb25zOnN9KX1nZXRTaXplKCl7bGV0IGU9Mip0aGlzLmNvbnRvdXJzLmxlbmd0aCsyK3RoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCx0PTAsYT0wO2Zvcihjb25zdCByIG9mIHRoaXMuY29udG91cnMpe2UrPXIuZmxhZ3MubGVuZ3RoO2ZvcihsZXQgbj0wLGk9ci54Q29vcmRpbmF0ZXMubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9ci54Q29vcmRpbmF0ZXNbbl0scz1yLnlDb29yZGluYXRlc1tuXTtsZXQgbz1NYXRoLmFicyhpLXQpO28+MjU1P2UrPTI6bz4wJiYoZSs9MSk7dD1pO289TWF0aC5hYnMocy1hKTtvPjI1NT9lKz0yOm8+MCYmKGUrPTEpO2E9c319cmV0dXJuIGV9d3JpdGUoZSx0KXtjb25zdCBhPWUscj1bXSxuPVtdLGk9W107bGV0IHM9MCxvPTA7Zm9yKGNvbnN0IGEgb2YgdGhpcy5jb250b3Vycyl7Zm9yKGxldCBlPTAsdD1hLnhDb29yZGluYXRlcy5sZW5ndGg7ZTx0O2UrKyl7bGV0IHQ9YS5mbGFnc1tlXTtjb25zdCBjPWEueENvb3JkaW5hdGVzW2VdO2xldCBsPWMtcztpZigwPT09bCl7dHw9MTY7ci5wdXNoKDApfWVsc2V7Y29uc3QgZT1NYXRoLmFicyhsKTtpZihlPD0yNTUpe3R8PWw+PTA/MTg6MjtyLnB1c2goZSl9ZWxzZSByLnB1c2gobCl9cz1jO2NvbnN0IGg9YS55Q29vcmRpbmF0ZXNbZV07bD1oLW87aWYoMD09PWwpe3R8PTMyO24ucHVzaCgwKX1lbHNle2NvbnN0IGU9TWF0aC5hYnMobCk7aWYoZTw9MjU1KXt0fD1sPj0wPzM2OjQ7bi5wdXNoKGUpfWVsc2Ugbi5wdXNoKGwpfW89aDtpLnB1c2godCl9dC5zZXRVaW50MTYoZSxyLmxlbmd0aC0xKTtlKz0yfXQuc2V0VWludDE2KGUsdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKTtlKz0yO2lmKHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCl7bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsMCx0LmJ1ZmZlci5ieXRlTGVuZ3RoKS5zZXQodGhpcy5pbnN0cnVjdGlvbnMsZSk7ZSs9dGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RofWZvcihjb25zdCBhIG9mIGkpdC5zZXRVaW50OChlKyssYSk7Zm9yKGxldCBhPTAsbj1yLmxlbmd0aDthPG47YSsrKXtjb25zdCBuPXJbYV0scz1pW2FdO2lmKDImcyl0LnNldFVpbnQ4KGUrKyxuKTtlbHNlIGlmKCEoMTYmcykpe3Quc2V0SW50MTYoZSxuKTtlKz0yfX1mb3IobGV0IGE9MCxyPW4ubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9blthXSxzPWlbYV07aWYoNCZzKXQuc2V0VWludDgoZSsrLHIpO2Vsc2UgaWYoISgzMiZzKSl7dC5zZXRJbnQxNihlLHIpO2UrPTJ9fXJldHVybiBlLWF9c2NhbGUoZSx0KXtmb3IoY29uc3QgYSBvZiB0aGlzLmNvbnRvdXJzKWlmKDAhPT1hLnhDb29yZGluYXRlcy5sZW5ndGgpZm9yKGxldCByPTAsbj1hLnhDb29yZGluYXRlcy5sZW5ndGg7cjxuO3IrKylhLnhDb29yZGluYXRlc1tyXT1NYXRoLnJvdW5kKGUrKGEueENvb3JkaW5hdGVzW3JdLWUpKnQpfX1jbGFzcyBDb21wb3NpdGVHbHlwaHtjb25zdHJ1Y3Rvcih7ZmxhZ3M6ZSxnbHlwaEluZGV4OnQsYXJndW1lbnQxOmEsYXJndW1lbnQyOnIsdHJhbnNmOm4saW5zdHJ1Y3Rpb25zOml9KXt0aGlzLmZsYWdzPWU7dGhpcy5nbHlwaEluZGV4PXQ7dGhpcy5hcmd1bWVudDE9YTt0aGlzLmFyZ3VtZW50Mj1yO3RoaXMudHJhbnNmPW47dGhpcy5pbnN0cnVjdGlvbnM9aX1zdGF0aWMgcGFyc2UoZSx0KXtjb25zdCBhPWUscj1bXTtsZXQgbj10LmdldFVpbnQxNihlKTtjb25zdCBpPXQuZ2V0VWludDE2KGUrMik7ZSs9NDtsZXQgcyxvO2lmKDEmbil7aWYoMiZuKXtzPXQuZ2V0SW50MTYoZSk7bz10LmdldEludDE2KGUrMil9ZWxzZXtzPXQuZ2V0VWludDE2KGUpO289dC5nZXRVaW50MTYoZSsyKX1lKz00O25ePTF9ZWxzZXtpZigyJm4pe3M9dC5nZXRJbnQ4KGUpO289dC5nZXRJbnQ4KGUrMSl9ZWxzZXtzPXQuZ2V0VWludDgoZSk7bz10LmdldFVpbnQ4KGUrMSl9ZSs9Mn1pZig4Jm4pe3IucHVzaCh0LmdldFVpbnQxNihlKSk7ZSs9Mn1lbHNlIGlmKDY0Jm4pe3IucHVzaCh0LmdldFVpbnQxNihlKSx0LmdldFVpbnQxNihlKzIpKTtlKz00fWVsc2UgaWYoMTI4Jm4pe3IucHVzaCh0LmdldFVpbnQxNihlKSx0LmdldFVpbnQxNihlKzIpLHQuZ2V0VWludDE2KGUrNCksdC5nZXRVaW50MTYoZSs2KSk7ZSs9OH1sZXQgYz1udWxsO2lmKDI1NiZuKXtjb25zdCBhPXQuZ2V0VWludDE2KGUpO2UrPTI7Yz1uZXcgVWludDhBcnJheSh0KS5zbGljZShlLGUrYSk7ZSs9YX1yZXR1cm5bZS1hLG5ldyBDb21wb3NpdGVHbHlwaCh7ZmxhZ3M6bixnbHlwaEluZGV4OmksYXJndW1lbnQxOnMsYXJndW1lbnQyOm8sdHJhbnNmOnIsaW5zdHJ1Y3Rpb25zOmN9KV19Z2V0U2l6ZSgpe2xldCBlPTQrMip0aGlzLnRyYW5zZi5sZW5ndGg7MjU2JnRoaXMuZmxhZ3MmJihlKz0yK3RoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCk7ZSs9MjsyJnRoaXMuZmxhZ3M/dGhpcy5hcmd1bWVudDE+PS0xMjgmJnRoaXMuYXJndW1lbnQxPD0xMjcmJnRoaXMuYXJndW1lbnQyPj0tMTI4JiZ0aGlzLmFyZ3VtZW50Mjw9MTI3fHwoZSs9Mik6dGhpcy5hcmd1bWVudDE+PTAmJnRoaXMuYXJndW1lbnQxPD0yNTUmJnRoaXMuYXJndW1lbnQyPj0wJiZ0aGlzLmFyZ3VtZW50Mjw9MjU1fHwoZSs9Mik7cmV0dXJuIGV9d3JpdGUoZSx0KXtjb25zdCBhPWU7MiZ0aGlzLmZsYWdzP3RoaXMuYXJndW1lbnQxPj0tMTI4JiZ0aGlzLmFyZ3VtZW50MTw9MTI3JiZ0aGlzLmFyZ3VtZW50Mj49LTEyOCYmdGhpcy5hcmd1bWVudDI8PTEyN3x8KHRoaXMuZmxhZ3N8PTEpOnRoaXMuYXJndW1lbnQxPj0wJiZ0aGlzLmFyZ3VtZW50MTw9MjU1JiZ0aGlzLmFyZ3VtZW50Mj49MCYmdGhpcy5hcmd1bWVudDI8PTI1NXx8KHRoaXMuZmxhZ3N8PTEpO3Quc2V0VWludDE2KGUsdGhpcy5mbGFncyk7dC5zZXRVaW50MTYoZSsyLHRoaXMuZ2x5cGhJbmRleCk7ZSs9NDtpZigxJnRoaXMuZmxhZ3Mpe2lmKDImdGhpcy5mbGFncyl7dC5zZXRJbnQxNihlLHRoaXMuYXJndW1lbnQxKTt0LnNldEludDE2KGUrMix0aGlzLmFyZ3VtZW50Mil9ZWxzZXt0LnNldFVpbnQxNihlLHRoaXMuYXJndW1lbnQxKTt0LnNldFVpbnQxNihlKzIsdGhpcy5hcmd1bWVudDIpfWUrPTR9ZWxzZXt0LnNldFVpbnQ4KGUsdGhpcy5hcmd1bWVudDEpO3Quc2V0VWludDgoZSsxLHRoaXMuYXJndW1lbnQyKTtlKz0yfWlmKDI1NiZ0aGlzLmZsYWdzKXt0LnNldFVpbnQxNihlLHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCk7ZSs9MjtpZih0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpe25ldyBVaW50OEFycmF5KHQuYnVmZmVyLDAsdC5idWZmZXIuYnl0ZUxlbmd0aCkuc2V0KHRoaXMuaW5zdHJ1Y3Rpb25zLGUpO2UrPXRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aH19cmV0dXJuIGUtYX1zY2FsZShlLHQpe319fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuT3BlblR5cGVGaWxlQnVpbGRlcj12b2lkIDA7dmFyIHI9YSgzKSxuPWEoMik7ZnVuY3Rpb24gd3JpdGVJbnQxNihlLHQsYSl7ZVt0XT1hPj44JjI1NTtlW3QrMV09MjU1JmF9ZnVuY3Rpb24gd3JpdGVJbnQzMihlLHQsYSl7ZVt0XT1hPj4yNCYyNTU7ZVt0KzFdPWE+PjE2JjI1NTtlW3QrMl09YT4+OCYyNTU7ZVt0KzNdPTI1NSZhfWZ1bmN0aW9uIHdyaXRlRGF0YShlLHQsYSl7aWYoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpZS5zZXQoYSx0KTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgYSlmb3IobGV0IHI9MCxuPWEubGVuZ3RoO3I8bjtyKyspZVt0KytdPTI1NSZhLmNoYXJDb2RlQXQocik7ZWxzZSBmb3IoY29uc3QgciBvZiBhKWVbdCsrXT0yNTUmcn1jbGFzcyBPcGVuVHlwZUZpbGVCdWlsZGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuc2ZudD1lO3RoaXMudGFibGVzPU9iamVjdC5jcmVhdGUobnVsbCl9c3RhdGljIGdldFNlYXJjaFBhcmFtcyhlLHQpe2xldCBhPTEscj0wO2Zvcig7KGFeZSk+YTspe2E8PD0xO3IrK31jb25zdCBuPWEqdDtyZXR1cm57cmFuZ2U6bixlbnRyeTpyLHJhbmdlU2hpZnQ6dCplLW59fXRvQXJyYXkoKXtsZXQgZT10aGlzLnNmbnQ7Y29uc3QgdD10aGlzLnRhYmxlcyxhPU9iamVjdC5rZXlzKHQpO2Euc29ydCgpO2NvbnN0IGk9YS5sZW5ndGg7bGV0IHMsbyxjLGwsaCx1PTEyKzE2Kmk7Y29uc3QgZD1bdV07Zm9yKHM9MDtzPGk7cysrKXtsPXRbYVtzXV07dSs9KGwubGVuZ3RoKzMmLTQpPj4+MDtkLnB1c2godSl9Y29uc3QgZj1uZXcgVWludDhBcnJheSh1KTtmb3Iocz0wO3M8aTtzKyspe2w9dFthW3NdXTt3cml0ZURhdGEoZixkW3NdLGwpfSJ0cnVlIj09PWUmJihlPSgwLG4uc3RyaW5nMzIpKDY1NTM2KSk7ZlswXT0yNTUmZS5jaGFyQ29kZUF0KDApO2ZbMV09MjU1JmUuY2hhckNvZGVBdCgxKTtmWzJdPTI1NSZlLmNoYXJDb2RlQXQoMik7ZlszXT0yNTUmZS5jaGFyQ29kZUF0KDMpO3dyaXRlSW50MTYoZiw0LGkpO2NvbnN0IGc9T3BlblR5cGVGaWxlQnVpbGRlci5nZXRTZWFyY2hQYXJhbXMoaSwxNik7d3JpdGVJbnQxNihmLDYsZy5yYW5nZSk7d3JpdGVJbnQxNihmLDgsZy5lbnRyeSk7d3JpdGVJbnQxNihmLDEwLGcucmFuZ2VTaGlmdCk7dT0xMjtmb3Iocz0wO3M8aTtzKyspe2g9YVtzXTtmW3VdPTI1NSZoLmNoYXJDb2RlQXQoMCk7Zlt1KzFdPTI1NSZoLmNoYXJDb2RlQXQoMSk7Zlt1KzJdPTI1NSZoLmNoYXJDb2RlQXQoMik7Zlt1KzNdPTI1NSZoLmNoYXJDb2RlQXQoMyk7bGV0IGU9MDtmb3Iobz1kW3NdLGM9ZFtzKzFdO288YztvKz00KXtlPWUrKDAsci5yZWFkVWludDMyKShmLG8pPj4+MH13cml0ZUludDMyKGYsdSs0LGUpO3dyaXRlSW50MzIoZix1KzgsZFtzXSk7d3JpdGVJbnQzMihmLHUrMTIsdFtoXS5sZW5ndGgpO3UrPTE2fXJldHVybiBmfWFkZFRhYmxlKGUsdCl7aWYoZSBpbiB0aGlzLnRhYmxlcyl0aHJvdyBuZXcgRXJyb3IoIlRhYmxlICIrZSsiIGFscmVhZHkgZXhpc3RzIik7dGhpcy50YWJsZXNbZV09dH19dC5PcGVuVHlwZUZpbGVCdWlsZGVyPU9wZW5UeXBlRmlsZUJ1aWxkZXJ9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5UeXBlMUZvbnQ9dm9pZCAwO3ZhciByPWEoMzUpLG49YSgyKSxpPWEoMzgpLHM9YSgzKSxvPWEoOCksYz1hKDQ5KTtmdW5jdGlvbiBmaW5kQmxvY2soZSx0LGEpe2NvbnN0IHI9ZS5sZW5ndGgsbj10Lmxlbmd0aCxpPXItbjtsZXQgbz1hLGM9ITE7Zm9yKDtvPGk7KXtsZXQgYT0wO2Zvcig7YTxuJiZlW28rYV09PT10W2FdOylhKys7aWYoYT49bil7bys9YTtmb3IoO288ciYmKDAscy5pc1doaXRlU3BhY2UpKGVbb10pOylvKys7Yz0hMDticmVha31vKyt9cmV0dXJue2ZvdW5kOmMsbGVuZ3RoOm99fXQuVHlwZTFGb250PWNsYXNzIFR5cGUxRm9udHtjb25zdHJ1Y3RvcihlLHQsYSl7bGV0IHI9YS5sZW5ndGgxLHM9YS5sZW5ndGgyLGw9dC5wZWVrQnl0ZXMoNik7Y29uc3QgaD0xMjg9PT1sWzBdJiYxPT09bFsxXTtpZihoKXt0LnNraXAoNik7cj1sWzVdPDwyNHxsWzRdPDwxNnxsWzNdPDw4fGxbMl19Y29uc3QgdT1mdW5jdGlvbiBnZXRIZWFkZXJCbG9jayhlLHQpe2NvbnN0IGE9WzEwMSwxMDEsMTIwLDEwMSw5OV0scj1lLnBvcztsZXQgaSxzLGMsbDt0cnl7aT1lLmdldEJ5dGVzKHQpO3M9aS5sZW5ndGh9Y2F0Y2h7fWlmKHM9PT10KXtjPWZpbmRCbG9jayhpLGEsdC0yKmEubGVuZ3RoKTtpZihjLmZvdW5kJiZjLmxlbmd0aD09PXQpcmV0dXJue3N0cmVhbTpuZXcgby5TdHJlYW0oaSksbGVuZ3RoOnR9fSgwLG4ud2FybikoJ0ludmFsaWQgIkxlbmd0aDEiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdHJ5aW5nIHRvIHJlY292ZXIuJyk7ZS5wb3M9cjtmb3IoOzspe2M9ZmluZEJsb2NrKGUucGVla0J5dGVzKDIwNDgpLGEsMCk7aWYoMD09PWMubGVuZ3RoKWJyZWFrO2UucG9zKz1jLmxlbmd0aDtpZihjLmZvdW5kKXtsPWUucG9zLXI7YnJlYWt9fWUucG9zPXI7aWYobClyZXR1cm57c3RyZWFtOm5ldyBvLlN0cmVhbShlLmdldEJ5dGVzKGwpKSxsZW5ndGg6bH07KDAsbi53YXJuKSgnVW5hYmxlIHRvIHJlY292ZXIgIkxlbmd0aDEiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJyk7cmV0dXJue3N0cmVhbTpuZXcgby5TdHJlYW0oZS5nZXRCeXRlcyh0KSksbGVuZ3RoOnR9fSh0LHIpO25ldyBjLlR5cGUxUGFyc2VyKHUuc3RyZWFtLCExLGkuU0VBQ19BTkFMWVNJU19FTkFCTEVEKS5leHRyYWN0Rm9udEhlYWRlcihhKTtpZihoKXtsPXQuZ2V0Qnl0ZXMoNik7cz1sWzVdPDwyNHxsWzRdPDwxNnxsWzNdPDw4fGxbMl19Y29uc3QgZD1mdW5jdGlvbiBnZXRFZXhlY0Jsb2NrKGUsdCl7Y29uc3QgYT1lLmdldEJ5dGVzKCk7aWYoMD09PWEubGVuZ3RoKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJnZXRFZXhlY0Jsb2NrIC0gbm8gZm9udCBwcm9ncmFtIGZvdW5kLiIpO3JldHVybntzdHJlYW06bmV3IG8uU3RyZWFtKGEpLGxlbmd0aDphLmxlbmd0aH19KHQpLGY9bmV3IGMuVHlwZTFQYXJzZXIoZC5zdHJlYW0sITAsaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpLmV4dHJhY3RGb250UHJvZ3JhbShhKTtmb3IoY29uc3QgZSBpbiBmLnByb3BlcnRpZXMpYVtlXT1mLnByb3BlcnRpZXNbZV07Y29uc3QgZz1mLmNoYXJzdHJpbmdzLHA9dGhpcy5nZXRUeXBlMkNoYXJzdHJpbmdzKGcpLG09dGhpcy5nZXRUeXBlMlN1YnJzKGYuc3VicnMpO3RoaXMuY2hhcnN0cmluZ3M9Zzt0aGlzLmRhdGE9dGhpcy53cmFwKGUscCx0aGlzLmNoYXJzdHJpbmdzLG0sYSk7dGhpcy5zZWFjcz10aGlzLmdldFNlYWNzKGYuY2hhcnN0cmluZ3MpfWdldCBudW1HbHlwaHMoKXtyZXR1cm4gdGhpcy5jaGFyc3RyaW5ncy5sZW5ndGgrMX1nZXRDaGFyc2V0KCl7Y29uc3QgZT1bIi5ub3RkZWYiXTtmb3IoY29uc3R7Z2x5cGhOYW1lOnR9b2YgdGhpcy5jaGFyc3RyaW5ncyllLnB1c2godCk7cmV0dXJuIGV9Z2V0R2x5cGhNYXBwaW5nKGUpe2NvbnN0IHQ9dGhpcy5jaGFyc3RyaW5ncztpZihlLmNvbXBvc2l0ZSl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyl7YVtlLmNNYXAuY2hhckNvZGVPZihyKV09cisxfXJldHVybiBhfWNvbnN0IGE9WyIubm90ZGVmIl07bGV0IHIsbjtmb3Iobj0wO248dC5sZW5ndGg7bisrKWEucHVzaCh0W25dLmdseXBoTmFtZSk7Y29uc3Qgcz1lLmJ1aWx0SW5FbmNvZGluZztpZihzKXtyPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0IGUgaW4gcyl7bj1hLmluZGV4T2Yoc1tlXSk7bj49MCYmKHJbZV09bil9fXJldHVybigwLGkudHlwZTFGb250R2x5cGhNYXBwaW5nKShlLHIsYSl9aGFzR2x5cGhJZChlKXtpZihlPDB8fGU+PXRoaXMubnVtR2x5cGhzKXJldHVybiExO2lmKDA9PT1lKXJldHVybiEwO3JldHVybiB0aGlzLmNoYXJzdHJpbmdzW2UtMV0uY2hhcnN0cmluZy5sZW5ndGg+MH1nZXRTZWFjcyhlKXtjb25zdCB0PVtdO2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKyl7Y29uc3Qgcj1lW2FdO3Iuc2VhYyYmKHRbYSsxXT1yLnNlYWMpfXJldHVybiB0fWdldFR5cGUyQ2hhcnN0cmluZ3MoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgYSBvZiBlKXQucHVzaChhLmNoYXJzdHJpbmcpO3JldHVybiB0fWdldFR5cGUyU3VicnMoZSl7bGV0IHQ9MDtjb25zdCBhPWUubGVuZ3RoO3Q9YTwxMTMzPzEwNzphPDMzNzY5PzExMzE6MzI3Njg7Y29uc3Qgcj1bXTtsZXQgbjtmb3Iobj0wO248dDtuKyspci5wdXNoKFsxMV0pO2ZvcihuPTA7bjxhO24rKylyLnB1c2goZVtuXSk7cmV0dXJuIHJ9d3JhcChlLHQsYSxuLGkpe2NvbnN0IHM9bmV3IHIuQ0ZGO3MuaGVhZGVyPW5ldyByLkNGRkhlYWRlcigxLDAsNCw0KTtzLm5hbWVzPVtlXTtjb25zdCBvPW5ldyByLkNGRlRvcERpY3Q7by5zZXRCeU5hbWUoInZlcnNpb24iLDM5MSk7by5zZXRCeU5hbWUoIk5vdGljZSIsMzkyKTtvLnNldEJ5TmFtZSgiRnVsbE5hbWUiLDM5Myk7by5zZXRCeU5hbWUoIkZhbWlseU5hbWUiLDM5NCk7by5zZXRCeU5hbWUoIldlaWdodCIsMzk1KTtvLnNldEJ5TmFtZSgiRW5jb2RpbmciLG51bGwpO28uc2V0QnlOYW1lKCJGb250TWF0cml4IixpLmZvbnRNYXRyaXgpO28uc2V0QnlOYW1lKCJGb250QkJveCIsaS5iYm94KTtvLnNldEJ5TmFtZSgiY2hhcnNldCIsbnVsbCk7by5zZXRCeU5hbWUoIkNoYXJTdHJpbmdzIixudWxsKTtvLnNldEJ5TmFtZSgiUHJpdmF0ZSIsbnVsbCk7cy50b3BEaWN0PW87Y29uc3QgYz1uZXcgci5DRkZTdHJpbmdzO2MuYWRkKCJWZXJzaW9uIDAuMTEiKTtjLmFkZCgiU2VlIG9yaWdpbmFsIG5vdGljZSIpO2MuYWRkKGUpO2MuYWRkKGUpO2MuYWRkKCJNZWRpdW0iKTtzLnN0cmluZ3M9YztzLmdsb2JhbFN1YnJJbmRleD1uZXcgci5DRkZJbmRleDtjb25zdCBsPXQubGVuZ3RoLGg9WyIubm90ZGVmIl07bGV0IHUsZDtmb3IodT0wO3U8bDt1Kyspe2NvbnN0IGU9YVt1XS5nbHlwaE5hbWU7LTE9PT1yLkNGRlN0YW5kYXJkU3RyaW5ncy5pbmRleE9mKGUpJiZjLmFkZChlKTtoLnB1c2goZSl9cy5jaGFyc2V0PW5ldyByLkNGRkNoYXJzZXQoITEsMCxoKTtjb25zdCBmPW5ldyByLkNGRkluZGV4O2YuYWRkKFsxMzksMTRdKTtmb3IodT0wO3U8bDt1KyspZi5hZGQodFt1XSk7cy5jaGFyU3RyaW5ncz1mO2NvbnN0IGc9bmV3IHIuQ0ZGUHJpdmF0ZURpY3Q7Zy5zZXRCeU5hbWUoIlN1YnJzIixudWxsKTtjb25zdCBwPVsiQmx1ZVZhbHVlcyIsIk90aGVyQmx1ZXMiLCJGYW1pbHlCbHVlcyIsIkZhbWlseU90aGVyQmx1ZXMiLCJTdGVtU25hcEgiLCJTdGVtU25hcFYiLCJCbHVlU2hpZnQiLCJCbHVlRnV6eiIsIkJsdWVTY2FsZSIsIkxhbmd1YWdlR3JvdXAiLCJFeHBhbnNpb25GYWN0b3IiLCJGb3JjZUJvbGQiLCJTdGRIVyIsIlN0ZFZXIl07Zm9yKHU9MCxkPXAubGVuZ3RoO3U8ZDt1Kyspe2NvbnN0IGU9cFt1XTtpZighKGUgaW4gaS5wcml2YXRlRGF0YSkpY29udGludWU7Y29uc3QgdD1pLnByaXZhdGVEYXRhW2VdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKGxldCBlPXQubGVuZ3RoLTE7ZT4wO2UtLSl0W2VdLT10W2UtMV07Zy5zZXRCeU5hbWUoZSx0KX1zLnRvcERpY3QucHJpdmF0ZURpY3Q9Zztjb25zdCBtPW5ldyByLkNGRkluZGV4O2Zvcih1PTAsZD1uLmxlbmd0aDt1PGQ7dSsrKW0uYWRkKG5bdV0pO2cuc3VicnNJbmRleD1tO3JldHVybiBuZXcgci5DRkZDb21waWxlcihzKS5jb21waWxlKCl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlR5cGUxUGFyc2VyPXZvaWQgMDt2YXIgcj1hKDM3KSxuPWEoMyksaT1hKDgpLHM9YSgyKTtjb25zdCBvPVs0XSxjPVs1XSxsPVs2XSxoPVs3XSx1PVs4XSxkPVsxMiwzNV0sZj1bMTRdLGc9WzIxXSxwPVsyMl0sbT1bMzBdLGI9WzMxXTtjbGFzcyBUeXBlMUNoYXJTdHJpbmd7Y29uc3RydWN0b3IoKXt0aGlzLndpZHRoPTA7dGhpcy5sc2I9MDt0aGlzLmZsZXhpbmc9ITE7dGhpcy5vdXRwdXQ9W107dGhpcy5zdGFjaz1bXX1jb252ZXJ0KGUsdCxhKXtjb25zdCByPWUubGVuZ3RoO2xldCBuLGkseSx3PSExO2ZvcihsZXQgUz0wO1M8cjtTKyspe2xldCByPWVbU107aWYocjwzMil7MTI9PT1yJiYocj0ocjw8OCkrZVsrK1NdKTtzd2l0Y2gocil7Y2FzZSAxOmNhc2UgMzpjYXNlIDk6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDMwNzQ6Y2FzZSAzMTA1OnRoaXMuc3RhY2s9W107YnJlYWs7Y2FzZSA0OmlmKHRoaXMuZmxleGluZyl7aWYodGhpcy5zdGFjay5sZW5ndGg8MSl7dz0hMDticmVha31jb25zdCBlPXRoaXMuc3RhY2sucG9wKCk7dGhpcy5zdGFjay5wdXNoKDAsZSk7YnJlYWt9dz10aGlzLmV4ZWN1dGVDb21tYW5kKDEsbyk7YnJlYWs7Y2FzZSA1Onc9dGhpcy5leGVjdXRlQ29tbWFuZCgyLGMpO2JyZWFrO2Nhc2UgNjp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSxsKTticmVhaztjYXNlIDc6dz10aGlzLmV4ZWN1dGVDb21tYW5kKDEsaCk7YnJlYWs7Y2FzZSA4Onc9dGhpcy5leGVjdXRlQ29tbWFuZCg2LHUpO2JyZWFrO2Nhc2UgMTA6aWYodGhpcy5zdGFjay5sZW5ndGg8MSl7dz0hMDticmVha315PXRoaXMuc3RhY2sucG9wKCk7aWYoIXRbeV0pe3c9ITA7YnJlYWt9dz10aGlzLmNvbnZlcnQodFt5XSx0LGEpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuIHc7Y2FzZSAxMzppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXt3PSEwO2JyZWFrfW49dGhpcy5zdGFjay5wb3AoKTtpPXRoaXMuc3RhY2sucG9wKCk7dGhpcy5sc2I9aTt0aGlzLndpZHRoPW47dGhpcy5zdGFjay5wdXNoKG4saSk7dz10aGlzLmV4ZWN1dGVDb21tYW5kKDIscCk7YnJlYWs7Y2FzZSAxNDp0aGlzLm91dHB1dC5wdXNoKGZbMF0pO2JyZWFrO2Nhc2UgMjE6aWYodGhpcy5mbGV4aW5nKWJyZWFrO3c9dGhpcy5leGVjdXRlQ29tbWFuZCgyLGcpO2JyZWFrO2Nhc2UgMjI6aWYodGhpcy5mbGV4aW5nKXt0aGlzLnN0YWNrLnB1c2goMCk7YnJlYWt9dz10aGlzLmV4ZWN1dGVDb21tYW5kKDEscCk7YnJlYWs7Y2FzZSAzMDp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxtKTticmVhaztjYXNlIDMxOnc9dGhpcy5leGVjdXRlQ29tbWFuZCg0LGIpO2JyZWFrO2Nhc2UgMzA3ODppZihhKXtjb25zdCBlPXRoaXMuc3RhY2suYXQoLTUpO3RoaXMuc2VhYz10aGlzLnN0YWNrLnNwbGljZSgtNCw0KTt0aGlzLnNlYWNbMF0rPXRoaXMubHNiLWU7dz10aGlzLmV4ZWN1dGVDb21tYW5kKDAsZil9ZWxzZSB3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxmKTticmVhaztjYXNlIDMwNzk6aWYodGhpcy5zdGFjay5sZW5ndGg8NCl7dz0hMDticmVha310aGlzLnN0YWNrLnBvcCgpO249dGhpcy5zdGFjay5wb3AoKTtjb25zdCBlPXRoaXMuc3RhY2sucG9wKCk7aT10aGlzLnN0YWNrLnBvcCgpO3RoaXMubHNiPWk7dGhpcy53aWR0aD1uO3RoaXMuc3RhY2sucHVzaChuLGksZSk7dz10aGlzLmV4ZWN1dGVDb21tYW5kKDMsZyk7YnJlYWs7Y2FzZSAzMDg0OmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe3c9ITA7YnJlYWt9Y29uc3QgUz10aGlzLnN0YWNrLnBvcCgpLHg9dGhpcy5zdGFjay5wb3AoKTt0aGlzLnN0YWNrLnB1c2goeC9TKTticmVhaztjYXNlIDMwODg6aWYodGhpcy5zdGFjay5sZW5ndGg8Mil7dz0hMDticmVha315PXRoaXMuc3RhY2sucG9wKCk7Y29uc3QgQz10aGlzLnN0YWNrLnBvcCgpO2lmKDA9PT15JiYzPT09Qyl7Y29uc3QgZT10aGlzLnN0YWNrLnNwbGljZSgtMTcsMTcpO3RoaXMuc3RhY2sucHVzaChlWzJdK2VbMF0sZVszXStlWzFdLGVbNF0sZVs1XSxlWzZdLGVbN10sZVs4XSxlWzldLGVbMTBdLGVbMTFdLGVbMTJdLGVbMTNdLGVbMTRdKTt3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMTMsZCwhMCk7dGhpcy5mbGV4aW5nPSExO3RoaXMuc3RhY2sucHVzaChlWzE1XSxlWzE2XSl9ZWxzZSAxPT09eSYmMD09PUMmJih0aGlzLmZsZXhpbmc9ITApO2JyZWFrO2Nhc2UgMzA4OTpicmVhaztkZWZhdWx0OigwLHMud2FybikoJ1Vua25vd24gdHlwZSAxIGNoYXJzdHJpbmcgY29tbWFuZCBvZiAiJytyKyciJyl9aWYodylicmVha31lbHNle3I8PTI0Nj9yLT0xMzk6cj1yPD0yNTA/MjU2KihyLTI0NykrZVsrK1NdKzEwODpyPD0yNTQ/LTI1Niooci0yNTEpLWVbKytTXS0xMDg6KDI1NSZlWysrU10pPDwyNHwoMjU1JmVbKytTXSk8PDE2fCgyNTUmZVsrK1NdKTw8OHwoMjU1JmVbKytTXSk8PDA7dGhpcy5zdGFjay5wdXNoKHIpfX1yZXR1cm4gd31leGVjdXRlQ29tbWFuZChlLHQsYSl7Y29uc3Qgcj10aGlzLnN0YWNrLmxlbmd0aDtpZihlPnIpcmV0dXJuITA7Y29uc3Qgbj1yLWU7Zm9yKGxldCBlPW47ZTxyO2UrKyl7bGV0IHQ9dGhpcy5zdGFja1tlXTtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXRoaXMub3V0cHV0LnB1c2goMjgsdD4+OCYyNTUsMjU1JnQpO2Vsc2V7dD02NTUzNip0fDA7dGhpcy5vdXRwdXQucHVzaCgyNTUsdD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCl9fXRoaXMub3V0cHV0LnB1c2goLi4udCk7YT90aGlzLnN0YWNrLnNwbGljZShuLGUpOnRoaXMuc3RhY2subGVuZ3RoPTA7cmV0dXJuITF9fWZ1bmN0aW9uIGlzSGV4RGlnaXQoZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfWZ1bmN0aW9uIGRlY3J5cHQoZSx0LGEpe2lmKGE+PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtsZXQgcixuLGk9MHx0O2ZvcihyPTA7cjxhO3IrKylpPTUyODQ1KihlW3JdK2kpKzIyNzE5JjY1NTM1O2NvbnN0IHM9ZS5sZW5ndGgtYSxvPW5ldyBVaW50OEFycmF5KHMpO2ZvcihyPWEsbj0wO248cztyKyssbisrKXtjb25zdCB0PWVbcl07b1tuXT10Xmk+Pjg7aT01Mjg0NSoodCtpKSsyMjcxOSY2NTUzNX1yZXR1cm4gb31mdW5jdGlvbiBpc1NwZWNpYWwoZSl7cmV0dXJuIDQ3PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV8fDQwPT09ZXx8NDE9PT1lfXQuVHlwZTFQYXJzZXI9Y2xhc3MgVHlwZTFQYXJzZXJ7Y29uc3RydWN0b3IoZSx0LGEpe2lmKHQpe2NvbnN0IHQ9ZS5nZXRCeXRlcygpLGE9ISgoaXNIZXhEaWdpdCh0WzBdKXx8KDAsbi5pc1doaXRlU3BhY2UpKHRbMF0pKSYmaXNIZXhEaWdpdCh0WzFdKSYmaXNIZXhEaWdpdCh0WzJdKSYmaXNIZXhEaWdpdCh0WzNdKSYmaXNIZXhEaWdpdCh0WzRdKSYmaXNIZXhEaWdpdCh0WzVdKSYmaXNIZXhEaWdpdCh0WzZdKSYmaXNIZXhEaWdpdCh0WzddKSk7ZT1uZXcgaS5TdHJlYW0oYT9kZWNyeXB0KHQsNTU2NjUsNCk6ZnVuY3Rpb24gZGVjcnlwdEFzY2lpKGUsdCxhKXtsZXQgcj0wfHQ7Y29uc3Qgbj1lLmxlbmd0aCxpPW5ldyBVaW50OEFycmF5KG4+Pj4xKTtsZXQgcyxvO2ZvcihzPTAsbz0wO3M8bjtzKyspe2NvbnN0IHQ9ZVtzXTtpZighaXNIZXhEaWdpdCh0KSljb250aW51ZTtzKys7bGV0IGE7Zm9yKDtzPG4mJiFpc0hleERpZ2l0KGE9ZVtzXSk7KXMrKztpZihzPG4pe2NvbnN0IGU9cGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZSh0LGEpLDE2KTtpW28rK109ZV5yPj44O3I9NTI4NDUqKGUrcikrMjI3MTkmNjU1MzV9fXJldHVybiBpLnNsaWNlKGEsbyl9KHQsNTU2NjUsNCkpfXRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZD0hIWE7dGhpcy5zdHJlYW09ZTt0aGlzLm5leHRDaGFyKCl9cmVhZE51bWJlckFycmF5KCl7dGhpcy5nZXRUb2tlbigpO2NvbnN0IGU9W107Zm9yKDs7KXtjb25zdCB0PXRoaXMuZ2V0VG9rZW4oKTtpZihudWxsPT09dHx8Il0iPT09dHx8In0iPT09dClicmVhaztlLnB1c2gocGFyc2VGbG9hdCh0fHwwKSl9cmV0dXJuIGV9cmVhZE51bWJlcigpe2NvbnN0IGU9dGhpcy5nZXRUb2tlbigpO3JldHVybiBwYXJzZUZsb2F0KGV8fDApfXJlYWRJbnQoKXtjb25zdCBlPXRoaXMuZ2V0VG9rZW4oKTtyZXR1cm4gMHxwYXJzZUludChlfHwwLDEwKX1yZWFkQm9vbGVhbigpe3JldHVybiJ0cnVlIj09PXRoaXMuZ2V0VG9rZW4oKT8xOjB9bmV4dENoYXIoKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9cHJldkNoYXIoKXt0aGlzLnN0cmVhbS5za2lwKC0yKTtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9Z2V0VG9rZW4oKXtsZXQgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Zm9yKDs7KXtpZigtMT09PXQpcmV0dXJuIG51bGw7aWYoZSkxMCE9PXQmJjEzIT09dHx8KGU9ITEpO2Vsc2UgaWYoMzc9PT10KWU9ITA7ZWxzZSBpZighKDAsbi5pc1doaXRlU3BhY2UpKHQpKWJyZWFrO3Q9dGhpcy5uZXh0Q2hhcigpfWlmKGlzU3BlY2lhbCh0KSl7dGhpcy5uZXh0Q2hhcigpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfWxldCBhPSIiO2Rve2ErPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7dD10aGlzLm5leHRDaGFyKCl9d2hpbGUodD49MCYmISgwLG4uaXNXaGl0ZVNwYWNlKSh0KSYmIWlzU3BlY2lhbCh0KSk7cmV0dXJuIGF9cmVhZENoYXJTdHJpbmdzKGUsdCl7cmV0dXJuLTE9PT10P2U6ZGVjcnlwdChlLDQzMzAsdCl9ZXh0cmFjdEZvbnRQcm9ncmFtKGUpe2NvbnN0IHQ9dGhpcy5zdHJlYW0sYT1bXSxyPVtdLG49T2JqZWN0LmNyZWF0ZShudWxsKTtuLmxlbklWPTQ7Y29uc3QgaT17c3VicnM6W10sY2hhcnN0cmluZ3M6W10scHJvcGVydGllczp7cHJpdmF0ZURhdGE6bn19O2xldCBzLG8sYyxsO2Zvcig7bnVsbCE9PShzPXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PXMpe3M9dGhpcy5nZXRUb2tlbigpO3N3aXRjaChzKXtjYXNlIkNoYXJTdHJpbmdzIjp0aGlzLmdldFRva2VuKCk7dGhpcy5nZXRUb2tlbigpO3RoaXMuZ2V0VG9rZW4oKTt0aGlzLmdldFRva2VuKCk7Zm9yKDs7KXtzPXRoaXMuZ2V0VG9rZW4oKTtpZihudWxsPT09c3x8ImVuZCI9PT1zKWJyZWFrO2lmKCIvIiE9PXMpY29udGludWU7Y29uc3QgZT10aGlzLmdldFRva2VuKCk7bz10aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7Yz1vPjA/dC5nZXRCeXRlcyhvKTpuZXcgVWludDhBcnJheSgwKTtsPWkucHJvcGVydGllcy5wcml2YXRlRGF0YS5sZW5JVjtjb25zdCBhPXRoaXMucmVhZENoYXJTdHJpbmdzKGMsbCk7dGhpcy5uZXh0Q2hhcigpO3M9dGhpcy5nZXRUb2tlbigpOyJub2FjY2VzcyI9PT1zP3RoaXMuZ2V0VG9rZW4oKToiLyI9PT1zJiZ0aGlzLnByZXZDaGFyKCk7ci5wdXNoKHtnbHlwaDplLGVuY29kZWQ6YX0pfWJyZWFrO2Nhc2UiU3VicnMiOnRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTtmb3IoOyJkdXAiPT09dGhpcy5nZXRUb2tlbigpOyl7Y29uc3QgZT10aGlzLnJlYWRJbnQoKTtvPXRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTtjPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApO2w9aS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO2NvbnN0IHI9dGhpcy5yZWFkQ2hhclN0cmluZ3MoYyxsKTt0aGlzLm5leHRDaGFyKCk7cz10aGlzLmdldFRva2VuKCk7Im5vYWNjZXNzIj09PXMmJnRoaXMuZ2V0VG9rZW4oKTthW2VdPXJ9YnJlYWs7Y2FzZSJCbHVlVmFsdWVzIjpjYXNlIk90aGVyQmx1ZXMiOmNhc2UiRmFtaWx5Qmx1ZXMiOmNhc2UiRmFtaWx5T3RoZXJCbHVlcyI6Y29uc3QgZT10aGlzLnJlYWROdW1iZXJBcnJheSgpO2UubGVuZ3RoPjAmJmUubGVuZ3RoLDA7YnJlYWs7Y2FzZSJTdGVtU25hcEgiOmNhc2UiU3RlbVNuYXBWIjppLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbc109dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTticmVhaztjYXNlIlN0ZEhXIjpjYXNlIlN0ZFZXIjppLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbc109dGhpcy5yZWFkTnVtYmVyQXJyYXkoKVswXTticmVhaztjYXNlIkJsdWVTaGlmdCI6Y2FzZSJsZW5JViI6Y2FzZSJCbHVlRnV6eiI6Y2FzZSJCbHVlU2NhbGUiOmNhc2UiTGFuZ3VhZ2VHcm91cCI6aS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3NdPXRoaXMucmVhZE51bWJlcigpO2JyZWFrO2Nhc2UiRXhwYW5zaW9uRmFjdG9yIjppLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbc109dGhpcy5yZWFkTnVtYmVyKCl8fC4wNjticmVhaztjYXNlIkZvcmNlQm9sZCI6aS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3NdPXRoaXMucmVhZEJvb2xlYW4oKX19Zm9yKGNvbnN0e2VuY29kZWQ6dCxnbHlwaDpufW9mIHIpe2NvbnN0IHI9bmV3IFR5cGUxQ2hhclN0cmluZyxzPXIuY29udmVydCh0LGEsdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKTtsZXQgbz1yLm91dHB1dDtzJiYobz1bMTRdKTtjb25zdCBjPXtnbHlwaE5hbWU6bixjaGFyc3RyaW5nOm8sd2lkdGg6ci53aWR0aCxsc2I6ci5sc2Isc2VhYzpyLnNlYWN9OyIubm90ZGVmIj09PW4/aS5jaGFyc3RyaW5ncy51bnNoaWZ0KGMpOmkuY2hhcnN0cmluZ3MucHVzaChjKTtpZihlLmJ1aWx0SW5FbmNvZGluZyl7Y29uc3QgdD1lLmJ1aWx0SW5FbmNvZGluZy5pbmRleE9mKG4pO3Q+LTEmJnZvaWQgMD09PWUud2lkdGhzW3RdJiZ0Pj1lLmZpcnN0Q2hhciYmdDw9ZS5sYXN0Q2hhciYmKGUud2lkdGhzW3RdPXIud2lkdGgpfX1yZXR1cm4gaX1leHRyYWN0Rm9udEhlYWRlcihlKXtsZXQgdDtmb3IoO251bGwhPT0odD10aGlzLmdldFRva2VuKCkpOylpZigiLyI9PT10KXt0PXRoaXMuZ2V0VG9rZW4oKTtzd2l0Y2godCl7Y2FzZSJGb250TWF0cml4Ijpjb25zdCBhPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5mb250TWF0cml4PWE7YnJlYWs7Y2FzZSJFbmNvZGluZyI6Y29uc3Qgbj10aGlzLmdldFRva2VuKCk7bGV0IGk7aWYoL15cZCskLy50ZXN0KG4pKXtpPVtdO2NvbnN0IGU9MHxwYXJzZUludChuLDEwKTt0aGlzLmdldFRva2VuKCk7Zm9yKGxldCBhPTA7YTxlO2ErKyl7dD10aGlzLmdldFRva2VuKCk7Zm9yKDsiZHVwIiE9PXQmJiJkZWYiIT09dDspe3Q9dGhpcy5nZXRUb2tlbigpO2lmKG51bGw9PT10KXJldHVybn1pZigiZGVmIj09PXQpYnJlYWs7Y29uc3QgZT10aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7Y29uc3QgYT10aGlzLmdldFRva2VuKCk7aVtlXT1hO3RoaXMuZ2V0VG9rZW4oKX19ZWxzZSBpPSgwLHIuZ2V0RW5jb2RpbmcpKG4pO2UuYnVpbHRJbkVuY29kaW5nPWk7YnJlYWs7Y2FzZSJGb250QkJveCI6Y29uc3Qgcz10aGlzLnJlYWROdW1iZXJBcnJheSgpO2UuYXNjZW50PU1hdGgubWF4KHNbM10sc1sxXSk7ZS5kZXNjZW50PU1hdGgubWluKHNbMV0sc1szXSk7ZS5hc2NlbnRTY2FsZWQ9ITB9fX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUGF0dGVybj12b2lkIDA7dC5jbGVhclBhdHRlcm5DYWNoZXM9ZnVuY3Rpb24gY2xlYXJQYXR0ZXJuQ2FjaGVzKCl7Zj1PYmplY3QuY3JlYXRlKG51bGwpfTt0LmdldFRpbGluZ1BhdHRlcm5JUj1mdW5jdGlvbiBnZXRUaWxpbmdQYXR0ZXJuSVIoZSx0LGEpe2NvbnN0IG49dC5nZXRBcnJheSgiTWF0cml4IiksaT1yLlV0aWwubm9ybWFsaXplUmVjdCh0LmdldEFycmF5KCJCQm94IikpLHM9dC5nZXQoIlhTdGVwIiksbz10LmdldCgiWVN0ZXAiKSxjPXQuZ2V0KCJQYWludFR5cGUiKSxsPXQuZ2V0KCJUaWxpbmdUeXBlIik7aWYoaVsyXS1pWzBdPT0wfHxpWzNdLWlbMV09PTApdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgZ2V0VGlsaW5nUGF0dGVybklSIC9CQm94IGFycmF5OiBbJHtpfV0uYCk7cmV0dXJuWyJUaWxpbmdQYXR0ZXJuIixhLGUsbixpLHMsbyxjLGxdfTt2YXIgcj1hKDIpLG49YSg1KSxpPWEoMTIpLHM9YSgzKTtjb25zdCBvPTIsYz0zLGw9NCxoPTUsdT02LGQ9Nzt0LlBhdHRlcm49Y2xhc3MgUGF0dGVybntjb25zdHJ1Y3RvcigpeygwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBQYXR0ZXJuLiIpfXN0YXRpYyBwYXJzZVNoYWRpbmcoZSx0LGEsaSxmKXtjb25zdCBnPWUgaW5zdGFuY2VvZiBuLkJhc2VTdHJlYW0/ZS5kaWN0OmUscD1nLmdldCgiU2hhZGluZ1R5cGUiKTt0cnl7c3dpdGNoKHApe2Nhc2UgbzpjYXNlIGM6cmV0dXJuIG5ldyBSYWRpYWxBeGlhbFNoYWRpbmcoZyx0LGEsaSxmKTtjYXNlIGw6Y2FzZSBoOmNhc2UgdTpjYXNlIGQ6cmV0dXJuIG5ldyBNZXNoU2hhZGluZyhlLHQsYSxpLGYpO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIFNoYWRpbmdUeXBlOiAiK3ApfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoZSk7cmV0dXJuIG5ldyBEdW1teVNoYWRpbmd9fX07Y2xhc3MgQmFzZVNoYWRpbmd7c3RhdGljIFNNQUxMX05VTUJFUj0xZS02O2NvbnN0cnVjdG9yKCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VTaGFkaW5nJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVNoYWRpbmcuIil9Z2V0SVIoKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRJUmAgY2FsbGVkLiIpfX1jbGFzcyBSYWRpYWxBeGlhbFNoYWRpbmcgZXh0ZW5kcyBCYXNlU2hhZGluZ3tjb25zdHJ1Y3RvcihlLHQsYSxuLHMpe3N1cGVyKCk7dGhpcy5jb29yZHNBcnI9ZS5nZXRBcnJheSgiQ29vcmRzIik7dGhpcy5zaGFkaW5nVHlwZT1lLmdldCgiU2hhZGluZ1R5cGUiKTtjb25zdCBvPWkuQ29sb3JTcGFjZS5wYXJzZSh7Y3M6ZS5nZXRSYXcoIkNTIil8fGUuZ2V0UmF3KCJDb2xvclNwYWNlIikseHJlZjp0LHJlc291cmNlczphLHBkZkZ1bmN0aW9uRmFjdG9yeTpuLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnN9KSxsPWUuZ2V0QXJyYXkoIkJCb3giKTt0aGlzLmJib3g9QXJyYXkuaXNBcnJheShsKSYmND09PWwubGVuZ3RoP3IuVXRpbC5ub3JtYWxpemVSZWN0KGwpOm51bGw7bGV0IGg9MCx1PTE7aWYoZS5oYXMoIkRvbWFpbiIpKXtjb25zdCB0PWUuZ2V0QXJyYXkoIkRvbWFpbiIpO2g9dFswXTt1PXRbMV19bGV0IGQ9ITEsZj0hMTtpZihlLmhhcygiRXh0ZW5kIikpe2NvbnN0IHQ9ZS5nZXRBcnJheSgiRXh0ZW5kIik7ZD10WzBdO2Y9dFsxXX1pZighKHRoaXMuc2hhZGluZ1R5cGUhPT1jfHxkJiZmKSl7Y29uc3RbZSx0LGEsbixpLHNdPXRoaXMuY29vcmRzQXJyLG89TWF0aC5oeXBvdChlLW4sdC1pKTthPD1zK28mJnM8PWErbyYmKDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgcmFkaWFsIGdyYWRpZW50LiIpfXRoaXMuZXh0ZW5kU3RhcnQ9ZDt0aGlzLmV4dGVuZEVuZD1mO2NvbnN0IGc9ZS5nZXRSYXcoIkZ1bmN0aW9uIikscD1uLmNyZWF0ZUZyb21BcnJheShnKSxtPSh1LWgpLzg0MCxiPXRoaXMuY29sb3JTdG9wcz1bXTtpZihoPj11fHxtPD0wKXsoMCxyLmluZm8pKCJCYWQgc2hhZGluZyBkb21haW4uIik7cmV0dXJufWNvbnN0IHk9bmV3IEZsb2F0MzJBcnJheShvLm51bUNvbXBzKSx3PW5ldyBGbG9hdDMyQXJyYXkoMSk7bGV0IFMseD0wO3dbMF09aDtwKHcsMCx5LDApO2xldCBDPW8uZ2V0UmdiKHksMCk7Y29uc3Qgaz1yLlV0aWwubWFrZUhleENvbG9yKENbMF0sQ1sxXSxDWzJdKTtiLnB1c2goWzAsa10pO2xldCB2PTE7d1swXT1oK207cCh3LDAseSwwKTtsZXQgRj1vLmdldFJnYih5LDApLE89RlswXS1DWzBdKzEsVD1GWzFdLUNbMV0rMSxNPUZbMl0tQ1syXSsxLEQ9RlswXS1DWzBdLTEsRT1GWzFdLUNbMV0tMSxOPUZbMl0tQ1syXS0xO2ZvcihsZXQgZT0yO2U8ODQwO2UrKyl7d1swXT1oK2UqbTtwKHcsMCx5LDApO1M9by5nZXRSZ2IoeSwwKTtjb25zdCB0PWUteDtPPU1hdGgubWluKE8sKFNbMF0tQ1swXSsxKS90KTtUPU1hdGgubWluKFQsKFNbMV0tQ1sxXSsxKS90KTtNPU1hdGgubWluKE0sKFNbMl0tQ1syXSsxKS90KTtEPU1hdGgubWF4KEQsKFNbMF0tQ1swXS0xKS90KTtFPU1hdGgubWF4KEUsKFNbMV0tQ1sxXS0xKS90KTtOPU1hdGgubWF4KE4sKFNbMl0tQ1syXS0xKS90KTtpZighKEQ8PU8mJkU8PVQmJk48PU0pKXtjb25zdCBlPXIuVXRpbC5tYWtlSGV4Q29sb3IoRlswXSxGWzFdLEZbMl0pO2IucHVzaChbdi84NDAsZV0pO089U1swXS1GWzBdKzE7VD1TWzFdLUZbMV0rMTtNPVNbMl0tRlsyXSsxO0Q9U1swXS1GWzBdLTE7RT1TWzFdLUZbMV0tMTtOPVNbMl0tRlsyXS0xO3g9djtDPUZ9dj1lO0Y9U31jb25zdCBSPXIuVXRpbC5tYWtlSGV4Q29sb3IoRlswXSxGWzFdLEZbMl0pO2IucHVzaChbMSxSXSk7bGV0IEw9InRyYW5zcGFyZW50IjtpZihlLmhhcygiQmFja2dyb3VuZCIpKXtTPW8uZ2V0UmdiKGUuZ2V0KCJCYWNrZ3JvdW5kIiksMCk7TD1yLlV0aWwubWFrZUhleENvbG9yKFNbMF0sU1sxXSxTWzJdKX1pZighZCl7Yi51bnNoaWZ0KFswLExdKTtiWzFdWzBdKz1CYXNlU2hhZGluZy5TTUFMTF9OVU1CRVJ9aWYoIWYpe2IuYXQoLTEpWzBdLT1CYXNlU2hhZGluZy5TTUFMTF9OVU1CRVI7Yi5wdXNoKFsxLExdKX10aGlzLmNvbG9yU3RvcHM9Yn1nZXRJUigpe2NvbnN0IGU9dGhpcy5jb29yZHNBcnIsdD10aGlzLnNoYWRpbmdUeXBlO2xldCBhLG4saSxzLGw7aWYodD09PW8pe249W2VbMF0sZVsxXV07aT1bZVsyXSxlWzNdXTtzPW51bGw7bD1udWxsO2E9ImF4aWFsIn1lbHNlIGlmKHQ9PT1jKXtuPVtlWzBdLGVbMV1dO2k9W2VbM10sZVs0XV07cz1lWzJdO2w9ZVs1XTthPSJyYWRpYWwifWVsc2UoMCxyLnVucmVhY2hhYmxlKShgZ2V0UGF0dGVybiB0eXBlIHVua25vd246ICR7dH1gKTtyZXR1cm5bIlJhZGlhbEF4aWFsIixhLHRoaXMuYmJveCx0aGlzLmNvbG9yU3RvcHMsbixpLHMsbF19fWNsYXNzIE1lc2hTdHJlYW1SZWFkZXJ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnN0cmVhbT1lO3RoaXMuY29udGV4dD10O3RoaXMuYnVmZmVyPTA7dGhpcy5idWZmZXJMZW5ndGg9MDtjb25zdCBhPXQubnVtQ29tcHM7dGhpcy50bXBDb21wc0J1Zj1uZXcgRmxvYXQzMkFycmF5KGEpO2NvbnN0IHI9dC5jb2xvclNwYWNlLm51bUNvbXBzO3RoaXMudG1wQ3NDb21wc0J1Zj10LmNvbG9yRm4/bmV3IEZsb2F0MzJBcnJheShyKTp0aGlzLnRtcENvbXBzQnVmfWdldCBoYXNEYXRhKCl7aWYodGhpcy5zdHJlYW0uZW5kKXJldHVybiB0aGlzLnN0cmVhbS5wb3M8dGhpcy5zdHJlYW0uZW5kO2lmKHRoaXMuYnVmZmVyTGVuZ3RoPjApcmV0dXJuITA7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7aWYoZTwwKXJldHVybiExO3RoaXMuYnVmZmVyPWU7dGhpcy5idWZmZXJMZW5ndGg9ODtyZXR1cm4hMH1yZWFkQml0cyhlKXtsZXQgdD10aGlzLmJ1ZmZlcixhPXRoaXMuYnVmZmVyTGVuZ3RoO2lmKDMyPT09ZSl7aWYoMD09PWEpcmV0dXJuKHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MjR8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwxNnx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDh8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpKT4+PjA7dD10PDwyNHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDE2fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7dGhpcy5idWZmZXI9ZSYoMTw8YSktMTtyZXR1cm4odDw8OC1hfCgyNTUmZSk+PmEpPj4+MH1pZig4PT09ZSYmMD09PWEpcmV0dXJuIHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtmb3IoO2E8ZTspe3Q9dDw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk7YSs9OH1hLT1lO3RoaXMuYnVmZmVyTGVuZ3RoPWE7dGhpcy5idWZmZXI9dCYoMTw8YSktMTtyZXR1cm4gdD4+YX1hbGlnbigpe3RoaXMuYnVmZmVyPTA7dGhpcy5idWZmZXJMZW5ndGg9MH1yZWFkRmxhZygpe3JldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyl9cmVhZENvb3JkaW5hdGUoKXtjb25zdCBlPXRoaXMuY29udGV4dC5iaXRzUGVyQ29vcmRpbmF0ZSx0PXRoaXMucmVhZEJpdHMoZSksYT10aGlzLnJlYWRCaXRzKGUpLHI9dGhpcy5jb250ZXh0LmRlY29kZSxuPWU8MzI/MS8oKDE8PGUpLTEpOjIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7cmV0dXJuW3QqbiooclsxXS1yWzBdKStyWzBdLGEqbiooclszXS1yWzJdKStyWzJdXX1yZWFkQ29tcG9uZW50cygpe2NvbnN0IGU9dGhpcy5jb250ZXh0Lm51bUNvbXBzLHQ9dGhpcy5jb250ZXh0LmJpdHNQZXJDb21wb25lbnQsYT10PDMyPzEvKCgxPDx0KS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwLHI9dGhpcy5jb250ZXh0LmRlY29kZSxuPXRoaXMudG1wQ29tcHNCdWY7Zm9yKGxldCBpPTAscz00O2k8ZTtpKysscys9Mil7Y29uc3QgZT10aGlzLnJlYWRCaXRzKHQpO25baV09ZSphKihyW3MrMV0tcltzXSkrcltzXX1jb25zdCBpPXRoaXMudG1wQ3NDb21wc0J1Zjt0aGlzLmNvbnRleHQuY29sb3JGbiYmdGhpcy5jb250ZXh0LmNvbG9yRm4obiwwLGksMCk7cmV0dXJuIHRoaXMuY29udGV4dC5jb2xvclNwYWNlLmdldFJnYihpLDApfX1sZXQgZj1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGdldEIoZSl7cmV0dXJuIGZbZV18fD1mdW5jdGlvbiBidWlsZEIoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGE9MDthPD1lO2ErKyl7Y29uc3Qgcj1hL2Usbj0xLXI7dC5wdXNoKG5ldyBGbG9hdDMyQXJyYXkoW24qKjMsMypyKm4qKjIsMypyKioyKm4scioqM10pKX1yZXR1cm4gdH0oZSl9Y2xhc3MgTWVzaFNoYWRpbmcgZXh0ZW5kcyBCYXNlU2hhZGluZ3tzdGF0aWMgTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQ9MztzdGF0aWMgTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQ9MjA7c3RhdGljIFRSSUFOR0xFX0RFTlNJVFk9MjA7Y29uc3RydWN0b3IoZSx0LGEscyxvKXtzdXBlcigpO2lmKCEoZSBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1lc2ggZGF0YSBpcyBub3QgYSBzdHJlYW0iKTtjb25zdCBjPWUuZGljdDt0aGlzLnNoYWRpbmdUeXBlPWMuZ2V0KCJTaGFkaW5nVHlwZSIpO2NvbnN0IGY9Yy5nZXRBcnJheSgiQkJveCIpO3RoaXMuYmJveD1BcnJheS5pc0FycmF5KGYpJiY0PT09Zi5sZW5ndGg/ci5VdGlsLm5vcm1hbGl6ZVJlY3QoZik6bnVsbDtjb25zdCBnPWkuQ29sb3JTcGFjZS5wYXJzZSh7Y3M6Yy5nZXRSYXcoIkNTIil8fGMuZ2V0UmF3KCJDb2xvclNwYWNlIikseHJlZjp0LHJlc291cmNlczphLHBkZkZ1bmN0aW9uRmFjdG9yeTpzLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm99KTt0aGlzLmJhY2tncm91bmQ9Yy5oYXMoIkJhY2tncm91bmQiKT9nLmdldFJnYihjLmdldCgiQmFja2dyb3VuZCIpLDApOm51bGw7Y29uc3QgcD1jLmdldFJhdygiRnVuY3Rpb24iKSxtPXA/cy5jcmVhdGVGcm9tQXJyYXkocCk6bnVsbDt0aGlzLmNvb3Jkcz1bXTt0aGlzLmNvbG9ycz1bXTt0aGlzLmZpZ3VyZXM9W107Y29uc3QgYj17Yml0c1BlckNvb3JkaW5hdGU6Yy5nZXQoIkJpdHNQZXJDb29yZGluYXRlIiksYml0c1BlckNvbXBvbmVudDpjLmdldCgiQml0c1BlckNvbXBvbmVudCIpLGJpdHNQZXJGbGFnOmMuZ2V0KCJCaXRzUGVyRmxhZyIpLGRlY29kZTpjLmdldEFycmF5KCJEZWNvZGUiKSxjb2xvckZuOm0sY29sb3JTcGFjZTpnLG51bUNvbXBzOm0/MTpnLm51bUNvbXBzfSx5PW5ldyBNZXNoU3RyZWFtUmVhZGVyKGUsYik7bGV0IHc9ITE7c3dpdGNoKHRoaXMuc2hhZGluZ1R5cGUpe2Nhc2UgbDp0aGlzLl9kZWNvZGVUeXBlNFNoYWRpbmcoeSk7YnJlYWs7Y2FzZSBoOmNvbnN0IGU9MHxjLmdldCgiVmVydGljZXNQZXJSb3ciKTtpZihlPDIpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgVmVydGljZXNQZXJSb3ciKTt0aGlzLl9kZWNvZGVUeXBlNVNoYWRpbmcoeSxlKTticmVhaztjYXNlIHU6dGhpcy5fZGVjb2RlVHlwZTZTaGFkaW5nKHkpO3c9ITA7YnJlYWs7Y2FzZSBkOnRoaXMuX2RlY29kZVR5cGU3U2hhZGluZyh5KTt3PSEwO2JyZWFrO2RlZmF1bHQ6KDAsci51bnJlYWNoYWJsZSkoIlVuc3VwcG9ydGVkIG1lc2ggdHlwZS4iKX1pZih3KXt0aGlzLl91cGRhdGVCb3VuZHMoKTtmb3IobGV0IGU9MCx0PXRoaXMuZmlndXJlcy5sZW5ndGg7ZTx0O2UrKyl0aGlzLl9idWlsZEZpZ3VyZUZyb21QYXRjaChlKX10aGlzLl91cGRhdGVCb3VuZHMoKTt0aGlzLl9wYWNrRGF0YSgpfV9kZWNvZGVUeXBlNFNoYWRpbmcoZSl7Y29uc3QgdD10aGlzLmNvb3JkcyxhPXRoaXMuY29sb3JzLG49W10saT1bXTtsZXQgcz0wO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3Qgbz1lLnJlYWRGbGFnKCksYz1lLnJlYWRDb29yZGluYXRlKCksbD1lLnJlYWRDb21wb25lbnRzKCk7aWYoMD09PXMpe2lmKCEoMDw9byYmbzw9MikpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZTQgZmxhZyIpO3N3aXRjaChvKXtjYXNlIDA6cz0zO2JyZWFrO2Nhc2UgMTppLnB1c2goaS5hdCgtMiksaS5hdCgtMSkpO3M9MTticmVhaztjYXNlIDI6aS5wdXNoKGkuYXQoLTMpLGkuYXQoLTEpKTtzPTF9bi5wdXNoKG8pfWkucHVzaCh0Lmxlbmd0aCk7dC5wdXNoKGMpO2EucHVzaChsKTtzLS07ZS5hbGlnbigpfXRoaXMuZmlndXJlcy5wdXNoKHt0eXBlOiJ0cmlhbmdsZXMiLGNvb3JkczpuZXcgSW50MzJBcnJheShpKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoaSl9KX1fZGVjb2RlVHlwZTVTaGFkaW5nKGUsdCl7Y29uc3QgYT10aGlzLmNvb3JkcyxyPXRoaXMuY29sb3JzLG49W107Zm9yKDtlLmhhc0RhdGE7KXtjb25zdCB0PWUucmVhZENvb3JkaW5hdGUoKSxpPWUucmVhZENvbXBvbmVudHMoKTtuLnB1c2goYS5sZW5ndGgpO2EucHVzaCh0KTtyLnB1c2goaSl9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6ImxhdHRpY2UiLGNvb3JkczpuZXcgSW50MzJBcnJheShuKSxjb2xvcnM6bmV3IEludDMyQXJyYXkobiksdmVydGljZXNQZXJSb3c6dH0pfV9kZWNvZGVUeXBlNlNoYWRpbmcoZSl7Y29uc3QgdD10aGlzLmNvb3JkcyxhPXRoaXMuY29sb3JzLG49bmV3IEludDMyQXJyYXkoMTYpLGk9bmV3IEludDMyQXJyYXkoNCk7Zm9yKDtlLmhhc0RhdGE7KXtjb25zdCBzPWUucmVhZEZsYWcoKTtpZighKDA8PXMmJnM8PTMpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJVbmtub3duIHR5cGU2IGZsYWciKTtjb25zdCBvPXQubGVuZ3RoO2ZvcihsZXQgYT0wLHI9MCE9PXM/ODoxMjthPHI7YSsrKXQucHVzaChlLnJlYWRDb29yZGluYXRlKCkpO2NvbnN0IGM9YS5sZW5ndGg7Zm9yKGxldCB0PTAscj0wIT09cz8yOjQ7dDxyO3QrKylhLnB1c2goZS5yZWFkQ29tcG9uZW50cygpKTtsZXQgbCxoLHUsZDtzd2l0Y2gocyl7Y2FzZSAwOm5bMTJdPW8rMztuWzEzXT1vKzQ7blsxNF09bys1O25bMTVdPW8rNjtuWzhdPW8rMjtuWzExXT1vKzc7bls0XT1vKzE7bls3XT1vKzg7blswXT1vO25bMV09bysxMTtuWzJdPW8rMTA7blszXT1vKzk7aVsyXT1jKzE7aVszXT1jKzI7aVswXT1jO2lbMV09YyszO2JyZWFrO2Nhc2UgMTpsPW5bMTJdO2g9blsxM107dT1uWzE0XTtkPW5bMTVdO25bMTJdPWQ7blsxM109byswO25bMTRdPW8rMTtuWzE1XT1vKzI7bls4XT11O25bMTFdPW8rMztuWzRdPWg7bls3XT1vKzQ7blswXT1sO25bMV09bys3O25bMl09bys2O25bM109bys1O2w9aVsyXTtoPWlbM107aVsyXT1oO2lbM109YztpWzBdPWw7aVsxXT1jKzE7YnJlYWs7Y2FzZSAyOmw9blsxNV07aD1uWzExXTtuWzEyXT1uWzNdO25bMTNdPW8rMDtuWzE0XT1vKzE7blsxNV09bysyO25bOF09bls3XTtuWzExXT1vKzM7bls0XT1oO25bN109bys0O25bMF09bDtuWzFdPW8rNztuWzJdPW8rNjtuWzNdPW8rNTtsPWlbM107aVsyXT1pWzFdO2lbM109YztpWzBdPWw7aVsxXT1jKzE7YnJlYWs7Y2FzZSAzOm5bMTJdPW5bMF07blsxM109byswO25bMTRdPW8rMTtuWzE1XT1vKzI7bls4XT1uWzFdO25bMTFdPW8rMztuWzRdPW5bMl07bls3XT1vKzQ7blswXT1uWzNdO25bMV09bys3O25bMl09bys2O25bM109bys1O2lbMl09aVswXTtpWzNdPWM7aVswXT1pWzFdO2lbMV09YysxfW5bNV09dC5sZW5ndGg7dC5wdXNoKFsoLTQqdFtuWzBdXVswXS10W25bMTVdXVswXSs2Kih0W25bNF1dWzBdK3RbblsxXV1bMF0pLTIqKHRbblsxMl1dWzBdK3RbblszXV1bMF0pKzMqKHRbblsxM11dWzBdK3Rbbls3XV1bMF0pKS85LCgtNCp0W25bMF1dWzFdLXRbblsxNV1dWzFdKzYqKHRbbls0XV1bMV0rdFtuWzFdXVsxXSktMioodFtuWzEyXV1bMV0rdFtuWzNdXVsxXSkrMyoodFtuWzEzXV1bMV0rdFtuWzddXVsxXSkpLzldKTtuWzZdPXQubGVuZ3RoO3QucHVzaChbKC00KnRbblszXV1bMF0tdFtuWzEyXV1bMF0rNioodFtuWzJdXVswXSt0W25bN11dWzBdKS0yKih0W25bMF1dWzBdK3RbblsxNV1dWzBdKSszKih0W25bNF1dWzBdK3RbblsxNF1dWzBdKSkvOSwoLTQqdFtuWzNdXVsxXS10W25bMTJdXVsxXSs2Kih0W25bMl1dWzFdK3Rbbls3XV1bMV0pLTIqKHRbblswXV1bMV0rdFtuWzE1XV1bMV0pKzMqKHRbbls0XV1bMV0rdFtuWzE0XV1bMV0pKS85XSk7bls5XT10Lmxlbmd0aDt0LnB1c2goWygtNCp0W25bMTJdXVswXS10W25bM11dWzBdKzYqKHRbbls4XV1bMF0rdFtuWzEzXV1bMF0pLTIqKHRbblswXV1bMF0rdFtuWzE1XV1bMF0pKzMqKHRbblsxMV1dWzBdK3RbblsxXV1bMF0pKS85LCgtNCp0W25bMTJdXVsxXS10W25bM11dWzFdKzYqKHRbbls4XV1bMV0rdFtuWzEzXV1bMV0pLTIqKHRbblswXV1bMV0rdFtuWzE1XV1bMV0pKzMqKHRbblsxMV1dWzFdK3RbblsxXV1bMV0pKS85XSk7blsxMF09dC5sZW5ndGg7dC5wdXNoKFsoLTQqdFtuWzE1XV1bMF0tdFtuWzBdXVswXSs2Kih0W25bMTFdXVswXSt0W25bMTRdXVswXSktMioodFtuWzEyXV1bMF0rdFtuWzNdXVswXSkrMyoodFtuWzJdXVswXSt0W25bOF1dWzBdKSkvOSwoLTQqdFtuWzE1XV1bMV0tdFtuWzBdXVsxXSs2Kih0W25bMTFdXVsxXSt0W25bMTRdXVsxXSktMioodFtuWzEyXV1bMV0rdFtuWzNdXVsxXSkrMyoodFtuWzJdXVsxXSt0W25bOF1dWzFdKSkvOV0pO3RoaXMuZmlndXJlcy5wdXNoKHt0eXBlOiJwYXRjaCIsY29vcmRzOm5ldyBJbnQzMkFycmF5KG4pLGNvbG9yczpuZXcgSW50MzJBcnJheShpKX0pfX1fZGVjb2RlVHlwZTdTaGFkaW5nKGUpe2NvbnN0IHQ9dGhpcy5jb29yZHMsYT10aGlzLmNvbG9ycyxuPW5ldyBJbnQzMkFycmF5KDE2KSxpPW5ldyBJbnQzMkFycmF5KDQpO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3Qgcz1lLnJlYWRGbGFnKCk7aWYoISgwPD1zJiZzPD0zKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNyBmbGFnIik7Y29uc3Qgbz10Lmxlbmd0aDtmb3IobGV0IGE9MCxyPTAhPT1zPzEyOjE2O2E8cjthKyspdC5wdXNoKGUucmVhZENvb3JkaW5hdGUoKSk7Y29uc3QgYz1hLmxlbmd0aDtmb3IobGV0IHQ9MCxyPTAhPT1zPzI6NDt0PHI7dCsrKWEucHVzaChlLnJlYWRDb21wb25lbnRzKCkpO2xldCBsLGgsdSxkO3N3aXRjaChzKXtjYXNlIDA6blsxMl09byszO25bMTNdPW8rNDtuWzE0XT1vKzU7blsxNV09bys2O25bOF09bysyO25bOV09bysxMztuWzEwXT1vKzE0O25bMTFdPW8rNztuWzRdPW8rMTtuWzVdPW8rMTI7bls2XT1vKzE1O25bN109bys4O25bMF09bztuWzFdPW8rMTE7blsyXT1vKzEwO25bM109bys5O2lbMl09YysxO2lbM109YysyO2lbMF09YztpWzFdPWMrMzticmVhaztjYXNlIDE6bD1uWzEyXTtoPW5bMTNdO3U9blsxNF07ZD1uWzE1XTtuWzEyXT1kO25bMTNdPW8rMDtuWzE0XT1vKzE7blsxNV09bysyO25bOF09dTtuWzldPW8rOTtuWzEwXT1vKzEwO25bMTFdPW8rMztuWzRdPWg7bls1XT1vKzg7bls2XT1vKzExO25bN109bys0O25bMF09bDtuWzFdPW8rNztuWzJdPW8rNjtuWzNdPW8rNTtsPWlbMl07aD1pWzNdO2lbMl09aDtpWzNdPWM7aVswXT1sO2lbMV09YysxO2JyZWFrO2Nhc2UgMjpsPW5bMTVdO2g9blsxMV07blsxMl09blszXTtuWzEzXT1vKzA7blsxNF09bysxO25bMTVdPW8rMjtuWzhdPW5bN107bls5XT1vKzk7blsxMF09bysxMDtuWzExXT1vKzM7bls0XT1oO25bNV09bys4O25bNl09bysxMTtuWzddPW8rNDtuWzBdPWw7blsxXT1vKzc7blsyXT1vKzY7blszXT1vKzU7bD1pWzNdO2lbMl09aVsxXTtpWzNdPWM7aVswXT1sO2lbMV09YysxO2JyZWFrO2Nhc2UgMzpuWzEyXT1uWzBdO25bMTNdPW8rMDtuWzE0XT1vKzE7blsxNV09bysyO25bOF09blsxXTtuWzldPW8rOTtuWzEwXT1vKzEwO25bMTFdPW8rMztuWzRdPW5bMl07bls1XT1vKzg7bls2XT1vKzExO25bN109bys0O25bMF09blszXTtuWzFdPW8rNztuWzJdPW8rNjtuWzNdPW8rNTtpWzJdPWlbMF07aVszXT1jO2lbMF09aVsxXTtpWzFdPWMrMX10aGlzLmZpZ3VyZXMucHVzaCh7dHlwZToicGF0Y2giLGNvb3JkczpuZXcgSW50MzJBcnJheShuKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoaSl9KX19X2J1aWxkRmlndXJlRnJvbVBhdGNoKGUpe2NvbnN0IHQ9dGhpcy5maWd1cmVzW2VdOygwLHIuYXNzZXJ0KSgicGF0Y2giPT09dC50eXBlLCJVbmV4cGVjdGVkIHBhdGNoIG1lc2ggZmlndXJlIik7Y29uc3QgYT10aGlzLmNvb3JkcyxuPXRoaXMuY29sb3JzLGk9dC5jb29yZHMscz10LmNvbG9ycyxvPU1hdGgubWluKGFbaVswXV1bMF0sYVtpWzNdXVswXSxhW2lbMTJdXVswXSxhW2lbMTVdXVswXSksYz1NYXRoLm1pbihhW2lbMF1dWzFdLGFbaVszXV1bMV0sYVtpWzEyXV1bMV0sYVtpWzE1XV1bMV0pLGw9TWF0aC5tYXgoYVtpWzBdXVswXSxhW2lbM11dWzBdLGFbaVsxMl1dWzBdLGFbaVsxNV1dWzBdKSxoPU1hdGgubWF4KGFbaVswXV1bMV0sYVtpWzNdXVsxXSxhW2lbMTJdXVsxXSxhW2lbMTVdXVsxXSk7bGV0IHU9TWF0aC5jZWlsKChsLW8pKk1lc2hTaGFkaW5nLlRSSUFOR0xFX0RFTlNJVFkvKHRoaXMuYm91bmRzWzJdLXRoaXMuYm91bmRzWzBdKSk7dT1NYXRoLm1heChNZXNoU2hhZGluZy5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihNZXNoU2hhZGluZy5NQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCx1KSk7bGV0IGQ9TWF0aC5jZWlsKChoLWMpKk1lc2hTaGFkaW5nLlRSSUFOR0xFX0RFTlNJVFkvKHRoaXMuYm91bmRzWzNdLXRoaXMuYm91bmRzWzFdKSk7ZD1NYXRoLm1heChNZXNoU2hhZGluZy5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihNZXNoU2hhZGluZy5NQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxkKSk7Y29uc3QgZj11KzEsZz1uZXcgSW50MzJBcnJheSgoZCsxKSpmKSxwPW5ldyBJbnQzMkFycmF5KChkKzEpKmYpO2xldCBtPTA7Y29uc3QgYj1uZXcgVWludDhBcnJheSgzKSx5PW5ldyBVaW50OEFycmF5KDMpLHc9bltzWzBdXSxTPW5bc1sxXV0seD1uW3NbMl1dLEM9bltzWzNdXSxrPWdldEIoZCksdj1nZXRCKHUpO2ZvcihsZXQgZT0wO2U8PWQ7ZSsrKXtiWzBdPSh3WzBdKihkLWUpK3hbMF0qZSkvZHwwO2JbMV09KHdbMV0qKGQtZSkreFsxXSplKS9kfDA7YlsyXT0od1syXSooZC1lKSt4WzJdKmUpL2R8MDt5WzBdPShTWzBdKihkLWUpK0NbMF0qZSkvZHwwO3lbMV09KFNbMV0qKGQtZSkrQ1sxXSplKS9kfDA7eVsyXT0oU1syXSooZC1lKStDWzJdKmUpL2R8MDtmb3IobGV0IHQ9MDt0PD11O3QrKyxtKyspe2lmKCEoMCE9PWUmJmUhPT1kfHwwIT09dCYmdCE9PXUpKWNvbnRpbnVlO2xldCByPTAscz0wLG89MDtmb3IobGV0IG49MDtuPD0zO24rKylmb3IobGV0IGM9MDtjPD0zO2MrKyxvKyspe2NvbnN0IGw9a1tlXVtuXSp2W3RdW2NdO3IrPWFbaVtvXV1bMF0qbDtzKz1hW2lbb11dWzFdKmx9Z1ttXT1hLmxlbmd0aDthLnB1c2goW3Isc10pO3BbbV09bi5sZW5ndGg7Y29uc3QgYz1uZXcgVWludDhBcnJheSgzKTtjWzBdPShiWzBdKih1LXQpK3lbMF0qdCkvdXwwO2NbMV09KGJbMV0qKHUtdCkreVsxXSp0KS91fDA7Y1syXT0oYlsyXSoodS10KSt5WzJdKnQpL3V8MDtuLnB1c2goYyl9fWdbMF09aVswXTtwWzBdPXNbMF07Z1t1XT1pWzNdO3BbdV09c1sxXTtnW2YqZF09aVsxMl07cFtmKmRdPXNbMl07Z1tmKmQrdV09aVsxNV07cFtmKmQrdV09c1szXTt0aGlzLmZpZ3VyZXNbZV09e3R5cGU6ImxhdHRpY2UiLGNvb3JkczpnLGNvbG9yczpwLHZlcnRpY2VzUGVyUm93OmZ9fV91cGRhdGVCb3VuZHMoKXtsZXQgZT10aGlzLmNvb3Jkc1swXVswXSx0PXRoaXMuY29vcmRzWzBdWzFdLGE9ZSxyPXQ7Zm9yKGxldCBuPTEsaT10aGlzLmNvb3Jkcy5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT10aGlzLmNvb3Jkc1tuXVswXSxzPXRoaXMuY29vcmRzW25dWzFdO2U9ZT5pP2k6ZTt0PXQ+cz9zOnQ7YT1hPGk/aTphO3I9cjxzP3M6cn10aGlzLmJvdW5kcz1bZSx0LGEscl19X3BhY2tEYXRhKCl7bGV0IGUsdCxhLHI7Y29uc3Qgbj10aGlzLmNvb3JkcyxpPW5ldyBGbG9hdDMyQXJyYXkoMipuLmxlbmd0aCk7Zm9yKGU9MCxhPTAsdD1uLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PW5bZV07aVthKytdPXRbMF07aVthKytdPXRbMV19dGhpcy5jb29yZHM9aTtjb25zdCBzPXRoaXMuY29sb3JzLG89bmV3IFVpbnQ4QXJyYXkoMypzLmxlbmd0aCk7Zm9yKGU9MCxhPTAsdD1zLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PXNbZV07b1thKytdPXRbMF07b1thKytdPXRbMV07b1thKytdPXRbMl19dGhpcy5jb2xvcnM9bztjb25zdCBjPXRoaXMuZmlndXJlcztmb3IoZT0wLHQ9Yy5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1jW2VdLG49dC5jb29yZHMsaT10LmNvbG9ycztmb3IoYT0wLHI9bi5sZW5ndGg7YTxyO2ErKyl7blthXSo9MjtpW2FdKj0zfX19Z2V0SVIoKXtyZXR1cm5bIk1lc2giLHRoaXMuc2hhZGluZ1R5cGUsdGhpcy5jb29yZHMsdGhpcy5jb2xvcnMsdGhpcy5maWd1cmVzLHRoaXMuYm91bmRzLHRoaXMuYmJveCx0aGlzLmJhY2tncm91bmRdfX1jbGFzcyBEdW1teVNoYWRpbmcgZXh0ZW5kcyBCYXNlU2hhZGluZ3tnZXRJUigpe3JldHVyblsiRHVtbXkiXX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuZ2V0WGZhRm9udERpY3Q9ZnVuY3Rpb24gZ2V0WGZhRm9udERpY3QoZSl7Y29uc3QgdD1mdW5jdGlvbiBnZXRYZmFGb250V2lkdGhzKGUpe2NvbnN0IHQ9Z2V0WGZhRm9udE5hbWUoZSk7aWYoIXQpcmV0dXJuIG51bGw7Y29uc3R7YmFzZVdpZHRoczphLGJhc2VNYXBwaW5nOnIsZmFjdG9yczpufT10LGk9bj9hLm1hcCgoKGUsdCk9PmUqblt0XSkpOmE7bGV0IHMsbz0tMjtjb25zdCBjPVtdO2Zvcihjb25zdFtlLHRdb2Ygci5tYXAoKChlLHQpPT5bZSx0XSkpLnNvcnQoKChbZV0sW3RdKT0+ZS10KSkpaWYoLTEhPT1lKWlmKGU9PT1vKzEpe3MucHVzaChpW3RdKTtvKz0xfWVsc2V7bz1lO3M9W2lbdF1dO2MucHVzaChlLHMpfXJldHVybiBjfShlKSxhPW5ldyBuLkRpY3QobnVsbCk7YS5zZXQoIkJhc2VGb250IixuLk5hbWUuZ2V0KGUpKTthLnNldCgiVHlwZSIsbi5OYW1lLmdldCgiRm9udCIpKTthLnNldCgiU3VidHlwZSIsbi5OYW1lLmdldCgiQ0lERm9udFR5cGUyIikpO2Euc2V0KCJFbmNvZGluZyIsbi5OYW1lLmdldCgiSWRlbnRpdHktSCIpKTthLnNldCgiQ0lEVG9HSURNYXAiLG4uTmFtZS5nZXQoIklkZW50aXR5IikpO2Euc2V0KCJXIix0KTthLnNldCgiRmlyc3RDaGFyIix0WzBdKTthLnNldCgiTGFzdENoYXIiLHQuYXQoLTIpK3QuYXQoLTEpLmxlbmd0aC0xKTtjb25zdCByPW5ldyBuLkRpY3QobnVsbCk7YS5zZXQoIkZvbnREZXNjcmlwdG9yIixyKTtjb25zdCBpPW5ldyBuLkRpY3QobnVsbCk7aS5zZXQoIk9yZGVyaW5nIiwiSWRlbnRpdHkiKTtpLnNldCgiUmVnaXN0cnkiLCJBZG9iZSIpO2kuc2V0KCJTdXBwbGVtZW50IiwwKTthLnNldCgiQ0lEU3lzdGVtSW5mbyIsaSk7cmV0dXJuIGF9O3QuZ2V0WGZhRm9udE5hbWU9Z2V0WGZhRm9udE5hbWU7dmFyIHI9YSg1Miksbj1hKDQpLGk9YSg1Mykscz1hKDU0KSxvPWEoNTUpLGM9YSg1NiksbD1hKDMpLGg9YSgzOCk7Y29uc3QgdT0oMCxsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbIk15cmlhZFByby1SZWd1bGFyIl09ZVsiUGRmSlMtRmFsbGJhY2stUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOm8uTXlyaWFkUHJvUmVndWxhckZhY3RvcnMsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmcsbWV0cmljczpvLk15cmlhZFByb1JlZ3VsYXJNZXRyaWNzfTtlWyJNeXJpYWRQcm8tQm9sZCJdPWVbIlBkZkpTLUZhbGxiYWNrLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpvLk15cmlhZFByb0JvbGRGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLG1ldHJpY3M6by5NeXJpYWRQcm9Cb2xkTWV0cmljc307ZVsiTXlyaWFkUHJvLUl0Il09ZVsiTXlyaWFkUHJvLUl0YWxpYyJdPWVbIlBkZkpTLUZhbGxiYWNrLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGZhY3RvcnM6by5NeXJpYWRQcm9JdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxtZXRyaWNzOm8uTXlyaWFkUHJvSXRhbGljTWV0cmljc307ZVsiTXlyaWFkUHJvLUJvbGRJdCJdPWVbIk15cmlhZFByby1Cb2xkSXRhbGljIl09ZVsiUGRmSlMtRmFsbGJhY2stQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOm8uTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmcsbWV0cmljczpvLk15cmlhZFByb0JvbGRJdGFsaWNNZXRyaWNzfTtlLkFyaWFsTVQ9ZS5BcmlhbD1lWyJBcmlhbC1SZWd1bGFyIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nfTtlWyJBcmlhbC1Cb2xkTVQiXT1lWyJBcmlhbC1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nfTtlWyJBcmlhbC1JdGFsaWNNVCJdPWVbIkFyaWFsLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZ307ZVsiQXJpYWwtQm9sZEl0YWxpY01UIl09ZVsiQXJpYWwtQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZ307ZVsiQ2FsaWJyaS1SZWd1bGFyIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6ci5DYWxpYnJpUmVndWxhckZhY3RvcnMsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmcsbWV0cmljczpyLkNhbGlicmlSZWd1bGFyTWV0cmljc307ZVsiQ2FsaWJyaS1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6ci5DYWxpYnJpQm9sZEZhY3RvcnMsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsbWV0cmljczpyLkNhbGlicmlCb2xkTWV0cmljc307ZVsiQ2FsaWJyaS1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOnIuQ2FsaWJyaUl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLG1ldHJpY3M6ci5DYWxpYnJpSXRhbGljTWV0cmljc307ZVsiQ2FsaWJyaS1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6ci5DYWxpYnJpQm9sZEl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmcsbWV0cmljczpyLkNhbGlicmlCb2xkSXRhbGljTWV0cmljc307ZVsiU2Vnb2V1aS1SZWd1bGFyIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6Yy5TZWdvZXVpUmVndWxhckZhY3RvcnMsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmcsbWV0cmljczpjLlNlZ29ldWlSZWd1bGFyTWV0cmljc307ZVsiU2Vnb2V1aS1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6Yy5TZWdvZXVpQm9sZEZhY3RvcnMsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsbWV0cmljczpjLlNlZ29ldWlCb2xkTWV0cmljc307ZVsiU2Vnb2V1aS1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOmMuU2Vnb2V1aUl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpSXRhbGljTWV0cmljc307ZVsiU2Vnb2V1aS1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6Yy5TZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmcsbWV0cmljczpjLlNlZ29ldWlCb2xkSXRhbGljTWV0cmljc307ZVsiSGVsdmV0aWNhLVJlZ3VsYXIiXT1lLkhlbHZldGljYT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczppLkhlbHZldGljYVJlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6aS5IZWx2ZXRpY2FSZWd1bGFyTWV0cmljc307ZVsiSGVsdmV0aWNhLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczppLkhlbHZldGljYUJvbGRGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLG1ldHJpY3M6aS5IZWx2ZXRpY2FCb2xkTWV0cmljc307ZVsiSGVsdmV0aWNhLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGZhY3RvcnM6aS5IZWx2ZXRpY2FJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxtZXRyaWNzOmkuSGVsdmV0aWNhSXRhbGljTWV0cmljc307ZVsiSGVsdmV0aWNhLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczppLkhlbHZldGljYUJvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6aS5IZWx2ZXRpY2FCb2xkSXRhbGljTWV0cmljc319KSk7ZnVuY3Rpb24gZ2V0WGZhRm9udE5hbWUoZSl7Y29uc3QgdD0oMCxoLm5vcm1hbGl6ZUZvbnROYW1lKShlKTtyZXR1cm4gdSgpW3RdfX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5DYWxpYnJpUmVndWxhck1ldHJpY3M9dC5DYWxpYnJpUmVndWxhckZhY3RvcnM9dC5DYWxpYnJpSXRhbGljTWV0cmljcz10LkNhbGlicmlJdGFsaWNGYWN0b3JzPXQuQ2FsaWJyaUJvbGRNZXRyaWNzPXQuQ2FsaWJyaUJvbGRJdGFsaWNNZXRyaWNzPXQuQ2FsaWJyaUJvbGRJdGFsaWNGYWN0b3JzPXQuQ2FsaWJyaUJvbGRGYWN0b3JzPXZvaWQgMDt0LkNhbGlicmlCb2xkRmFjdG9ycz1bMS4zODc3LDEsMSwxLC45NzgwMSwuOTI0ODIsLjg5NTUyLC45MTEzMywuODE5ODgsLjk3NTY2LC45ODE1MiwuOTM1NDgsLjkzNTQ4LDEuMjc5OCwuODUyODQsLjkyNzk0LDEsLjk2MTM0LDEuNTQ2NTcsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC44Mjg0NSwuODI4NDUsLjg1Mjg0LC44NTI4NCwuODUyODQsLjc1ODU5LC45MjEzOCwuODM5MDgsLjc3NjIsLjczMjkzLC44NzI4OSwuNzMxMzMsLjc1MTQsLjgxOTIxLC44NzM1NiwuOTU5NTgsLjU5NTI2LC43NTcyNywuNjkyMjUsMS4wNDkyNCwuOTEyMSwuODY5NDMsLjc5Nzk1LC44ODE5OCwuNzc5NTgsLjcwODY0LC44MTA1NSwuOTAzOTksLjg4NjUzLC45NjAxNywuODI1NzcsLjc3ODkyLC43ODI1NywuOTc1MDcsMS41NDY1NywuOTc1MDcsLjg1Mjg0LC44OTU1MiwuOTAxNzYsLjg4NzYyLC44Nzg1LC43NTI0MSwuODc4NSwuOTA1MTgsLjk1MDE1LC43NzYxOCwuODc4NSwuODg0MDEsLjkxOTE2LC44NjMwNCwuODg0MDEsLjkxNDg4LC44Nzg1LC44ODAxLC44Nzg1LC44Nzg1LC45MTM0MywuNzE3MywxLjA0MTA2LC44Nzg1LC44NTA3NSwuOTU3OTQsLjgyNjE2LC44NTE2MiwuNzk0OTIsLjg4MzMxLDEuNjk4MDgsLjg4MzMxLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuNzgwMSwuODk1NTIsMS4yNDQ4NywxLjEzMjU0LDEuMTI0MDEsLjk2ODM5LC44NTI4NCwuNjg3ODcsLjcwNjQ1LC44NTU5MiwuOTA3NDcsMS4wMTQ2NiwxLjAwODgsLjkwMzIzLDEsMS4wNzQ2MywxLC45MTA1NiwuNzU4MDYsMS4xOTExOCwuOTY4MzksLjc4ODY0LC44Mjg0NSwuODQxMzMsLjc1ODU5LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC43NzUzOSwuNzMyOTMsLjczMTMzLC43MzEzMywuNzMxMzMsLjczMTMzLC45NTk1OCwuOTU5NTgsLjk1OTU4LC45NTk1OCwuODg1MDYsLjkxMjEsLjg2OTQzLC44Njk0MywuODY5NDMsLjg2OTQzLC44Njk0MywuODUyODQsLjg3NTA4LC45MDM5OSwuOTAzOTksLjkwMzk5LC45MDM5OSwuNzc4OTIsLjc5Nzk1LC45MDgwNywuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODcxNSwuNzUyNDEsLjkwNTE4LC45MDUxOCwuOTA1MTgsLjkwNTE4LC44ODQwMSwuODg0MDEsLjg4NDAxLC44ODQwMSwuODc4NSwuODc4NSwuODgwMSwuODgwMSwuODgwMSwuODgwMSwuODgwMSwuOTA3NDcsLjg5MDQ5LC44Nzg1LC44Nzg1LC44Nzg1LC44Nzg1LC44NTE2MiwuODc4NSwuODUxNjIsLjgzOTA4LC44ODc2MiwuODM5MDgsLjg4NzYyLC44MzkwOCwuODg3NjIsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuODcyODksLjgzMDE2LC44ODUwNiwuOTMxMjUsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC44MTkyMSwuNzc2MTgsLjgxOTIxLC43NzYxOCwuODE5MjEsLjc3NjE4LDEsMSwuODczNTYsLjg3ODUsLjkxMDc1LC44OTYwOCwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjc2MjI5LC45MDE2NywuNTk1MjYsLjkxOTE2LDEsMSwuODYzMDQsLjY5MjI1LC44ODQwMSwxLDEsLjcwNDI0LC43OTQ2OCwuOTE5MjYsLjg4MTc1LC43MDgyMywuOTQ5MDMsLjkxMjEsLjg3ODUsMSwxLC45MTIxLC44Nzg1LC44NzgwMiwuODg2NTYsLjg3ODUsLjg2OTQzLC44ODAxLC44Njk0MywuODgwMSwuODY5NDMsLjg4MDEsLjg3NDAyLC44OTI5MSwuNzc5NTgsLjkxMzQzLDEsMSwuNzc5NTgsLjkxMzQzLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywxLDEsLjgxMDU1LC43NTg0MSwuODEwNTUsMS4wNjQ1MiwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTYwMTcsLjk1Nzk0LC43Nzg5MiwuODUxNjIsLjc3ODkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC45Mjk3LC41Njg5MiwuODM5MDgsLjg4NzYyLC43NzUzOSwuODcxNSwuODc1MDgsLjg5MDQ5LDEsMSwuODEwNTUsMS4wNDEwNiwxLjIwNTI4LDEuMjA1MjgsMSwxLjE1NTQzLC43MDY3NCwuOTgzODcsLjk0NzIxLDEuMzM0MzEsMS40NTg5NCwuOTUxNjEsMS4wNjMwMywuODM5MDgsLjgwMzUyLC41NzE4NCwuNjk2NSwuNTYyODksLjgyMDAxLC41NjAyOSwuODEyMzUsMS4wMjk4OCwuODM5MDgsLjc3NjIsLjY4MTU2LC44MDM2NywuNzMxMzMsLjc4MjU3LC44NzM1NiwuODY5NDMsLjk1OTU4LC43NTcyNywuODkwMTksMS4wNDkyNCwuOTEyMSwuNzY0OCwuODY5NDMsLjg3MzU2LC43OTc5NSwuNzgyNzUsLjgxMDU1LC43Nzg5MiwuOTc2MiwuODI1NzcsLjk5ODE5LC44NDg5NiwuOTU5NTgsLjc3ODkyLC45NjEwOCwxLjAxNDA3LC44OTA0OSwxLjAyOTg4LC45NDIxMSwuOTYxMDgsLjg5MzYsLjg0MDIxLC44Nzg0MiwuOTYzOTksLjc5MTA5LC44OTA0OSwxLjAwODEzLDEuMDI5ODgsLjg2MDc3LC44NzQ0NSwuOTIwOTksLjg0NzIzLC44NjUxMywuODgwMSwuNzU2MzgsLjg1NzE0LC43ODIxNiwuNzk1ODYsLjg3OTY1LC45NDIxMSwuOTc3NDcsLjc4Mjg3LC45NzkyNiwuODQ5NzEsMS4wMjk4OCwuOTQyMTEsLjg4MDEsLjk0MjExLC44NDk3MSwuNzMxMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwMjY0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDUxOCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA1NDgsMSwxLDEsMSwxLDEsLjk2MDE3LC45NTc5NCwuOTYwMTcsLjk1Nzk0LC45NjAxNywuOTU3OTQsLjc3ODkyLC44NTE2MiwxLDEsLjg5NTUyLC45MDUyNywxLC45MDM2MywuOTI3OTQsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjg3MDEyLC44NzAxMiwuODcwMTIsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC43MTE0MywxLjA2MTUyLDEsMSwxLjAzMzcyLDEuMDMzNzIsLjk3MTcxLDEuNDk1NiwyLjI4MDcsLjkzODM1LC44MzQwNiwuOTExMzMsLjg0MTA3LC45MTEzMywxLDEsMSwuNzIwMjEsMSwxLjIzMTA4LC44MzQ4OSwuODg1MjUsLjg4NTI1LC44MTQ5OSwuOTA1MjcsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjMxMDA2LDEuNTM3MTEsLjk0NDM0LDEuMDg2OTYsMSwuOTUwMTgsLjc3MTkyLC44NTI4NCwuOTA3NDcsMS4xNzUzNCwuNjk4MjUsLjk3MTYsMS4zNzA3NywuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDgwMDQsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA3MjcsLjkwNzI3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LkNhbGlicmlCb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN307dC5DYWxpYnJpQm9sZEl0YWxpY0ZhY3RvcnM9WzEuMzg3NywxLDEsMSwuOTc4MDEsLjkyNDgyLC44OTU1MiwuOTExMzMsLjgxOTg4LC45NzU2NiwuOTgxNTIsLjkzNTQ4LC45MzU0OCwxLjI3OTgsLjg1Mjg0LC45Mjc5NCwxLC45NjEzNCwxLjU2MjM5LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuODI4NDUsLjgyODQ1LC44NTI4NCwuODUyODQsLjg1Mjg0LC43NTg1OSwuOTIxMzgsLjgzOTA4LC43NzYyLC43MTgwNSwuODcyODksLjczMTMzLC43NTE0LC44MTkyMSwuODczNTYsLjk1OTU4LC41OTUyNiwuNzU3MjcsLjY5MjI1LDEuMDQ5MjQsLjkwODcyLC44NTkzOCwuNzk3OTUsLjg3MDY4LC43Nzk1OCwuNjk3NjYsLjgxMDU1LC45MDM5OSwuODg2NTMsLjk2MDY4LC44MjU3NywuNzc4OTIsLjc4MjU3LC45NzUwNywxLjUyOSwuOTc1MDcsLjg1Mjg0LC44OTU1MiwuOTAxNzYsLjk0OTA4LC44NjQxMSwuNzQwMTIsLjg2NDExLC44ODMyMywuOTUwMTUsLjg2NDExLC44NjMzMSwuODg0MDEsLjkxOTE2LC44NjMwNCwuODg0MDEsLjkwMzksLjg2MzMxLC44NjMzMSwuODY0MTEsLjg2NDExLC45MDQ2NCwuNzA4NTIsMS4wNDEwNiwuODYzMzEsLjg0MzcyLC45NTc5NCwuODI2MTYsLjg0NTQ4LC43OTQ5MiwuODgzMzEsMS42OTgwOCwuODgzMzEsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS43ODAxLC44OTU1MiwxLjI0NDg3LDEuMTMyNTQsMS4xOTEyOSwuOTY4MzksLjg1Mjg0LC42ODc4NywuNzA2NDUsLjg1NTkyLC45MDc0NywxLjAxNDY2LDEuMDA4OCwuOTAzMjMsMSwxLjA3NDYzLDEsLjkxMDU2LC43NTgwNiwxLjE5MTE4LC45NjgzOSwuNzg4NjQsLjgyODQ1LC44NDEzMywuNzU4NTksLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjc3NTM5LC43MTgwNSwuNzMxMzMsLjczMTMzLC43MzEzMywuNzMxMzMsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjk1OTU4LC44ODUwNiwuOTA4NzIsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTkzOCwuODUyODQsLjg3MDY4LC45MDM5OSwuOTAzOTksLjkwMzk5LC45MDM5OSwuNzc4OTIsLjc5Nzk1LC45MDgwNywuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuODU4ODcsLjc0MDEyLC44ODMyMywuODgzMjMsLjg4MzIzLC44ODMyMywuODg0MDEsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg3ODUsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjkwNzQ3LC44OTA0OSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg0NTQ4LC44NjQxMSwuODQ1NDgsLjgzOTA4LC45NDkwOCwuODM5MDgsLjk0OTA4LC44MzkwOCwuOTQ5MDgsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuODcyODksLjc5NTM4LC44ODUwNiwuOTI3MjYsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC44MTkyMSwuODY0MTEsLjgxOTIxLC44NjQxMSwuODE5MjEsLjg2NDExLDEsMSwuODczNTYsLjg2MzMxLC45MTA3NSwuODc3NywuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjc2NDY3LC45MDE2NywuNTk1MjYsLjkxOTE2LDEsMSwuODYzMDQsLjY5MjI1LC44ODQwMSwxLDEsLjcwNDI0LC43NzMxMiwuOTE5MjYsLjg4MTc1LC43MDgyMywuOTQ5MDMsLjkwODcyLC44NjMzMSwxLDEsLjkwODcyLC44NjMzMSwuODY5MDYsLjg4MTE2LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg1OTM4LC44NjMzMSwuODc0MDIsLjg2NTQ5LC43Nzk1OCwuOTA0NjQsMSwxLC43Nzk1OCwuOTA0NjQsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwxLDEsLjgxMDU1LC43NTg0MSwuODEwNTUsMS4wNjQ1MiwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTYwNjgsLjk1Nzk0LC43Nzg5MiwuODQ1NDgsLjc3ODkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC45Mjk3LC41Njg5MiwuODM5MDgsLjk0OTA4LC43NzUzOSwuODU4ODcsLjg3MDY4LC44OTA0OSwxLDEsLjgxMDU1LDEuMDQxMDYsMS4yMDUyOCwxLjIwNTI4LDEsMS4xNTU0MywuNzAwODgsLjk4Mzg3LC45NDcyMSwxLjMzNDMxLDEuNDU4OTQsLjk1MTYxLDEuNDgzODcsLjgzOTA4LC44MDM1MiwuNTcxMTgsLjY5NjUsLjU2MzQ3LC43OTE3OSwuNTU4NTMsLjgwMzQ2LDEuMDI5ODgsLjgzOTA4LC43NzYyLC42NzE3NCwuODYwMzYsLjczMTMzLC43ODI1NywuODczNTYsLjg2NDQxLC45NTk1OCwuNzU3MjcsLjg5MDE5LDEuMDQ5MjQsLjkwODcyLC43NDg4OSwuODU5MzgsLjg3ODkxLC43OTc5NSwuNzk1NywuODEwNTUsLjc3ODkyLC45NzQ0NywuODI1NzcsLjk3NDY2LC44NzE3OSwuOTU5NTgsLjc3ODkyLC45NDI1MiwuOTU2MTIsLjg3NTMsMS4wMjk4OCwuOTI3MzMsLjk0MjUyLC44NzQxMSwuODQwMjEsLjg3MjgsLjk1NjEyLC43NDA4MSwuODc1MywxLjAyMTg5LDEuMDI5ODgsLjg0ODE0LC44NzQ0NSwuOTE4MjIsLjg0NzIzLC44NTY2OCwuODYzMzEsLjgxMzQ0LC44NzU4MSwuNzY0MjIsLjgyMDQ2LC45NjA1NywuOTI3MzMsLjk5Mzc1LC43ODAyMiwuOTU0NTIsLjg2MDE1LDEuMDI5ODgsLjkyNzMzLC44NjMzMSwuOTI3MzMsLjg2MDE1LC43MzEzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA2MzEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg4MzIzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NTE3NCwxLDEsMSwxLDEsMSwuOTYwNjgsLjk1Nzk0LC45NjA2OCwuOTU3OTQsLjk2MDY4LC45NTc5NCwuNzc4OTIsLjg0NTQ4LDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMzYzLC45Mjc5NCwuOTI3OTQsLjkyNzk0LC44OTgwNywuODcwMTIsLjg3MDEyLC44NzAxMiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjcxMDk0LDEuMDYxNTIsMSwxLDEuMDMzNzIsMS4wMzM3MiwuOTcxNzEsMS40OTU2LDIuMjgwNywuOTI5NzIsLjgzNDA2LC45MTEzMywuODMzMjYsLjkxMTMzLDEsMSwxLC43MjAyMSwxLDEuMjMxMDgsLjgzNDg5LC44ODUyNSwuODg1MjUsLjgxNDk5LC45MDYxNiwxLjgxMDU1LC45MDUyNywxLjgxMDU1LDEuMzEwNywxLjUzNzExLC45NDQzNCwxLjA4Njk2LDEsLjk1MDE4LC43NzE5MiwuODUyODQsLjkwNzQ3LDEuMTc1MzQsLjY5ODI1LC45NzE2LDEuMzcwNzcsLjkwNzQ3LC45MDc0NywuODUzNTYsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjA4MDA0LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNzI3LC45MDcyNywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9O3QuQ2FsaWJyaUl0YWxpY0ZhY3RvcnM9WzEuMzg3NywxLDEsMSwxLjE3MjIzLDEuMTI5MywuODk1NTIsLjkxMTMzLC44MDM5NSwxLjAyMjY5LDEuMTU2MDEsLjkxMDU2LC45MTA1NiwxLjI3OTgsLjg1Mjg0LC44OTgwNywxLC45MDg2MSwxLjM5NTQzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTYzMDksLjk2MzA5LC44NTI4NCwuODUyODQsLjg1Mjg0LC44MzMxOSwuODgwNzEsLjg2NzUsLjgxNTUyLC43MjM0NiwuODUxOTMsLjczMjA2LC43NTIyLC44MTEwNSwuODYyNzUsLjkwNjg1LC42Mzc3LC43Nzg5MiwuNzU1OTMsMS4wMjYzOCwuODkyNDksLjg0MTE4LC43NzQ1MiwuODUzNzQsLjc1MTg2LC42Nzc4OSwuNzk3NzYsLjg4ODQ0LC44NTA2NiwuOTQzMDksLjc3ODE4LC43MzA2LC43NjY1OSwxLjEwMzY5LDEuMzgzMTMsMS4xMDM2OSwxLjA2MTM5LC44OTU1MiwuODczOSwuOTI0NSwuOTI0NSwuODMyMDMsLjkyNDUsLjg1ODY1LDEuMDk4NDIsLjkyNDUsLjkyNDUsMS4wMzI5NywxLjA3NjkyLC45MDkxOCwxLjAzMjk3LC45NDk1OSwuOTI0NSwuOTIyNzQsLjkyNDUsLjkyNDUsMS4wMjkzMywuNzc4MzIsMS4yMDU2MiwuOTI0NSwuODkxNiwuOTg5ODYsLjg2NjIxLC44OTQ1MywuNzkwMDQsLjk0MTUyLDEuNzcyNTYsLjk0MTUyLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuOTE3MjksLjg5NTUyLDEuMTc4ODksMS4xMzI1NCwxLjE2MzU5LC45MjA5OCwuODUyODQsLjY4Nzg3LC43MTM1MywuODQ3MzcsLjkwNzQ3LDEuMDA4OCwxLjAwNDQsLjg3NjgzLDEsMS4wOTA5MSwxLC45MjIyOSwuNzM5LDEuMTU2NDIsLjkyMDk4LC43NjI4OCwuODA1MDQsLjgwOTcyLC43NTg1OSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuNzYzMTgsLjcyMzQ2LC43MzIwNiwuNzMyMDYsLjczMjA2LC43MzIwNiwuOTA2ODUsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjg2NDc3LC44OTI0OSwuODQxMTgsLjg0MTE4LC44NDExOCwuODQxMTgsLjg0MTE4LC44NTI4NCwuODQ1NTcsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjg4ODQ0LC43MzA2LC43NzQ1MiwuODYzMzEsLjkyNDUsLjkyNDUsLjkyNDUsLjkyNDUsLjkyNDUsLjkyNDUsLjg0ODQzLC44MzIwMywuODU4NjUsLjg1ODY1LC44NTg2NSwuODU4NjUsLjgyNjAxLC44MjYwMSwuODI2MDEsLjgyNjAxLC45NDQ2OSwuOTI0NSwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MDc0NywuODY2NTEsLjkyNDUsLjkyNDUsLjkyNDUsLjkyNDUsLjg5NDUzLC45MjQ1LC44OTQ1MywuODY3NSwuOTI0NSwuODY3NSwuOTI0NSwuODY3NSwuOTI0NSwuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC44NTE5MywuODg3NSwuODY0NzcsLjk5MDM0LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuODExMDUsLjkyNDUsLjgxMTA1LC45MjQ1LC44MTEwNSwuOTI0NSwxLDEsLjg2Mjc1LC45MjQ1LC45MDg3MiwuOTM1OTEsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LDEuMDMyOTcsLjkwNjg1LC44MjYwMSwuNzc4OTYsMS4wNTYxMSwuNjM3NywxLjA3NjkyLDEsMSwuOTA5MTgsLjc1NTkzLDEuMDMyOTcsMSwxLC43NjAzMiwuOTM3NSwuOTgxNTYsLjkzNDA3LC43NzI2MSwxLjExNDI5LC44OTI0OSwuOTI0NSwxLDEsLjg5MjQ5LC45MjQ1LC45MjUzNCwuODY2OTgsLjkyNDUsLjg0MTE4LC45MjI3NCwuODQxMTgsLjkyMjc0LC44NDExOCwuOTIyNzQsLjg2NjcsLjg2MjkxLC43NTE4NiwxLjAyOTMzLDEsMSwuNzUxODYsMS4wMjkzMywuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLDEsMSwuNzk3NzYsLjk3NjU1LC43OTc3NiwxLjIzMDIzLC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC45NDMwOSwuOTg5ODYsLjczMDYsLjg5NDUzLC43MzA2LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LDEuMDkyMzEsLjU0ODczLC44Njc1LC45MjQ1LC43NjMxOCwuODQ4NDMsLjg0NTU3LC44NjY1MSwxLDEsLjc5Nzc2LDEuMjA1NjIsMS4xODYyMiwxLjE4NjIyLDEsMS4xNDM3LC42NzAwOSwuOTYzMzQsLjkzNjk1LDEuMzUxOTEsMS40MDkwOSwuOTUxNjEsMS40ODM4NywuODY3NSwuOTA4NjEsLjYxOTIsLjczNjMsLjY0ODI0LC44MjQxMSwuNTYzMjEsLjg1Njk2LDEuMjM1MTYsLjg2NzUsLjgxNTUyLC43Mjg2LC44NDEzNCwuNzMyMDYsLjc2NjU5LC44NjI3NSwuODQzNjksLjkwNjg1LC43Nzg5MiwuODU4NzEsMS4wMjYzOCwuODkyNDksLjc1ODI4LC44NDExOCwuODU5ODQsLjc3NDUyLC43NjQ2NiwuNzk3NzYsLjczMDYsLjkwNzgyLC43NzgxOCwuOTAzLC44NzI5MSwuOTA2ODUsLjczMDYsLjk5MDU4LDEuMDM2NjcsLjk0NjM1LDEuMjM1MTYsLjk4NDksLjk5MDU4LC45MjM5MywuODkxNiwuOTQyLDEuMDM2NjcsLjc1MDI2LC45NDYzNSwxLjAyOTcsMS4yMzUxNiwuOTA5MTgsLjk0MDQ4LC45ODIxNywuODk3NDYsLjg0MTUzLC45MjI3NCwuODI1MDcsLjg4ODMyLC44NDQzOCwuODgxNzgsMS4wMzUyNSwuOTg0OSwxLjAwMjI1LC43ODA4NiwuOTcyNDgsLjg5NDA0LDEuMjM1MTYsLjk4NDksLjkyMjc0LC45ODQ5LC44OTQwNCwuNzMyMDYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NjkzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NTg2NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA5MzMsMSwxLDEsMSwxLDEsLjk0MzA5LC45ODk4NiwuOTQzMDksLjk4OTg2LC45NDMwOSwuOTg5ODYsLjczMDYsLjg5NDUzLDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMTg2LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4yNTY2LDEuMjU2NiwxLjI1NjYsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC42ODk5NCwxLjAzODA5LDEsMSwxLjAxNzYsMS4wMTc2LDEuMTE1MjMsMS40OTU2LDIuMDE0NjIsLjk3ODU4LC44MjYxNiwuOTExMzMsLjgzNDM3LC45MTEzMywxLDEsMSwuNzA1MDgsMSwxLjIzMTA4LC43OTgwMSwuODQ0MjYsLjg0NDI2LC43NzQsLjkwNTcyLDEuODEwNTUsLjkwNzQ5LDEuODEwNTUsMS4yODgwOSwxLjU1NDY5LC45NDQzNCwxLjA3ODA2LDEsLjk3MDk0LC43NTg5LC44NTI4NCwuOTA3NDcsMS4xOTY1OCwuNjk4MjUsLjk3NjIyLDEuMzM1MTIsLjkwNzQ3LC45MDc0NywuODUyODQsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjAzMzYsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA1ODU5LDEuMDU4NTksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuQ2FsaWJyaUl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9O3QuQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzPVsxLjM4NzcsMSwxLDEsMS4xNzIyMywxLjEyOTMsLjg5NTUyLC45MTEzMywuODAzOTUsMS4wMjI2OSwxLjE1NjAxLC45MTA1NiwuOTEwNTYsMS4yNzk4LC44NTI4NCwuODk4MDcsMSwuOTA4NjEsMS4zOTAxNiwuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjk2MzA5LC45NjMwOSwuODUyODQsLjg1Mjg0LC44NTI4NCwuODMzMTksLjg4MDcxLC44Njc1LC44MTU1MiwuNzM4MzQsLjg1MTkzLC43MzIwNiwuNzUyMiwuODExMDUsLjg2Mjc1LC45MDY4NSwuNjM3NywuNzc4OTIsLjc1NTkzLDEuMDI2MzgsLjg5Mzg1LC44NTEyMiwuNzc0NTIsLjg2NTAzLC43NTE4NiwuNjg4ODcsLjc5Nzc2LC44ODg0NCwuODUwNjYsLjk0MjU4LC43NzgxOCwuNzMwNiwuNzY2NTksMS4xMDM2OSwxLjM5MDE2LDEuMTAzNjksMS4wNjEzOSwuODk1NTIsLjg3MzksLjg2MTI4LC45NDQ2OSwuODQ1NywuOTQ0NjksLjg5NDY0LDEuMDk4NDIsLjg0NjM2LC45NDQ2OSwxLjAzMjk3LDEuMDc2OTIsLjkwOTE4LDEuMDMyOTcsLjk1ODk3LC45NDQ2OSwuOTQ4MiwuOTQ0NjksLjk0NDY5LDEuMDQ2OTIsLjc4MjIzLDEuMjA1NjIsLjk0NDY5LC45MDMzMiwuOTg5ODYsLjg2NjIxLC45MDUyNywuNzkwMDQsLjk0MTUyLDEuNzcyNTYsLjk0MTUyLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuOTE3MjksLjg5NTUyLDEuMTc4ODksMS4xMzI1NCwxLjA4NzA3LC45MjA5OCwuODUyODQsLjY4Nzg3LC43MTM1MywuODQ3MzcsLjkwNzQ3LDEuMDA4OCwxLjAwNDQsLjg3NjgzLDEsMS4wOTA5MSwxLC45MjIyOSwuNzM5LDEuMTU2NDIsLjkyMDk4LC43NjI4OCwuODA1MDQsLjgwOTcyLC43NTg1OSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuNzYzMTgsLjczODM0LC43MzIwNiwuNzMyMDYsLjczMjA2LC43MzIwNiwuOTA2ODUsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjg2NDc3LC44OTM4NSwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTI4NCwuODUzMTEsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjg4ODQ0LC43MzA2LC43NzQ1MiwuODYzMzEsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2OTMsLjg0NTcsLjg5NDY0LC44OTQ2NCwuODk0NjQsLjg5NDY0LC44MjYwMSwuODI2MDEsLjgyNjAxLC44MjYwMSwuOTQ0NjksLjk0NDY5LC45NDgyLC45NDgyLC45NDgyLC45NDgyLC45NDgyLC45MDc0NywuODY2NTEsLjk0NDY5LC45NDQ2OSwuOTQ0NjksLjk0NDY5LC45MDUyNywuOTQ0NjksLjkwNTI3LC44Njc1LC44NjEyOCwuODY3NSwuODYxMjgsLjg2NzUsLjg2MTI4LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuODUxOTMsLjkyNDU0LC44NjQ3NywuOTkyMSwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjgxMTA1LC44NDYzNiwuODExMDUsLjg0NjM2LC44MTEwNSwuODQ2MzYsMSwxLC44NjI3NSwuOTQ0NjksLjkwODcyLC45NTc4NiwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsMS4wMzI5NywuOTA2ODUsLjgyNjAxLC43Nzc0MSwxLjA1NjExLC42Mzc3LDEuMDc2OTIsMSwxLC45MDkxOCwuNzU1OTMsMS4wMzI5NywxLDEsLjc2MDMyLC45MDQ1MiwuOTgxNTYsMS4xMTg0MiwuNzcyNjEsMS4xMTQyOSwuODkzODUsLjk0NDY5LDEsMSwuODkzODUsLjk0NDY5LC45NTg3NywuODY5MDEsLjk0NDY5LC44NTEyMiwuOTQ4MiwuODUxMjIsLjk0ODIsLjg1MTIyLC45NDgyLC44NjY3LC45MDAxNiwuNzUxODYsMS4wNDY5MiwxLDEsLjc1MTg2LDEuMDQ2OTIsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywxLDEsLjc5Nzc2LC45MjE4OCwuNzk3NzYsMS4yMzAyMywuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuOTQyNTgsLjk4OTg2LC43MzA2LC45MDUyNywuNzMwNiwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwxLjA5MjMxLC41NDg3MywuODY3NSwuODYxMjgsLjc2MzE4LC44NjkzLC44NTMxMSwuODY2NTEsMSwxLC43OTc3NiwxLjIwNTYyLDEuMTg2MjIsMS4xODYyMiwxLDEuMTQzNywuNjc3NDIsLjk2MzM0LC45MzY5NSwxLjM1MTkxLDEuNDA5MDksLjk1MTYxLDEuNDgzODcsLjg2Njg2LC45MDg2MSwuNjIyNjcsLjc0MzU5LC42NTY0OSwuODU0OTgsLjU2OTYzLC44ODI1NCwxLjIzNTE2LC44Njc1LC44MTU1MiwuNzU0NDMsLjg0NTAzLC43MzIwNiwuNzY2NTksLjg2Mjc1LC44NTEyMiwuOTA2ODUsLjc3ODkyLC44NTc0NiwxLjAyNjM4LC44OTM4NSwuNzU2NTcsLjg1MTIyLC44NjI3NSwuNzc0NTIsLjc0MTcxLC43OTc3NiwuNzMwNiwuOTUxNjUsLjc3ODE4LC44OTc3MiwuODg4MzEsLjkwNjg1LC43MzA2LC45ODE0MiwxLjAyMTkxLC45NjU3NiwxLjIzNTE2LC45OTAxOCwuOTgxNDIsLjkyMzYsLjg5MjU4LC45NDAzNSwxLjAyMTkxLC43ODg0OCwuOTY1NzYsLjk1NjEsMS4yMzUxNiwuOTA5MTgsLjkyNTc4LC45NTQyNCwuODk3NDYsLjgzOTY5LC45NDgyLC44MDExMywuODk0NDIsLjg1MjA4LC44NjE1NSwuOTgwMjIsLjk5MDE4LDEuMDA0NTIsLjgxMjA5LC45OTI0NywuODkxODEsMS4yMzUxNiwuOTkwMTgsLjk0ODIsLjk5MDE4LC44OTE4MSwuNzMyMDYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg4ODQ0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44OTQ2NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTY3NjYsMSwxLDEsMSwxLDEsLjk0MjU4LC45ODk4NiwuOTQyNTgsLjk4OTg2LC45NDI1OCwuOTg5ODYsLjczMDYsLjkwNTI3LDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMTg2LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4yNTY2LDEuMjU2NiwxLjI1NjYsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC42OTA0MywxLjAzODA5LDEsMSwxLjAxNzYsMS4wMTc2LDEuMTE1MjMsMS40OTU2LDIuMDE0NjIsLjk5MzMxLC44MjYxNiwuOTExMzMsLjg0Mjg2LC45MTEzMywxLDEsMSwuNzA1MDgsMSwxLjIzMTA4LC43OTgwMSwuODQ0MjYsLjg0NDI2LC43NzQsLjkwNTI3LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4yODgwOSwxLjU1NDY5LC45NDQzNCwxLjA3ODA2LDEsLjk3MDk0LC43NTg5LC44NTI4NCwuOTA3NDcsMS4xOTY1OCwuNjk4MjUsLjk3NjIyLDEuMzM1MTIsLjkwNzQ3LC45MDc0NywuODUzNTYsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjAzMzYsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA1ODU5LDEuMDU4NTksMSwxLDEsMS4wNzE4NSwuOTk0MTMsLjk2MzM0LDEuMDgwNjUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LkNhbGlicmlSZWd1bGFyTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN319LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSGVsdmV0aWNhUmVndWxhck1ldHJpY3M9dC5IZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycz10LkhlbHZldGljYUl0YWxpY01ldHJpY3M9dC5IZWx2ZXRpY2FJdGFsaWNGYWN0b3JzPXQuSGVsdmV0aWNhQm9sZE1ldHJpY3M9dC5IZWx2ZXRpY2FCb2xkSXRhbGljTWV0cmljcz10LkhlbHZldGljYUJvbGRJdGFsaWNGYWN0b3JzPXQuSGVsdmV0aWNhQm9sZEZhY3RvcnM9dm9pZCAwO3QuSGVsdmV0aWNhQm9sZEZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LC45OTk5OCwuOTk5NzQsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTc3LDEuMDAwODcsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLDEuMDAwMjYsLjk5OTksLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsLjk5OTczLC45OTk3NywxLjAwMDI2LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk5OCwxLjAwMDYsLjk5OTk4LDEuMDAwMDMsLjk5OTczLC45OTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LC45OTk3MywxLjAwMDYsLjk5OTgyLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTU5LC45OTk3MywuOTk5OTgsMS4wMDAyNiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTczLDEsLjk5OTU5LDEuMDAwNzcsLjk5OTU5LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDc3LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5NzMsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDY0MDksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywxLjAzMzc0LC45OTk3NywxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA0MiwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzcsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDM4MjgsMS4wMDAyNiwuOTk5OTksMS4wMDAyNiwxLjAwMDYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTMsLjk5OTgsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLDEuMDAwMTYsLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsMS4wMDAyNiwuODEyMSwxLjAwMDI2LC45OTk5OCwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDYsLjk5OTczLC45OTk3NywuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLjAwMDM0LC45OTk3NywxLC45OTk5NywxLjAwMDI2LDEuMDAwNzgsMS4wMDAzNiwuOTk5NzMsMS4wMDAxMywxLjAwMDYsLjk5OTc3LC45OTk3NywuOTk5ODgsLjg1MTQ4LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsLjk5OTc3LDEuMDAwMDEsLjk5OTk5LC45OTk3NywxLjAwMDY5LDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsLjk5OTg0LDEuMDAwMjYsMS4wMDAwMSwxLjAwMDI0LDEuMDAwMDEsLjk5OTksMSwxLjAwMDYsMS4wMDAwMSwxLjAwMDQxLC45OTk2MiwxLjAwMDI2LDEuMDAwNiwuOTk5OTUsMS4wMDA0MSwuOTk5NDIsLjk5OTczLC45OTkyNywxLjAwMDgyLC45OTkwMiwxLjAwMDI2LDEuMDAwODcsMS4wMDA2LDEuMDAwNjksLjk5OTczLC45OTg2NywuOTk5NzMsLjk5OTMsMS4wMDAyNiwxLjAwMDQ5LDEuMDAwNTYsMSwuOTk5ODgsLjk5OTM1LC45OTk5NSwuOTk5NTQsMS4wMDA1NSwuOTk5NDUsMS4wMDAzMiwxLjAwMDYsLjk5OTk1LDEuMDAwMjYsLjk5OTk1LDEuMDAwMzIsMS4wMDAwMSwxLjAwMDA4LC45OTk3MSwxLjAwMDE5LC45OTk0LDEuMDAwMDEsMS4wMDA2LDEuMDAwNDQsLjk5OTczLDEuMDAwMjMsMS4wMDA0NywxLC45OTk0MiwuOTk1NjEsLjk5OTg5LDEuMDAwMzUsLjk5OTc3LDEuMDAwMzUsLjk5OTc3LDEuMDAwMTksLjk5OTQ0LDEuMDAwMDEsMS4wMDAyMSwuOTk5MjYsMS4wMDAzNSwxLjAwMDM1LC45OTk0MiwxLjAwMDQ4LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDM1LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTg5LDEuMDAwNTcsMS4wMDAwMSwuOTk5MzYsMS4wMDA1MiwxLjAwMDEyLC45OTk5NiwxLjAwMDQzLDEsMS4wMDAzNSwuOTk5NCwuOTk5NzYsMS4wMDAzNSwuOTk5NzMsMS4wMDA1MiwxLjAwMDQxLDEuMDAxMTksMS4wMDAzNywuOTk5NzMsMS4wMDAwMiwuOTk5ODYsMS4wMDA0MSwxLjAwMDQxLC45OTkwMiwuOTk5NiwxLjAwMDM0LC45OTk5OSwxLjAwMDI2LC45OTk5OSwxLjAwMDI2LC45OTk3MywxLjAwMDUyLC45OTk3MywxLC45OTk3MywxLjAwMDQxLDEuMDAwNzUsLjk5OTQsMS4wMDAzLC45OTk5OSwxLDEuMDAwNDEsLjk5OTU1LDEsLjk5OTE1LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMTE5LC45OTk1NSwuOTk5NzMsMS4wMDA2LC45OTkxMSwxLjAwMDYsMS4wMDAyNiwuOTk5NzIsMS4wMDAyNiwuOTk5MDIsMS4wMDA0MSwuOTk5NzMsLjk5OTk5LDEsMSwxLjAwMDM4LDEuMDAwNSwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLDEsLjk5OTczLDEsMSwuOTk5NTUsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEsMSwxLC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMTA2LC45OTk5OSwuOTk5OTgsLjk5OTk4LC45OTk5OSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMS4wMDAyMywuOTk5NzMsLjk5OTcxLDEuMDAwNDcsMS4wMDAyMywxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLDEsMSwxLDEsMSwxLC45OTk3MiwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLDEuMDAwMzEsMS4wMDAxNSwxLC45OTU2MSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzIsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LkhlbHZldGljYUJvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfTt0LkhlbHZldGljYUJvbGRJdGFsaWNGYWN0b3JzPVsuNzYxMTYsMSwxLDEuMDAwNiwuOTk5OTgsLjk5OTc0LC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3NywxLjAwMDg3LC45OTk5OCwuOTk5OTgsLjk5OTU5LDEuMDAwMDMsMS4wMDA2LC45OTk5OCwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDAzLDEuMDAwMDMsMS4wMDAwMywxLjAwMDI2LC45OTk5LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LC45OTk3MywuOTk5NzcsMS4wMDAyNiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAwMSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMDEsMS4wMDAxNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5OTgsMS4wMDA2LC45OTk5OCwxLjAwMDAzLC45OTk3MywuOTk5OTgsLjk5OTczLDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk5OCwxLjAwMDI2LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsMS4wMDA2LC45OTk4MiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk1OSwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsLjk5OTczLDEuMDAwMjIsLjk5OTczLC45OTk3MywxLC45OTk1OSwxLjAwMDc3LC45OTk1OSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA3NywuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTczLDEuMDAwNiwuOTk5OTgsMSwuOTk5MzYsLjk5OTczLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMjYsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMSwuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAwMywxLjAwMDIyLC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjA2NDA5LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsMS4wMDQ0LC45OTk3NywxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTcxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTczLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMTAxMSwxLjAwMDI2LC45OTk5OSwxLjAwMDI2LDEuMDAwNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5MywuOTk5OCwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEsMS4wMDAxNiwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwxLjAwMDI2LC44MTIxLDEuMDAwMjYsLjk5OTk4LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwNiwuOTk5NzMsLjk5OTc3LC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzcsMSwxLDEuMDAwMjYsLjk5OTY5LC45OTk3MiwuOTk5ODEsLjk5OTgsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwuOTExNTUsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwuOTk5NzcsMS4wMDAwMSwuOTk5OTksLjk5OTc3LC45OTk2NiwxLjAwMDIyLDEuMDAwMzIsMS4wMDAwMSwuOTk5NDQsMS4wMDAyNiwxLjAwMDAxLC45OTk2OCwxLjAwMDAxLDEuMDAwNDcsMSwxLjAwMDYsMS4wMDAwMSwuOTk5ODEsMS4wMDEwMSwxLjAwMDI2LDEuMDAwNiwuOTk5NDgsLjk5OTgxLDEuMDAwNjQsLjk5OTczLC45OTk0MiwxLjAwMTAxLDEuMDAwNjEsMS4wMDAyNiwxLjAwMDY5LDEuMDAwNiwxLjAwMDE0LC45OTk3MywxLjAxMzIyLC45OTk3MywxLjAwMDY1LDEuMDAwMjYsMS4wMDAxMiwuOTk5MjMsMSwxLjAwMDY0LDEuMDAwNzYsLjk5OTQ4LDEuMDAwNTUsMS4wMDA2MywxLjAwMDA3LC45OTk0MywxLjAwMDYsLjk5OTQ4LDEuMDAwMjYsLjk5OTQ4LC45OTk0MywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyOSwxLjAwMDM4LDEuMDAwMzUsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzgsMS4wMDAwMSwxLjAwMDU3LC45OTk4OSwuOTk5NjcsLjk5OTY0LC45OTk2NywuOTk5NzcsLjk5OTk5LC45OTk3NywxLjAwMDM4LC45OTk3NywxLjAwMDAxLC45OTk3MywxLjAwMDY2LC45OTk2NywuOTk5NjcsMS4wMDA0MSwuOTk5OTgsLjk5OTk5LC45OTk3NywxLjAwMDIyLC45OTk2NywxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk2NCwxLjAwMDMxLDEuMDAwMDEsLjk5OTk5LC45OTk5OSwxLDEuMDAwMjMsMSwxLC45OTk5OSwxLjAwMDM1LDEuMDAwMDEsLjk5OTk5LC45OTk3MywuOTk5NzcsLjk5OTk5LDEuMDAwNTgsLjk5OTczLC45OTk3MywuOTk5NTUsLjk5OTUsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMzIsLjk5OTg5LDEuMDAwMzQsLjk5OTk5LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MywuNDU5OTgsLjk5OTczLDEuMDAwMjYsLjk5OTczLDEuMDAwMDEsLjk5OTk5LC45OTk4MiwuOTk5OTQsLjk5OTk2LDEsMS4wMDA0MiwxLjAwMDQ0LDEuMDAwMjksMS4wMDAyMywuOTk5NzMsLjk5OTczLDEuMDAwMjYsLjk5OTQ5LDEuMDAwMDIsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAzMiwuOTg2ODUsLjk5OTczLDEuMDAwMjYsMSwxLC45OTk2NiwxLjAwMDQ0LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMSwxLDEsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAxMDYsLjk5OTk5LC45OTk5OCwuOTk5OTgsLjk5OTk5LC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzEsLjk5OTc4LDEsMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDA5OCwxLDEsMSwxLjAwMDQ5LDEsMSwuOTk5NzIsMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywxLjAwMDMxLDEuMDAwMTUsMSwuOTk1NjEsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsLjk5OTE1LDEuMDAwMzEsMS4wMDAzMSwuOTk5OTksMS4wMDAwMywuOTk5OTksLjk5OTk5LDEuNDExNDQsMS42LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MDU3OSwxLjQwNTc5LDEuMzY2MjUsLjk5OTk5LDEsLjk5ODYxLC45OTg2MSwxLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTcyLC45OTk5OSwuOTk5OTksLjk5OTk5LC45OTk5OSwxLjQwNDgzLDEsLjk5OTc3LDEuMDAwNTQsMSwxLC45OTk1MywuOTk5NjIsMS4wMDA0MiwuOTk5NSwxLDEsMSwxLDEsMSwxLDEsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5IZWx2ZXRpY2FCb2xkSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjM1LGxpbmVHYXA6LjJ9O3QuSGVsdmV0aWNhSXRhbGljRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsMS4wMDA2LDEuMDAwMDYsLjk5OTczLC45OTk3MywuOTk5ODIsMS4wMDAwMSwxLjAwMDQzLC45OTk5OCwuOTk5OTgsLjk5OTU5LDEuMDAwMDMsMS4wMDA2LC45OTk5OCwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMSwxLjAwMDAzLDEuMDAwMDMsMS4wMDAwMywuOTk5NzMsLjk5OTg3LDEuMDAwMDEsMS4wMDAwMSwuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsMSwxLjAwMDAxLC45OTk3MywuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAwMSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMDEsMS4wMDAxNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NDksLjk5OTczLC45OTk5OCwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5MjQsLjk5OTI0LDEsLjk5OTI0LC45OTk5OSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDA2LC45OTk3MywxLC45OTk3NywxLDEsMSwxLjAwMDA1LDEuMDAwOSwxLjAwMDA1LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDksLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk4LDEuMDAwNiwuOTk5OTgsMSwuOTk5MzYsLjk5OTczLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMjYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMSwuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAwMywxLjAwMDIyLC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5ODIsMSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjA2NDA5LDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEsLjk5OTczLDEsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEuMDI4OCwuOTk5NzcsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTI0LDEuMDAwNiwxLjAwMDYsLjk5OTQ2LDEuMDAwMzQsMSwuOTk5MjQsMS4wMDAwMSwxLDEsLjk5OTczLC45OTkyNCwuOTk5NzMsLjk5OTI0LC45OTk3MywxLjA2MzExLC45OTk3MywxLjAwMDI0LC45OTk3MywuOTk5MjQsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDA0MSwuOTk5OCwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMSwxLjAwMDE2LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LC44OTU0NywxLjAwMDI2LDEuMDAwNiwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMS4wMDAwMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwuOTk5MjQsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLjAwMDAxLDEsMS4wMDA1NCwuOTk5NzcsMS4wMDA4NCwxLjAwMDA3LC45OTk3MywxLjAwMDEzLC45OTkyNCwxLjAwMDAxLDEuMDAwMDEsLjk5OTQ1LC45MTIyMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LDEuMDAwMDEsMS4wMDAwMSwuOTk5OTksLjk5OTc3LC45OTkzMywxLjAwMDIyLDEuMDAwNTQsMS4wMDAwMSwxLjAwMDY1LDEuMDAwMjYsMS4wMDAwMSwxLjAwMDEsMS4wMDAwMSwxLjAwMDUyLDEsMS4wMDA2LDEuMDAwMDEsLjk5OTQ1LC45OTg5NywuOTk5NjgsLjk5OTI0LDEuMDAwMzYsLjk5OTQ1LC45OTk0OSwxLDEuMDAwNiwuOTk4OTcsLjk5OTE4LC45OTk2OCwuOTk5MTEsLjk5OTI0LDEsLjk5OTYyLDEuMDE0ODcsMSwxLjAwMDUsLjk5OTczLDEuMDAwMTIsMS4wMDA0MywxLC45OTk5NSwuOTk5OTQsMS4wMDAzNiwuOTk5NDcsMS4wMDAxOSwxLjAwMDYzLDEuMDAwMjUsLjk5OTI0LDEuMDAwMzYsLjk5OTczLDEuMDAwMzYsMS4wMDAyNSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNywxLjAwMDEsMS4wMDA2OCwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMSwxLjAwMDA4LC45OTk1NywuOTk5NzIsLjk5OTQsLjk5OTU0LC45OTk3NSwxLjAwMDUxLDEuMDAwMDEsMS4wMDAxOSwxLjAwMDAxLDEuMDAwMSwuOTk5ODYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMzgsLjk5OTU0LC45OTk1NCwuOTk5NCwxLjAwMDY2LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDU0LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTc1LDEuMDAwMSwxLjAwMDAxLC45OTk5MywuOTk5NSwuOTk5NTUsMS4wMDAxNiwuOTk5NzgsLjk5OTc0LDEuMDAwMTksMS4wMDAyMiwuOTk5NTUsMS4wMDA1MywuOTk5NzMsMS4wMDA4OSwxLjAwMDA1LC45OTk2NywxLjAwMDQ4LC45OTk3MywxLjAwMDAyLDEuMDAwMzQsLjk5OTczLC45OTk3MywuOTk5NjQsMS4wMDAwNiwxLjAwMDY2LC45OTk0NywuOTk5NzMsLjk4ODk0LC45OTk3MywxLC40NDg5OCwxLC45OTk0NiwxLDEuMDAwMzksMS4wMDA4MiwuOTk5OTEsLjk5OTkxLC45OTk4NSwxLjAwMDIyLDEuMDAwMjMsMS4wMDA2MSwxLjAwMDA2LC45OTk2NiwuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDE5LDEuMDAwOCwxLC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTk4MywxLjAwMDQ0LC45OTk3MywuOTk5NjQsLjk4MzMyLDEsLjk5OTczLDEsMSwuOTk5NjIsLjk5ODk1LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLDEsLjk5OTczLDEsMSwuOTk5NTUsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMjY3LC45OTk5OSwuOTk5OTgsLjk5OTk4LDEsLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEuMDAwMjMsLjk5OTczLDEuMDA0MjMsLjk5OTI1LC45OTk5OSwxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDQ5LDEsMS4wMDI0NSwxLDEsMSwxLC45NjMyOSwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLC44MjU0LDEuMDAwMTUsMSwxLjAwMDM1LDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLDEuMDAwMDMsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTUzMTcsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LkhlbHZldGljYUl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zNSxsaW5lR2FwOi4yfTt0LkhlbHZldGljYVJlZ3VsYXJGYWN0b3JzPVsuNzYxMTYsMSwxLDEuMDAwNiwxLjAwMDYsMS4wMDAwNiwuOTk5NzMsLjk5OTczLC45OTk4MiwxLjAwMDAxLDEuMDAwNDMsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLC45OTk3MywuOTk5ODcsMS4wMDAwMSwxLjAwMDAxLC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwxLDEuMDAwMDEsLjk5OTczLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk0OSwuOTk5NzMsLjk5OTk4LC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTkyNCwuOTk5MjQsMSwuOTk5MjQsLjk5OTk5LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDYsLjk5OTczLDEsLjk5OTc3LDEsMSwxLDEuMDAwMDUsMS4wMDA5LDEuMDAwMDUsMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwOSwuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTgsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwxLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDY0MDksMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsMSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMS4wNDU5NiwuOTk5NzcsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTI0LDEuMDAwNiwxLjAwMDYsMS4wMDAxOSwxLjAwMDM0LDEsLjk5OTI0LDEuMDAwMDEsMSwxLC45OTk3MywuOTk5MjQsLjk5OTczLC45OTkyNCwuOTk5NzMsMS4wMjU3MiwuOTk5NzMsMS4wMDAwNSwuOTk5NzMsLjk5OTI0LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk5OSwuOTk5OCwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMSwxLjAwMDE2LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LC44NDUzMywxLjAwMDI2LDEuMDAwNiwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMS4wMDAwMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwuOTk5MjQsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5MjgsMSwuOTk5NzcsMS4wMDAxMywxLjAwMDU1LC45OTk0NywuOTk5NDUsLjk5OTQxLC45OTkyNCwxLjAwMDAxLDEuMDAwMDEsMS4wMDA0LC45MTYyMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LDEuMDAwMDEsMS4wMDAwNSwuOTk5OTksLjk5OTc3LDEuMDAwMTUsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMTksMS4wMDAwMSwuOTk5NDYsMSwxLjAwMDYsMS4wMDAwMSwuOTk5NzgsMS4wMDA0NSwuOTk5NzMsLjk5OTI0LDEuMDAwMjMsLjk5OTc4LC45OTk2NiwxLDEuMDAwNjUsMS4wMDA0NSwxLjAwMDE5LC45OTk3MywuOTk5NzMsLjk5OTI0LDEsMSwuOTY0OTksMSwxLjAwMDU1LC45OTk3MywxLjAwMDA4LDEuMDAwMjcsMSwuOTk5NywuOTk5OTUsMS4wMDAyMywuOTk5MzMsMS4wMDAxOSwxLjAwMDE1LDEuMDAwMzEsLjk5OTI0LDEuMDAwMjMsLjk5OTczLDEuMDAwMjMsMS4wMDAzMSwxLjAwMDAxLC45OTkyOCwxLjAwMDI5LDEuMDAwOTIsMS4wMDAzNSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMSwuOTk5ODgsLjk5OTc1LDEsMS4wMDA4MiwuOTk1NjEsLjk5OTYsMS4wMDAzNSwxLjAwMDAxLC45OTk2MiwxLjAwMDAxLDEuMDAwOTIsLjk5OTY0LDEuMDAwMDEsLjk5OTYzLC45OTk5OSwxLjAwMDM1LDEuMDAwMzUsMS4wMDA4MiwuOTk5NjIsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMzUsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NiwuOTk5NjcsMS4wMDAwMSwxLjAwMDM0LDEuMDAwNzQsMS4wMDA1NCwxLjAwMDUzLDEuMDAwNjMsLjk5OTcxLC45OTk2MiwxLjAwMDM1LC45OTk3NSwuOTk5NzcsLjk5OTczLDEuMDAwNDMsLjk5OTUzLDEuMDAwNywuOTk5MTUsLjk5OTczLDEuMDAwMDgsLjk5ODkyLDEuMDAwNzMsMS4wMDA3MywxLjAwMTE0LC45OTkxNSwxLjAwMDczLC45OTk1NSwuOTk5NzMsMS4wMDA5MiwuOTk5NzMsMSwuOTk5OTgsMSwxLjAwMDMsMSwxLjAwMDQzLDEuMDAwMDEsLjk5OTY5LDEuMDAwMywxLDEuMDAwMzUsMS4wMDAwMSwuOTk5NSwxLDEuMDAwOTIsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA3LC45OTk1LDEsLjk5OTI0LDEuMDAwNiwuOTk5MjQsLjk5OTcyLDEuMDAwNjIsLjk5OTczLDEuMDAxMTQsMS4wMDA3MywxLC45OTk1NSwxLDEsMS4wMDA0NywuOTk5NjgsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAyNjcsLjk5OTk5LC45OTk5OCwuOTk5OTgsMSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMS4wMDAyMywuOTk5NzMsLjk5OTcxLC45OTkyNSwxLjAwMDIzLDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEsMSwxLDEsMSwxLDEsLjk2MzI5LDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsLjgyNTQsMS4wMDAxNSwxLDEuMDAwMzUsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsLjk5OTE1LDEuMDAwMzEsMS4wMDAzMSwuOTk5OTksMS4wMDAwMywuOTk5OTksLjk5OTk5LDEuNDExNDQsMS42LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MDU3OSwxLjQwNTc5LDEuMzY2MjUsLjk5OTk5LDEsLjk5ODYxLC45OTg2MSwxLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk1MzE3LC45OTk5OSwuOTk5OTksLjk5OTk5LC45OTk5OSwxLjQwNDgzLDEsLjk5OTc3LDEuMDAwNTQsMSwxLC45OTk1MywuOTk5NjIsMS4wMDA0MiwuOTk5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuSGVsdmV0aWNhUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocz10LkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmc9dC5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocz10LkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZz10LkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocz10LkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmc9dC5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nPXZvaWQgMDt0LkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocz1bMzY1LDAsMzMzLDI3OCwzMzMsNDc0LDU1Niw1NTYsODg5LDcyMiwyMzgsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMzMzLDMzMyw1ODQsNTg0LDU4NCw2MTEsOTc1LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDU1Niw3MjIsNjExLDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMzMzLDI3OCwzMzMsNTg0LDU1NiwzMzMsNTU2LDYxMSw1NTYsNjExLDU1NiwzMzMsNjExLDYxMSwyNzgsMjc4LDU1NiwyNzgsODg5LDYxMSw2MTEsNjExLDYxMSwzODksNTU2LDMzMyw2MTEsNTU2LDc3OCw1NTYsNTU2LDUwMCwzODksMjgwLDM4OSw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyODAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1NTYsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNzIyLDcyMiw3MjIsNzIyLDcyMiw3MjIsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDU0OSw2MTEsNjExLDYxMSw2MTEsNjExLDU1Niw2MTEsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDcxOSw3MjIsNjExLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDcyMiw2MTEsNzIyLDYxMSwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsNzg1LDU1Niw1NTYsMjc4LDcyMiw1NTYsNTU2LDYxMSwyNzgsNjExLDI3OCw2MTEsMzg1LDYxMSw0NzksNjExLDI3OCw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MDgsNzIzLDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSwxZTMsOTQ0LDcyMiwzODksNzIyLDM4OSw3MjIsMzg5LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjExLDMzMyw2MTEsNDc5LDYxMSwzMzMsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsOTQ0LDc3OCw2NjcsNTU2LDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyNzgsNTU2LDcyMiw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1NTYsNjExLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNDY1LDcyMiwzMzMsODUzLDkwNiw0NzQsODI1LDkyNyw4MzgsMjc4LDcyMiw3MjIsNjAxLDcxOSw2NjcsNjExLDcyMiw3NzgsMjc4LDcyMiw2NjcsODMzLDcyMiw2NDQsNzc4LDcyMiw2NjcsNjAwLDYxMSw2NjcsODIxLDY2Nyw4MDksODAyLDI3OCw2NjcsNjE1LDQ1MSw2MTEsMjc4LDU4Miw2MTUsNjEwLDU1Niw2MDYsNDc1LDQ2MCw2MTEsNTQxLDI3OCw1NTgsNTU2LDYxMiw1NTYsNDQ1LDYxMSw3NjYsNjE5LDUyMCw2ODQsNDQ2LDU4Miw3MTUsNTc2LDc1Myw4NDUsMjc4LDU4Miw2MTEsNTgyLDg0NSw2NjcsNjY5LDg4NSw1NjcsNzExLDY2NywyNzgsMjc2LDU1NiwxMDk0LDEwNjIsODc1LDYxMCw3MjIsNjIyLDcxOSw3MjIsNzE5LDcyMiw1NjcsNzEyLDY2Nyw5MDQsNjI2LDcxOSw3MTksNjEwLDcwMiw4MzMsNzIyLDc3OCw3MTksNjY3LDcyMiw2MTEsNjIyLDg1NCw2NjcsNzMwLDcwMywxMDA1LDEwMTksODcwLDk3OSw3MTksNzExLDEwMzEsNzE5LDU1Niw2MTgsNjE1LDQxNyw2MzUsNTU2LDcwOSw0OTcsNjE1LDYxNSw1MDAsNjM1LDc0MCw2MDQsNjExLDYwNCw2MTEsNTU2LDQ5MCw1NTYsODc1LDU1Niw2MTUsNTgxLDgzMyw4NDQsNzI5LDg1NCw2MTUsNTUyLDg1NCw1ODMsNTU2LDU1Niw2MTEsNDE3LDU1Miw1NTYsMjc4LDI4MSwyNzgsOTY5LDkwNiw2MTEsNTAwLDYxNSw1NTYsNjA0LDc3OCw2MTEsNDg3LDQ0Nyw5NDQsNzc4LDk0NCw3NzgsOTQ0LDc3OCw2NjcsNTU2LDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDI3OCwyNzgsMjc4LDI3OCw1MDAsNTAwLDUwMCw1NTYsNTU2LDM1MCwxZTMsMWUzLDI0MCw0NzksMzMzLDMzMyw2MDQsMzMzLDE2NywzOTYsNTU2LDU1NiwxMDk0LDU1Niw4ODUsNDg5LDExMTUsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsMWUzLDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcyMiwyNzQsNTQ5LDU0OSw1ODMsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw2MTEsNjExLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzXTt0LkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmc9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdO3QuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzPVszNjUsMCwzMzMsMjc4LDMzMyw0NzQsNTU2LDU1Niw4ODksNzIyLDIzOCwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwzMzMsMzMzLDU4NCw1ODQsNTg0LDYxMSw5NzUsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTU2LDcyMiw2MTEsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwzMzMsMjc4LDMzMyw1ODQsNTU2LDMzMyw1NTYsNjExLDU1Niw2MTEsNTU2LDMzMyw2MTEsNjExLDI3OCwyNzgsNTU2LDI3OCw4ODksNjExLDYxMSw2MTEsNjExLDM4OSw1NTYsMzMzLDYxMSw1NTYsNzc4LDU1Niw1NTYsNTAwLDM4OSwyODAsMzg5LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI4MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDU1NiwyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw3MjIsNzIyLDcyMiw3MjIsNzIyLDcyMiwxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNTQ5LDYxMSw2MTEsNjExLDYxMSw2MTEsNTU2LDYxMSw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNzQwLDcyMiw2MTEsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzIyLDYxMSw3MjIsNjExLDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCw3ODIsNTU2LDU1NiwyNzgsNzIyLDU1Niw1NTYsNjExLDI3OCw2MTEsMjc4LDYxMSwzOTYsNjExLDQ3OSw2MTEsMjc4LDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcwOCw3MjMsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDFlMyw5NDQsNzIyLDM4OSw3MjIsMzg5LDcyMiwzODksNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2MTEsMzMzLDYxMSw0NzksNjExLDMzMyw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw5NDQsNzc4LDY2Nyw1NTYsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDI3OCw1NTYsNzIyLDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDU1Niw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNzIyLDMzMyw4NTQsOTA2LDQ3Myw4NDQsOTMwLDg0NywyNzgsNzIyLDcyMiw2MTAsNjcxLDY2Nyw2MTEsNzIyLDc3OCwyNzgsNzIyLDY2Nyw4MzMsNzIyLDY1Nyw3NzgsNzE4LDY2Nyw1OTAsNjExLDY2Nyw4MjIsNjY3LDgyOSw3ODEsMjc4LDY2Nyw2MjAsNDc5LDYxMSwyNzgsNTkxLDYyMCw2MjEsNTU2LDYxMCw0NzksNDkyLDYxMSw1NTgsMjc4LDU2Niw1NTYsNjAzLDU1Niw0NTAsNjExLDcxMiw2MDUsNTMyLDY2NCw0MDksNTkxLDcwNCw1NzgsNzczLDgzNCwyNzgsNTkxLDYxMSw1OTEsODM0LDY2Nyw2NjcsODg2LDYxNCw3MTksNjY3LDI3OCwyNzgsNTU2LDEwOTQsMTA0Miw4NTQsNjIyLDcxOSw2NzcsNzE5LDcyMiw3MDgsNzIyLDYxNCw3MjIsNjY3LDkyNyw2NDMsNzE5LDcxOSw2MTUsNjg3LDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2NzcsNzgxLDY2Nyw3MjksNzA4LDk3OSw5ODksODU0LDFlMyw3MDgsNzE5LDEwNDIsNzI5LDU1Niw2MTksNjA0LDUzNCw2MTgsNTU2LDczNiw1MTAsNjExLDYxMSw1MDcsNjIyLDc0MCw2MDQsNjExLDYxMSw2MTEsNTU2LDg4OSw1NTYsODg1LDU1Niw2NDYsNTgzLDg4OSw5MzUsNzA3LDg1NCw1OTQsNTUyLDg2NSw1ODksNTU2LDU1Niw2MTEsNDY5LDU2Myw1NTYsMjc4LDI3OCwyNzgsOTY5LDkwNiw2MTEsNTA3LDYxOSw1NTYsNjExLDc3OCw2MTEsNTc1LDQ2Nyw5NDQsNzc4LDk0NCw3NzgsOTQ0LDc3OCw2NjcsNTU2LDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDI3OCwyNzgsMjc4LDI3OCw1MDAsNTAwLDUwMCw1NTYsNTU2LDM1MCwxZTMsMWUzLDI0MCw0NzksMzMzLDMzMyw2MDQsMzMzLDE2NywzOTYsNTU2LDU1NiwxMTA0LDU1Niw4ODUsNTE2LDExNDYsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDk5OSw1MDAsMWUzLDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcyMiwyNzQsNTQ5LDU0OSw1ODMsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw2MTEsNjExLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzXTt0LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmc9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdO3QuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHM9WzM2NSwwLDMzMywyNzgsMjc4LDM1NSw1NTYsNTU2LDg4OSw2NjcsMTkxLDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsNTg0LDU4NCw1ODQsNTU2LDEwMTUsNjY3LDY2Nyw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTAwLDY2Nyw1NTYsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwyNzgsMjc4LDI3OCw0NjksNTU2LDMzMyw1NTYsNTU2LDUwMCw1NTYsNTU2LDI3OCw1NTYsNTU2LDIyMiwyMjIsNTAwLDIyMiw4MzMsNTU2LDU1Niw1NTYsNTU2LDMzMyw1MDAsMjc4LDU1Niw1MDAsNzIyLDUwMCw1MDAsNTAwLDMzNCwyNjAsMzM0LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI2MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDUzNywyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2NywxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1MDAsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTQ5LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTAwLDU1Niw1MDAsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNjI1LDcyMiw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzIyLDU1Niw3MjIsNTU2LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyMjIsMjc4LDI3OCw3MzMsNDQ0LDUwMCwyMjIsNjY3LDUwMCw1MDAsNTU2LDIyMiw1NTYsMjIyLDU1NiwyODEsNTU2LDQwMCw1NTYsMjIyLDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDYxNSw3MjMsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDFlMyw5NDQsNzIyLDMzMyw3MjIsMzMzLDcyMiwzMzMsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2MTEsMjc4LDYxMSwzNTQsNjExLDI3OCw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw5NDQsNzIyLDY2Nyw1MDAsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDIyMiw1NTYsNjY3LDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDUwMCw2MTEsMjc4LDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNjY3LDI3OCw3ODksODQ2LDM4OSw3OTQsODY1LDc3NSwyMjIsNjY3LDY2Nyw1NzAsNjcxLDY2Nyw2MTEsNzIyLDc3OCwyNzgsNjY3LDY2Nyw4MzMsNzIyLDY0OCw3NzgsNzI1LDY2Nyw2MDAsNjExLDY2Nyw4MzcsNjY3LDgzMSw3NjEsMjc4LDY2Nyw1NzAsNDM5LDU1NSwyMjIsNTUwLDU3MCw1NzEsNTAwLDU1Niw0MzksNDYzLDU1NSw1NDIsMjIyLDUwMCw0OTIsNTQ4LDUwMCw0NDcsNTU2LDY3MCw1NzMsNDg2LDYwMywzNzQsNTUwLDY1Miw1NDYsNzI4LDc3OSwyMjIsNTUwLDU1Niw1NTAsNzc5LDY2Nyw2NjcsODQzLDU0NCw3MDgsNjY3LDI3OCwyNzgsNTAwLDEwNjYsOTgyLDg0NCw1ODksNzE1LDYzOSw3MjQsNjY3LDY1MSw2NjcsNTQ0LDcwNCw2NjcsOTE3LDYxNCw3MTUsNzE1LDU4OSw2ODYsODMzLDcyMiw3NzgsNzI1LDY2Nyw3MjIsNjExLDYzOSw3OTUsNjY3LDcyNyw2NzMsOTIwLDkyMyw4MDUsODg2LDY1MSw2OTQsMTAyMiw2ODIsNTU2LDU2Miw1MjIsNDkzLDU1Myw1NTYsNjg4LDQ2NSw1NTYsNTU2LDQ3Miw1NjQsNjg2LDU1MCw1NTYsNTU2LDU1Niw1MDAsODMzLDUwMCw4MzUsNTAwLDU3Miw1MTgsODMwLDg1MSw2MjEsNzM2LDUyNiw0OTIsNzUyLDUzNCw1NTYsNTU2LDU1NiwzNzgsNDk2LDUwMCwyMjIsMjIyLDIyMiw5MTAsODI4LDU1Niw0NzIsNTY1LDUwMCw1NTYsNzc4LDU1Niw0OTIsMzM5LDk0NCw3MjIsOTQ0LDcyMiw5NDQsNzIyLDY2Nyw1MDAsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjIyLDIyMiwyMjIsMjIyLDMzMywzMzMsMzMzLDU1Niw1NTYsMzUwLDFlMywxZTMsMTg4LDM1NCwzMzMsMzMzLDUwMCwzMzMsMTY3LDM2NSw1NTYsNTU2LDEwOTQsNTU2LDg4NSwzMjMsMTA4MywxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsMWUzLDUwMCw5OTgsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzE5LDI3NCw1NDksNTQ5LDU4NCw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDUwMCw1MDAsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDI5NCwyOTQsMzI0LDMyNCwzMTYsMzI4LDM5OCwyODVdO3QuTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXTt0LkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocz1bMzY1LDAsMzMzLDI3OCwyNzgsMzU1LDU1Niw1NTYsODg5LDY2NywxOTEsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCw1ODQsNTg0LDU4NCw1NTYsMTAxNSw2NjcsNjY3LDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1MDAsNjY3LDU1Niw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDI3OCwyNzgsMjc4LDQ2OSw1NTYsMzMzLDU1Niw1NTYsNTAwLDU1Niw1NTYsMjc4LDU1Niw1NTYsMjIyLDIyMiw1MDAsMjIyLDgzMyw1NTYsNTU2LDU1Niw1NTYsMzMzLDUwMCwyNzgsNTU2LDUwMCw3MjIsNTAwLDUwMCw1MDAsMzM0LDI2MCwzMzQsNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjYwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTM3LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDUwMCw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NDksNjExLDU1Niw1NTYsNTU2LDU1Niw1MDAsNTU2LDUwMCw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw2MTUsNzIyLDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3MjIsNTU2LDcyMiw1NTYsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDIyMiwyNzgsMjc4LDczNSw0NDQsNTAwLDIyMiw2NjcsNTAwLDUwMCw1NTYsMjIyLDU1NiwyMjIsNTU2LDI5Miw1NTYsMzM0LDU1NiwyMjIsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNjA0LDcyMyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsMWUzLDk0NCw3MjIsMzMzLDcyMiwzMzMsNzIyLDMzMyw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDYxMSwyNzgsNjExLDM3NSw2MTEsMjc4LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDk0NCw3MjIsNjY3LDUwMCw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjIyLDU1Niw2NjcsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTAwLDYxMSwyNzgsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw2NjcsMjc4LDc4NCw4MzgsMzg0LDc3NCw4NTUsNzUyLDIyMiw2NjcsNjY3LDU1MSw2NjgsNjY3LDYxMSw3MjIsNzc4LDI3OCw2NjcsNjY4LDgzMyw3MjIsNjUwLDc3OCw3MjIsNjY3LDYxOCw2MTEsNjY3LDc5OCw2NjcsODM1LDc0OCwyNzgsNjY3LDU3OCw0NDYsNTU2LDIyMiw1NDcsNTc4LDU3NSw1MDAsNTU3LDQ0Niw0NDEsNTU2LDU1NiwyMjIsNTAwLDUwMCw1NzYsNTAwLDQ0OCw1NTYsNjkwLDU2OSw0ODIsNjE3LDM5NSw1NDcsNjQ4LDUyNSw3MTMsNzgxLDIyMiw1NDcsNTU2LDU0Nyw3ODEsNjY3LDY2Nyw4NjUsNTQyLDcxOSw2NjcsMjc4LDI3OCw1MDAsMTA1NywxMDEwLDg1NCw1ODMsNzIyLDYzNSw3MTksNjY3LDY1Niw2NjcsNTQyLDY3Nyw2NjcsOTIzLDYwNCw3MTksNzE5LDU4Myw2NTYsODMzLDcyMiw3NzgsNzE5LDY2Nyw3MjIsNjExLDYzNSw3NjAsNjY3LDc0MCw2NjcsOTE3LDkzOCw3OTIsODg1LDY1Niw3MTksMTAxMCw3MjIsNTU2LDU3Myw1MzEsMzY1LDU4Myw1NTYsNjY5LDQ1OCw1NTksNTU5LDQzOCw1ODMsNjg4LDU1Miw1NTYsNTQyLDU1Niw1MDAsNDU4LDUwMCw4MjMsNTAwLDU3Myw1MjEsODAyLDgyMyw2MjUsNzE5LDUyMSw1MTAsNzUwLDU0Miw1NTYsNTU2LDU1NiwzNjUsNTEwLDUwMCwyMjIsMjc4LDIyMiw5MDYsODEyLDU1Niw0MzgsNTU5LDUwMCw1NTIsNzc4LDU1Niw0ODksNDExLDk0NCw3MjIsOTQ0LDcyMiw5NDQsNzIyLDY2Nyw1MDAsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjIyLDIyMiwyMjIsMjIyLDMzMywzMzMsMzMzLDU1Niw1NTYsMzUwLDFlMywxZTMsMTg4LDM1NCwzMzMsMzMzLDUwMCwzMzMsMTY3LDM2NSw1NTYsNTU2LDEwOTQsNTU2LDg4NSwzMjMsMTA3MywxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsMWUzLDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzE5LDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDUwMCw1MDAsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDI5NCwyOTQsMzI0LDMyNCwzMTYsMzI4LDM5OCwyODVdO3QuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuTXlyaWFkUHJvUmVndWxhck1ldHJpY3M9dC5NeXJpYWRQcm9SZWd1bGFyRmFjdG9ycz10Lk15cmlhZFByb0l0YWxpY01ldHJpY3M9dC5NeXJpYWRQcm9JdGFsaWNGYWN0b3JzPXQuTXlyaWFkUHJvQm9sZE1ldHJpY3M9dC5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljcz10Lk15cmlhZFByb0JvbGRJdGFsaWNGYWN0b3JzPXQuTXlyaWFkUHJvQm9sZEZhY3RvcnM9dm9pZCAwO3QuTXlyaWFkUHJvQm9sZEZhY3RvcnM9WzEuMzY4OTgsMSwxLC43MjcwNiwuODA0NzksLjgzNzM0LC45ODg5NCwuOTk3OTMsLjk4OTcsLjkzODg0LC44NjIwOSwuOTQyOTIsLjk0MjkyLDEuMTY2NjEsMS4wMjA1OCwuOTM1ODIsLjk2Njk0LC45MzU4MiwxLjE5MTM3LC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuNzgwNzYsLjc4MDc2LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43Mjg1MSwuNzg5NjYsLjkwODM4LC44MzYzNywuODIzOTEsLjk2Mzc2LC44MDA2MSwuODYyNzUsLjg3NjgsLjk1NDA3LDEuMDI1OCwuNzM5MDEsLjg1MDIyLC44MzY1NSwxLjAxNTYsLjk1NTQ2LC45MjE3OSwuODcxMDcsLjkyMTc5LC44MjExNCwuODA5NiwuODk3MTMsLjk0NDM4LC45NTM1MywuOTQwODMsLjkxOTA1LC45MDQwNiwuOTQ0NiwuOTQyOTIsMS4xODc3NywuOTQyOTIsMS4wMjA1OCwuODk5MDMsLjkwMDg4LC45NDkzOCwuOTc4OTgsLjgxMDkzLC45NzU3MSwuOTQ5MzgsMS4wMjQsLjk1NzcsLjk1OTMzLC45ODYyMSwxLjA0NzQsLjk3NDU1LC45ODk4MSwuOTY3MiwuOTU5MzMsLjk0NDYsLjk3ODk4LC45NzQwNywuOTc2NDYsLjc4MDM2LDEuMTAyMDgsLjk1NDQyLC45NTI5OCwuOTc1NzksLjkzMzIsLjk0MDM5LC45MzgsLjgwNjg3LDEuMDExNDksLjgwNjg3LDEuMDIwNTgsLjgwNDc5LC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywxLjAxMTQ5LDEuMDA4NzIsLjkwMDg4LC45MTg4MiwxLjAyMTMsLjgzNjEsMS4wMjA1OCwuNjIyOTUsLjU0MzI0LC44OTAyMiwxLjA4NTk1LDEsMSwuOTAwODgsMSwuOTc0NTUsLjkzNTgyLC45MDA4OCwxLDEuMDU2ODYsLjgzNjEsLjk5NjQyLC45OTY0MiwuOTk2NDIsLjcyODUxLC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC44NjgsLjgyMzkxLC44MDA2MSwuODAwNjEsLjgwMDYxLC44MDA2MSwxLjAyNTgsMS4wMjU4LDEuMDI1OCwxLjAyNTgsLjk3NDg0LC45NTU0NiwuOTIxNzksLjkyMTc5LC45MjE3OSwuOTIxNzksLjkyMTc5LDEuMDIwNTgsLjkyMTc5LC45NDQzOCwuOTQ0MzgsLjk0NDM4LC45NDQzOCwuOTA0MDYsLjg2OTU4LC45ODIyNSwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTAzMSwuODEwOTMsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45ODYyMSwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTM5NjksLjk1OTMzLC45NDQ2LC45NDQ2LC45NDQ2LC45NDQ2LC45NDQ2LDEuMDg1OTUsLjk0NDYsLjk1NDQyLC45NTQ0MiwuOTU0NDIsLjk1NDQyLC45NDAzOSwuOTc4OTgsLjk0MDM5LC45MDgzOCwuOTQ5MzgsLjkwODM4LC45NDkzOCwuOTA4MzgsLjk0OTM4LC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjk2Mzc2LC44NDMxMywuOTc0ODQsLjk3NTcxLC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODc2OCwuOTU3NywuODc2OCwuOTU3NywuODc2OCwuOTU3NywxLDEsLjk1NDA3LC45NTkzMywuOTcwNjksLjk1OTMzLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwuODg3LDEuMDE1OTEsLjczOTAxLDEuMDQ3NCwxLDEsLjk3NDU1LC44MzY1NSwuOTg5ODEsMSwxLC44MzY1NSwuNzM5NzcsLjgzNjU1LC43MzkwMywuODQ2MzgsMS4wMzMsLjk1NTQ2LC45NTkzMywxLDEsLjk1NTQ2LC45NTkzMywuODI3MSwuOTU0MTcsLjk1OTMzLC45MjE3OSwuOTQ0NiwuOTIxNzksLjk0NDYsLjkyMTc5LC45NDQ2LC45MzYsLjkxOTY0LC44MjExNCwuOTc2NDYsMSwxLC44MjExNCwuOTc2NDYsLjgwOTYsLjc4MDM2LC44MDk2LC43ODAzNiwxLDEsLjgwOTYsLjc4MDM2LDEsMSwuODk3MTMsLjc3NDUyLC44OTcxMywxLjEwMjA4LC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDA4MywuOTc1NzksLjkwNDA2LC45NDAzOSwuOTA0MDYsLjk0NDYsLjkzOCwuOTQ0NiwuOTM4LC45NDQ2LC45MzgsMSwuOTk3OTMsLjkwODM4LC45NDkzOCwuODY4LC45MDMxLC45MjE3OSwuOTQ0NiwxLDEsLjg5NzEzLDEuMTAyMDgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwOTg5LC45MzU4LC45MTk0NSwuODMxODEsLjc1MjYxLC44Nzk5MiwuODI5NzYsLjk2MDM0LC44MzY4OSwuOTcyNjgsMS4wMDc4LC45MDgzOCwuODM2MzcsLjgwMTksLjkwMTU3LC44MDA2MSwuOTQ0NiwuOTU0MDcsLjkyNDM2LDEuMDI1OCwuODUwMjIsLjk3MTUzLDEuMDE1NiwuOTU1NDYsLjg5MTkyLC45MjE3OSwuOTIzNjEsLjg3MTA3LC45NjMxOCwuODk3MTMsLjkzNzA0LC45NTYzOCwuOTE5MDUsLjkxNzA5LC45Mjc5NiwxLjAyNTgsLjkzNzA0LC45NDgzNiwxLjAzNzMsLjk1OTMzLDEuMDA3OCwuOTU4NzEsLjk0ODM2LC45NjE3NCwuOTI2MDEsLjk0OTgsLjk4NjA3LC45NTc3NiwuOTU5MzMsMS4wNTQ1MywxLjAwNzgsLjk4Mjc1LC45MzE0LC45NTYxNywuOTE3MDEsMS4wNTk5MywuOTQ0NiwuNzgzNjcsLjk1NTMsMSwuODY4MzIsMS4wMTI4LC45NTg3MSwuOTkzOTQsLjg3NTQ4LC45NjM2MSwuODY3NzQsMS4wMDc4LC45NTg3MSwuOTQ0NiwuOTU4NzEsLjg2Nzc0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk0MDgzLC45NzU3OSwuOTQwODMsLjk3NTc5LC45NDA4MywuOTc1NzksLjkwNDA2LC45NDAzOSwuOTY2OTQsMSwuODk5MDMsMSwxLDEsLjkzNTgyLC45MzU4MiwuOTM1ODIsMSwuOTA4LC45MDgsLjkxOCwuOTQyMTksLjk0MjE5LC45NjU0NCwxLDEuMjg1LDEsMSwuODEwNzksLjgxMDc5LDEsMSwuNzQ4NTQsMSwxLDEsMSwuOTk3OTMsMSwxLDEsLjY1LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4xNzE3MywxLC44MDUzNSwuNzYxNjksMS4wMjA1OCwxLjA3MzIsMS4wNTQ4NiwxLDEsMS4zMDY5MiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE2MTYxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuTXlyaWFkUHJvQm9sZE1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9O3QuTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnM9WzEuMzY4OTgsMSwxLC42NjIyNywuODA3NzksLjgxNjI1LC45NzI3NiwuOTcyNzYsLjk3NzMzLC45MjIyMiwuODMyNjYsLjk0MjkyLC45NDI5MiwxLjE2MTQ4LDEuMDIwNTgsLjkzNTgyLC45NjY5NCwuOTM1ODIsMS4xNzMzNywuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjc4MDc2LC43ODA3NiwxLjAyMDU4LDEuMDIwNTgsMS4wMjA1OCwuNzE1NDEsLjc2ODEzLC44NTU3NiwuODA1OTEsLjgwNzI5LC45NDI5OSwuNzc1MTIsLjgzNjU1LC44NjUyMywuOTIyMjIsLjk4NjIxLC43MTc0MywuODE2OTgsLjc5NzI2LC45ODU1OCwuOTIyMjIsLjkwNjM3LC44MzgwOSwuOTA2MzcsLjgwNzI5LC43NjQ2MywuODYyNzUsLjkwNjk5LC45MTYwNSwuOTE1NCwuODUzMDgsLjg1NDU4LC45MDUzMSwuOTQyOTIsMS4yMTI5NiwuOTQyOTIsMS4wMjA1OCwuODk5MDMsMS4xODYxNiwuOTk2MTMsLjkxNjc3LC43ODIxNiwuOTE2NzcsLjkwMDgzLC45ODc5NiwuOTEzNSwuOTIxNjgsLjk1MzgxLC45ODk4MSwuOTUyOTgsLjk1MzgxLC45MzQ1OSwuOTIxNjgsLjkxNTEzLC45MjAwNCwuOTE2NzcsLjk1MDc3LC43NDgsMS4wNDUwMiwuOTE2NzcsLjkyMDYxLC45NDIzNiwuODk1NDQsLjg5MzY0LC45LC44MDY4NywuODU3OCwuODA2ODcsMS4wMjA1OCwuODA3NzksLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC44NTc4LC45OTk3MywxLjE4NjE2LC45MTMzOSwxLjA4MDc0LC44Mjg5MSwxLjAyMDU4LC41NTUwOSwuNzE1MjYsLjg5MDIyLDEuMDg1OTUsMSwxLDEuMTg2MTYsMSwuOTY3MzYsLjkzNTgyLDEuMTg2MTYsMSwxLjA0ODY0LC44MjcxMSwuOTkwNDMsLjk5MDQzLC45OTA0MywuNzE1NDEsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg0NSwuODA3MjksLjc3NTEyLC43NzUxMiwuNzc1MTIsLjc3NTEyLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTU5NjEsLjkyMjIyLC45MDYzNywuOTA2MzcsLjkwNjM3LC45MDYzNywuOTA2MzcsMS4wMjA1OCwuOTAyNTEsLjkwNjk5LC45MDY5OSwuOTA2OTksLjkwNjk5LC44NTQ1OCwuODM2NTksLjk0OTUxLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC44NTgxMSwuNzgyMTYsLjkwMDgzLC45MDA4MywuOTAwODMsLjkwMDgzLC45NTM4MSwuOTUzODEsLjk1MzgxLC45NTM4MSwuOTEzNSwuOTIxNjgsLjkxNTEzLC45MTUxMywuOTE1MTMsLjkxNTEzLC45MTUxMywxLjA4NTk1LC45MTY3NywuOTE2NzcsLjkxNjc3LC45MTY3NywuOTE2NzcsLjg5MzY0LC45MjMzMiwuODkzNjQsLjg1NTc2LC45OTYxMywuODU1NzYsLjk5NjEzLC44NTU3NiwuOTk2MTMsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuOTQyOTksLjc2NzgzLC45NTk2MSwuOTE2NzcsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC44NjUyMywuOTEzNSwuODY1MjMsLjkxMzUsLjg2NTIzLC45MTM1LDEsMSwuOTIyMjIsLjkyMTY4LC45MjIyMiwuOTIxNjgsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC44NjAzNiwuOTcwOTYsLjcxNzQzLC45ODk4MSwxLDEsLjk1Mjk4LC43OTcyNiwuOTUzODEsMSwxLC43OTcyNiwuNjg5NCwuNzk3MjYsLjc0MzIxLC44MTY5MSwxLjAwMDYsLjkyMjIyLC45MjE2OCwxLDEsLjkyMjIyLC45MjE2OCwuNzk0NjQsLjkyMDk4LC45MjE2OCwuOTA2MzcsLjkxNTEzLC45MDYzNywuOTE1MTMsLjkwNjM3LC45MTUxMywuOTA5LC44NzUxNCwuODA3MjksLjk1MDc3LDEsMSwuODA3MjksLjk1MDc3LC43NjQ2MywuNzQ4LC43NjQ2MywuNzQ4LDEsMSwuNzY0NjMsLjc0OCwxLDEsLjg2Mjc1LC43MjY1MSwuODYyNzUsMS4wNDUwMiwuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTE1NCwuOTQyMzYsLjg1NDU4LC44OTM2NCwuODU0NTgsLjkwNTMxLC45LC45MDUzMSwuOSwuOTA1MzEsLjksMSwuOTcyNzYsLjg1NTc2LC45OTYxMywuODQ1LC44NTgxMSwuOTAyNTEsLjkxNjc3LDEsMSwuODYyNzUsMS4wNDUwMiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjAwODk5LDEuMzA2MjgsLjg1NTc2LC44MDE3OCwuNjY4NjIsLjc5MjcsLjY5MzIzLC44ODEyNywuNzI0NTksLjg5NzExLC45NTM4MSwuODU1NzYsLjgwNTkxLC43ODA1LC45NDcyOSwuNzc1MTIsLjkwNTMxLC45MjIyMiwuOTA2MzcsLjk4NjIxLC44MTY5OCwuOTI2NTUsLjk4NTU4LC45MjIyMiwuODUzNTksLjkwNjM3LC45MDk3NiwuODM4MDksLjk0NTIzLC44NjI3NSwuODM1MDksLjkzMTU3LC44NTMwOCwuODMzOTIsLjkyMzQ2LC45ODYyMSwuODM1MDksLjkyODg2LC45MTMyNCwuOTIxNjgsLjk1MzgxLC45MDY0NiwuOTI4ODYsLjkwNTU3LC44Njg0NywuOTAyNzYsLjkxMzI0LC44Njg0MiwuOTIxNjgsLjk5NTMxLC45NTM4MSwuOTIyNCwuODU0MDgsLjkyNjk5LC44Njg0NywxLjAwNTEsLjkxNTEzLC44MDQ4NywuOTM0ODEsMSwuODgxNTksMS4wNTIxNCwuOTA2NDYsLjk3MzU1LC44MTUzOSwuODkzOTgsLjg1OTIzLC45NTM4MSwuOTA2NDYsLjkxNTEzLC45MDY0NiwuODU5MjMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTE1NCwuOTQyMzYsLjkxNTQsLjk0MjM2LC45MTU0LC45NDIzNiwuODU0NTgsLjg5MzY0LC45NjY5NCwxLC44OTkwMywxLDEsMSwuOTE3ODIsLjkxNzgyLC45MTc4MiwxLC44OTYsLjg5NiwuODk2LC45MzMyLC45MzMyLC45NTk3MywxLDEuMjYsMSwxLC44MDQ3OSwuODAxNzgsMSwxLC44NTYzMywxLDEsMSwxLC45NzI3NiwxLDEsMSwuNjk4LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4xNDU0MiwxLC43OTE5OSwuNzg2OTQsMS4wMjA1OCwxLjAzNDkzLDEuMDU0ODYsMSwxLDEuMjMwMjYsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4yMDAwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0Lk15cmlhZFByb0JvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfTt0Lk15cmlhZFByb0l0YWxpY0ZhY3RvcnM9WzEuMzY4OTgsMSwxLC42NTUwNywuODQ5NDMsLjg1NjM5LC44ODQ2NSwuODg0NjUsLjg2OTM2LC44ODMwNywuODY5NDgsLjg1MjgzLC44NTI4MywxLjA2MzgzLDEuMDIwNTgsLjc1OTQ1LC45MjE5LC43NTk0NSwxLjE3MzM3LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuNzU5NDUsLjc1OTQ1LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC42OTA0NiwuNzA5MjYsLjg1MTU4LC43NzgxMiwuNzY4NTIsLjg5NTkxLC43MDQ2NiwuNzYxMjUsLjgwMDk0LC44NjgyMiwuODM4NjQsLjcyOCwuNzcyMTIsLjc5NDc1LC45MzYzNywuODc1MTQsLjg1ODgsLjc2MDEzLC44NTg4LC43MjQyMSwuNjk4NjYsLjc3NTk4LC44NTk5MSwuODA4MTEsLjg3ODMyLC43ODExMiwuNzc1MTIsLjg1NjIsMS4wMjIyLDEuMTg0MTcsMS4wMjIyLDEuMjcwMTQsLjg5OTAzLDEuMTUwMTIsLjkzODU5LC45NDM5OSwuODQ2LC45NDM5OSwuODE0NTMsMS4wMTg2LC45NDIxOSwuOTYwMTcsMS4wMzA3NSwxLjAyMTc1LC45MTIsMS4wMzA3NSwuOTY5OTgsLjk2MDE3LC45Mzg1OSwuOTQzOTksLjk0Mzk5LC45NTQ5MywuNzQ2LDEuMTI2NTgsLjk0NTc4LC45MSwuOTc5LC44ODIsLjg4MiwuODMsLjg1MDM0LC44MzUzNywuODUwMzQsMS4wMjA1OCwuNzA4NjksLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44MzUzNywuOTAwODMsMS4xNTAxMiwuOTE2MSwuOTQ1NjUsLjczNTQxLDEuMDIwNTgsLjUzNjA5LC42OTM1MywuNzk1MTksMS4wODU5NSwxLDEsMS4xNTAxMiwxLC45MTk3NCwuNzU5NDUsMS4xNTAxMiwxLC45NDQ2LC43MzM2MSwuOTAwNSwuOTAwNSwuOTAwNSwuNjI4NjQsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjc3MywuNzY4NTIsLjcwNDY2LC43MDQ2NiwuNzA0NjYsLjcwNDY2LC44Mzg2NCwuODM4NjQsLjgzODY0LC44Mzg2NCwuOTA1NjEsLjg3NTE0LC44NTg4LC44NTg4LC44NTg4LC44NTg4LC44NTg4LDEuMDIwNTgsLjg1NzUxLC44NTk5MSwuODU5OTEsLjg1OTkxLC44NTk5MSwuNzc1MTIsLjc2MDEzLC44ODA3NSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuODA3NSwuODQ2LC44MTQ1MywuODE0NTMsLjgxNDUzLC44MTQ1MywuODI0MjQsLjgyNDI0LC44MjQyNCwuODI0MjQsLjkyNzgsLjk2MDE3LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksMS4wODU5NSwuODU2MiwuOTQ1NzgsLjk0NTc4LC45NDU3OCwuOTQ1NzgsLjg4MiwuOTQ1NzgsLjg4MiwuODUxNTgsLjkzODU5LC44NTE1OCwuOTM4NTksLjg1MTU4LC45Mzg1OSwuNzY4NTIsLjg0NiwuNzY4NTIsLjg0NiwuNzY4NTIsLjg0NiwuNzY4NTIsLjg0NiwuODk1OTEsLjg1NDQsLjkwNTYxLC45NDM5OSwuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjgwMDk0LC45NDIxOSwuODAwOTQsLjk0MjE5LC44MDA5NCwuOTQyMTksMSwxLC44NjgyMiwuOTYwMTcsLjg2ODIyLC45NjAxNywuODM4NjQsLjgyNDI0LC44Mzg2NCwuODI0MjQsLjgzODY0LC44MjQyNCwuODM4NjQsMS4wMzA3NSwuODM4NjQsLjgyNDI0LC44MTQwMiwxLjAyNzM4LC43MjgsMS4wMjE3NSwxLDEsLjkxMiwuNzk0NzUsMS4wMzA3NSwxLDEsLjc5NDc1LC44MzkxMSwuNzk0NzUsLjY2MjY2LC44MDU1MywxLjA2Njc2LC44NzUxNCwuOTYwMTcsMSwxLC44NzUxNCwuOTYwMTcsLjg2ODY1LC44NzM5NiwuOTYwMTcsLjg1ODgsLjkzODU5LC44NTg4LC45Mzg1OSwuODU4OCwuOTM4NTksLjg2NywuODQ3NTksLjcyNDIxLC45NTQ5MywxLDEsLjcyNDIxLC45NTQ5MywuNjk4NjYsLjc0NiwuNjk4NjYsLjc0NiwxLDEsLjY5ODY2LC43NDYsMSwxLC43NzU5OCwuODg0MTcsLjc3NTk4LDEuMTI2NTgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg3ODMyLC45NzksLjc3NTEyLC44ODIsLjc3NTEyLC44NTYyLC44MywuODU2MiwuODMsLjg1NjIsLjgzLDEsLjg4NDY1LC44NTE1OCwuOTM4NTksLjc3MywuODA3NSwuODU3NTEsLjg1NjIsMSwxLC43NzU5OCwxLjEyNjU4LDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MzEzLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMDgxMDYsMS4wMzkwMSwuODUxNTgsLjc3MDI1LC42MjI2NCwuNzY0NiwuNjUzNTEsLjg2MDI2LC42OTQ2MSwuODk5NDcsMS4wMzA3NSwuODUxNTgsLjc3ODEyLC43NjQ0OSwuODg4MzYsLjcwNDY2LC44NTYyLC44NjgyMiwuODU4OCwuODM4NjQsLjc3MjEyLC44NTMwOCwuOTM2MzcsLjg3NTE0LC44MjM1MiwuODU4OCwuODU3MDEsLjc2MDEzLC44OTA1OCwuNzc1OTgsLjgxNTYsLjgyNTY1LC43ODExMiwuNzc4OTksLjg5Mzg2LC44Mzg2NCwuODE1NiwuOTQ4NiwuOTIzODgsLjk2MTg2LDEuMDMwNzUsLjkxMTIzLC45NDg2LC45MzI5OCwuODc4LC45Mzk0MiwuOTIzODgsLjg0NTk2LC45NjE4NiwuOTUxMTksMS4wMzA3NSwuOTIyLC44ODc4NywuOTU4MjksLjg4LC45MzU1OSwuOTM4NTksLjc4ODE1LC45Mzc1OCwxLC44OTIxNywxLjAzNzM3LC45MTEyMywuOTM5NjksLjc3NDg3LC44NTc2OSwuODY3OTksMS4wMzA3NSwuOTExMjMsLjkzODU5LC45MTEyMywuODY3OTksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODc4MzIsLjk3OSwuODc4MzIsLjk3OSwuODc4MzIsLjk3OSwuNzc1MTIsLjg4MiwuOTIxOSwxLC44OTkwMywxLDEsMSwuODczMjEsLjg3MzIxLC44NzMyMSwxLDEuMDI3LDEuMDI3LDEuMDI3LC44Njg0NywuODY4NDcsLjc5MTIxLDEsMS4xMjQsMSwxLC43MzU3MiwuNzM1NzIsMSwxLC44NTAzNCwxLDEsMSwxLC44ODQ2NSwxLDEsMSwuNjY5LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNDgyOCwxLC43NDk0OCwuNzUxODcsMS4wMjA1OCwuOTgzOTEsMS4wMjExOSwxLDEsMS4wNjIzMywxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA1MjMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuTXlyaWFkUHJvSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn07dC5NeXJpYWRQcm9SZWd1bGFyRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjc2MzA1LC44Mjc4NCwuOTQ5MzUsLjg5MzY0LC45MjI0MSwuODkwNzMsLjkwNzA2LC45ODQ3MiwuODUyODMsLjg1MjgzLDEuMDY2NCwxLjAyMDU4LC43NDUwNSwuOTIxOSwuNzQ1MDUsMS4yMzQ1NiwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjc0NTA1LC43NDUwNSwxLjAyMDU4LDEuMDIwNTgsMS4wMjA1OCwuNzMwMDIsLjcyNjAxLC45MTc1NSwuODEyNiwuODAzMTQsLjkyMjIyLC43Mzc2NCwuNzk3MjYsLjgzMDUxLC45MDI4NCwuODYwMjMsLjc0LC44MTI2LC44NDg2OSwuOTY1MTgsLjkxMTE1LC44ODU4LC43OTc2MSwuODg1OCwuNzQ0OTgsLjczOTE0LC44MTM2MywuODk1OTEsLjgzNjU5LC44OTYzMywuODU2MDgsLjgxMTEsLjkwNTMxLDEuMDIyMiwxLjIyNzM2LDEuMDIyMiwxLjI3MDE0LC44OTkwMywuOTAwODgsLjg2NjY3LDEuMDIzMSwuODk2LDEuMDE0MTEsLjkwMDgzLDEuMDUwOTksMS4wMDUxMiwuOTk3OTMsMS4wNTMyNiwxLjA5Mzc3LC45MzgsMS4wNjIyNiwxLjAwMTE5LC45OTc5MywuOTg3MTQsMS4wMjMxLDEuMDEyMzEsLjk4MTk2LC43OTIsMS4xOTEzNywuOTkwNzQsLjk2MiwxLjAxOTE1LC45MjYsLjk0MiwuODU2LC44NTAzNCwuOTIwMDYsLjg1MDM0LDEuMDIwNTgsLjY5MDY3LC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIwMDYsLjkzMzIsLjkwMDg4LC45MTg4MiwuOTM0ODQsLjc1MzM5LDEuMDIwNTgsLjU2ODY2LC41NDMyNCwuNzk1MTksMS4wODU5NSwxLDEsLjkwMDg4LDEsLjk1MzI1LC43NDUwNSwuOTAwODgsMSwuOTcxOTgsLjc1MzM5LC45MTAwOSwuOTEwMDksLjkxMDA5LC42NjQ2NiwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuNzg4LC44MDMxNCwuNzM3NjQsLjczNzY0LC43Mzc2NCwuNzM3NjQsLjg2MDIzLC44NjAyMywuODYwMjMsLjg2MDIzLC45MjkxNSwuOTExMTUsLjg4NTgsLjg4NTgsLjg4NTgsLjg4NTgsLjg4NTgsMS4wMjA1OCwuODg1OCwuODk1OTEsLjg5NTkxLC44OTU5MSwuODk1OTEsLjgxMTEsLjc5NjExLC44OTcxMywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY5MzYsLjg5NiwuOTAwODMsLjkwMDgzLC45MDA4MywuOTAwODMsLjg0MjI0LC44NDIyNCwuODQyMjQsLjg0MjI0LC45NzI3NiwuOTk3OTMsLjk4NzE0LC45ODcxNCwuOTg3MTQsLjk4NzE0LC45ODcxNCwxLjA4NTk1LC44OTg3NiwuOTkwNzQsLjk5MDc0LC45OTA3NCwuOTkwNzQsLjk0MiwxLjAyMzEsLjk0MiwuOTE3NTUsLjg2NjY3LC45MTc1NSwuODY2NjcsLjkxNzU1LC44NjY2NywuODAzMTQsLjg5NiwuODAzMTQsLjg5NiwuODAzMTQsLjg5NiwuODAzMTQsLjg5NiwuOTIyMjIsLjkzMzcyLC45MjkxNSwxLjAxNDExLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuODMwNTEsMS4wMDUxMiwuODMwNTEsMS4wMDUxMiwuODMwNTEsMS4wMDUxMiwxLDEsLjkwMjg0LC45OTc5MywuOTA5NzYsLjk5NzkzLC44NjAyMywuODQyMjQsLjg2MDIzLC44NDIyNCwuODYwMjMsLjg0MjI0LC44NjAyMywxLjA1MzI2LC44NjAyMywuODQyMjQsLjgyODczLDEuMDc0NjksLjc0LDEuMDkzNzcsMSwxLC45MzgsLjg0ODY5LDEuMDYyMjYsMSwxLC44NDg2OSwuODM3MDQsLjg0ODY5LC44MTQ0MSwuODU1ODgsMS4wODkyNywuOTExMTUsLjk5NzkzLDEsMSwuOTExMTUsLjk5NzkzLC45MTg4NywuOTA5OTEsLjk5NzkzLC44ODU4LC45ODcxNCwuODg1OCwuOTg3MTQsLjg4NTgsLjk4NzE0LC44OTQsLjkxNDM0LC43NDQ5OCwuOTgxOTYsMSwxLC43NDQ5OCwuOTgxOTYsLjczOTE0LC43OTIsLjczOTE0LC43OTIsMSwxLC43MzkxNCwuNzkyLDEsMSwuODEzNjMsLjkwNCwuODEzNjMsMS4xOTEzNywuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk2MzMsMS4wMTkxNSwuODExMSwuOTQyLC44MTExLC45MDUzMSwuODU2LC45MDUzMSwuODU2LC45MDUzMSwuODU2LDEsLjkyMjQxLC45MTc1NSwuODY2NjcsLjc4OCwuODY5MzYsLjg4NTgsLjg5ODc2LDEsMSwuODEzNjMsMS4xOTEzNywuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAzODgsMS4wMzkwMSwuOTIxMzgsLjc4MTA1LC43MTU0LC44NjE2OSwuODA1MTMsLjk0MDA3LC44MjUyOCwuOTg2MTIsMS4wNjIyNiwuOTE3NTUsLjgxMjYsLjgxODg0LC45MjgxOSwuNzM3NjQsLjkwNTMxLC45MDI4NCwuODg1OCwuODYwMjMsLjgxMjYsLjkxMTcyLC45NjUxOCwuOTExMTUsLjgzMDg5LC44ODU4LC44Nzc5MSwuNzk3NjEsLjg5Mjk3LC44MTM2MywuODgxNTcsLjg5OTkyLC44NTYwOCwuODE5OTIsLjk0MzA3LC44NjAyMywuODgxNTcsLjk1MzA4LC45ODY5OSwuOTk3OTMsMS4wNjIyNiwuOTU4MTcsLjk1MzA4LC45NzM1OCwuOTI4LC45ODA4OCwuOTg2OTksLjkyNzYxLC45OTc5MywuOTYwMTcsMS4wNjIyNiwuOTg2LC45NDQsLjk1OTc4LC45MzgsLjk2NzA1LC45ODcxNCwuODA0NDIsLjk4OTcyLDEsLjg5NzYyLDEuMDQ1NTIsLjk1ODE3LC45OTAwNywuODcwNjQsLjkxODc5LC44ODg4OCwxLjA2MjI2LC45NTgxNywuOTg3MTQsLjk1ODE3LC44ODg4OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44OTYzMywxLjAxOTE1LC44OTYzMywxLjAxOTE1LC44OTYzMywxLjAxOTE1LC44MTExLC45NDIsLjkyMTksMSwuODk5MDMsMSwxLDEsLjkzMTczLC45MzE3MywuOTMxNzMsMSwxLjA2MzA0LDEuMDYzMDQsMS4wNjkwNCwuODk5MDMsLjg5OTAzLC44MDU0OSwxLDEuMTU2LDEsMSwuNzY1NzUsLjc2NTc1LDEsMSwuNzI0NTgsMSwxLDEsMSwuOTIyNDEsMSwxLDEsLjYxOSwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDcyNTcsMSwuNzQ3MDUsLjcxMTE5LDEuMDIwNTgsMS4wMjQsMS4wMjExOSwxLDEsMS4xNTM2LDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU2MzgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5NeXJpYWRQcm9SZWd1bGFyTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzPXQuU2Vnb2V1aVJlZ3VsYXJGYWN0b3JzPXQuU2Vnb2V1aUl0YWxpY01ldHJpY3M9dC5TZWdvZXVpSXRhbGljRmFjdG9ycz10LlNlZ29ldWlCb2xkTWV0cmljcz10LlNlZ29ldWlCb2xkSXRhbGljTWV0cmljcz10LlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycz10LlNlZ29ldWlCb2xkRmFjdG9ycz12b2lkIDA7dC5TZWdvZXVpQm9sZEZhY3RvcnM9WzEuNzY3MzgsMSwxLC45OTI5NywuOTgyNCwxLjA0MDE2LDEuMDY0OTcsMS4wMzQyNCwuOTc1MjksMS4xNzY0NywxLjIzMjAzLDEuMTA4NSwxLjEwODUsMS4xNjkzOSwxLjIxMDcsLjk3NTQsMS4yMTQwOCwuOTc1NCwxLjU5NTc4LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsLjgxMzc4LC44MTM3OCwxLjIxMDcsMS4yMTA3LDEuMjEwNywuNzE3MDMsLjk3ODQ3LC45NzM2MywuODg3NzYsLjg2NDEsMS4wMjA5NiwuNzk3OTUsLjg1MTMyLC45MTQsMS4wNjA4NSwxLjE0MDYsLjgwMDcsLjg5ODU4LC44MzY5MywxLjE0ODg5LDEuMDkzOTgsLjk3NDg5LC45MjA5NCwuOTc0ODksLjkwMzk5LC44NDA0MSwuOTU5MjMsMS4wMDEzNSwxLDEuMDY0NjcsLjk4MjQzLC45MDk5NiwuOTkzNjEsMS4xMDg1LDEuNTY5NDIsMS4xMDg1LDEuMjEwNywuNzQ2MjcsLjk0MjgyLC45Njc1MiwxLjAxNTE5LC44NjMwNCwxLjAxMzU5LC45NzI3OCwxLjE1MTAzLDEuMDEzNTksLjk4NTYxLDEuMDIyODUsMS4wMjI4NSwxLjAwNTI3LDEuMDIyODUsMS4wMzAyLC45OTA0MSwxLjAwMDgsMS4wMTUxOSwxLjAxMzU5LDEuMDIyNTgsLjc5MTA0LDEuMTY4NjIsLjk5MDQxLC45NzQ1NCwxLjAyNTExLC45OTI5OCwuOTY3NTIsLjk1ODAxLC45NDg1NiwxLjE2NTc5LC45NDg1NiwxLjIxMDcsLjk4MjQsMS4wMzQyNCwxLjAzNDI0LDEsMS4wMzQyNCwxLjE2NTc5LC44NzI3LDEuMzg3MSwxLjE4NjIyLDEuMTA4MTgsMS4wNDQ3OCwxLjIxMDcsMS4xODYyMiwuNzUxNTUsLjk0OTk0LDEuMjg4MjYsMS4yMTQwOCwxLjIxNDA4LC45MTA1NiwxLC45MTU3MiwuOTc1NCwuNjQ2NjMsMS4xODMyOCwxLjI0ODY2LDEuMDQ0NzgsMS4xNDE2OSwxLjE1NzQ5LDEuMTczODksLjcxNzAzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45MzUwNiwuODY0MSwuNzk3OTUsLjc5Nzk1LC43OTc5NSwuNzk3OTUsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMDIwOTYsMS4wOTM5OCwuOTc0MjYsLjk3NDI2LC45NzQyNiwuOTc0MjYsLjk3NDI2LDEuMjEwNywuOTc0ODksMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwuOTA5OTYsLjkyMDk0LDEuMDI3OTgsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjkzMTM2LC44NjMwNCwuOTcyNzgsLjk3Mjc4LC45NzI3OCwuOTcyNzgsMS4wMjI4NSwxLjAyMjg1LDEuMDIyODUsMS4wMjI4NSwuOTcxMjIsLjk5MDQxLDEsMSwxLDEsMSwxLjI4ODI2LDEuMDAwOCwuOTkwNDEsLjk5MDQxLC45OTA0MSwuOTkwNDEsLjk2NzUyLDEuMDE1MTksLjk2NzUyLC45NzM2MywuOTY3NTIsLjk3MzYzLC45Njc1MiwuOTczNjMsLjk2NzUyLC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwxLjAyMDk2LDEuMDMwNTcsMS4wMjA5NiwxLjAzNTE3LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuOTE0LDEuMDEzNTksLjkxNCwxLjAxMzU5LC45MTQsMS4wMTM1OSwxLDEsMS4wNjA4NSwuOTg1NjEsMS4wNjA4NSwxLjAwODc5LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LC45NzEzOCwxLjA4NjkyLC44MDA3LDEuMDIyODUsMSwxLDEuMDA1MjcsLjgzNjkzLDEuMDIyODUsMSwxLC44MzY5MywuOTQ1NSwuODM2OTMsLjkwNDE4LC44MzY5MywxLjEzMDA1LDEuMDkzOTgsLjk5MDQxLDEsMSwxLjA5Mzk4LC45OTA0MSwuOTY2OTIsMS4wOTI1MSwuOTkwNDEsLjk3NDg5LDEuMDAwOCwuOTc0ODksMS4wMDA4LC45NzQ4OSwxLjAwMDgsLjkzOTk0LC45NzkzMSwuOTAzOTksMS4wMjI1OCwxLDEsLjkwMzk5LDEuMDIyNTgsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwxLDEsLjk1OTIzLDEuMDcwMzQsLjk1OTIzLDEuMTY4NjIsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wNjQ2NywxLjAyNTExLC45MDk5NiwuOTY3NTIsLjkwOTk2LC45OTM2MSwuOTU4MDEsLjk5MzYxLC45NTgwMSwuOTkzNjEsLjk1ODAxLDEuMDc3MzMsMS4wMzQyNCwuOTczNjMsLjk2NzUyLC45MzUwNiwuOTMxMzYsLjk3NDg5LDEuMDAwOCwxLDEsLjk1OTIzLDEuMTY4NjIsMS4xNTEwMywxLjE1MTAzLDEuMDExNzMsMS4wMzk1OSwuNzU5NTMsLjgxMzc4LC43OTkxMiwxLjE1MTAzLDEuMjE5OTQsLjk1MTYxLC44NzgxNSwxLjAxMTQ5LC44MTUyNSwuNzY3NiwuOTgxNjcsMS4wMTEzNCwxLjAyNTQ2LC44NDA5NywxLjAzMDg5LDEuMTgxMDIsLjk3MzYzLC44ODc3NiwuODUxMzQsLjk3ODI2LC43OTc5NSwuOTkzNjEsMS4wNjA4NSwuOTc0ODksMS4xNDA2LC44OTg1OCwxLjAzODgsMS4xNDg4OSwxLjA5Mzk4LC44NjAzOSwuOTc0ODksMS4wNTk1LC45MjA5NCwuOTQ3OTMsLjk1OTIzLC45MDk5NiwuOTkzNDYsLjk4MjQzLDEuMDIxMTIsLjk1NDkzLDEuMTQwNiwuOTA5OTYsMS4wMzU3NCwxLjAyNTk3LDEuMDAwOCwxLjE4MTAyLDEuMDY2MjgsMS4wMzU3NCwxLjAxOTIsMS4wMTkzMiwxLjAwODg2LC45NzUzMSwxLjAxMDYsMS4wMDA4LDEuMTMxODksMS4xODEwMiwxLjAyMjc3LC45ODY4MywxLjAwMTYsLjk5NTYxLDEuMDcyMzcsMS4wMDA4LC45MDQzNCwuOTk5MjEsLjkzODAzLC44OTY1LDEuMjMwODUsMS4wNjYyOCwxLjA0OTgzLC45NjI2OCwxLjA0OTksLjk4NDM5LDEuMTgxMDIsMS4wNjYyOCwxLjAwMDgsMS4wNjYyOCwuOTg0MzksLjc5Nzk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDk0NjYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk3Mjc4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDIwNjUsMSwxLDEsMSwxLDEsMS4wNjQ2NywxLjAyNTExLDEuMDY0NjcsMS4wMjUxMSwxLjA2NDY3LDEuMDI1MTEsLjkwOTk2LC45Njc1MiwxLDEuMjE0MDgsLjg5OTAzLDEsMSwuNzUxNTUsMS4wNDM5NCwxLjA0Mzk0LDEuMDQzOTQsMS4wNDM5NCwuOTg2MzMsLjk4NjMzLC45ODYzMywuNzMwNDcsLjczMDQ3LDEuMjA2NDIsLjkxMjExLDEuMjU2MzUsMS4yMjIsMS4wMjk1NiwxLjAzMzcyLDEuMDMzNzIsLjk2MDM5LDEuMjQ2MzMsMSwxLjEyNDU0LC45MzUwMywxLjAzNDI0LDEuMTk2ODcsMS4wMzQyNCwxLDEsMSwuNzcxLDEsMSwxLjE1NzQ5LDEuMTU3NDksMS4xNTc0OSwxLjEwOTQ4LC44NjI3OSwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYxODIsMSwxLDEuMTY4OTcsMSwuOTYwODUsLjkwMTM3LDEuMjEwNywxLjE4NDE2LDEuMTM5NzMsLjY5ODI1LC45NzE2LDIuMTAzMzksMS4yOTAwNCwxLjI5MDA0LDEuMjExNzIsMS4yOTAwNCwxLjI5MDA0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xODg3NCwxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMDkxOTMsMS4wOTE5MywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5TZWdvZXVpQm9sZE1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9O3QuU2Vnb2V1aUJvbGRJdGFsaWNGYWN0b3JzPVsxLjc2NzM4LDEsMSwuOTg5NDYsMS4wMzk1OSwxLjA0MDE2LDEuMDI4MDksMS4wMzYsLjk3NjM5LDEuMTA5NTMsMS4yMzIwMywxLjExMTQ0LDEuMTExNDQsMS4xNjkzOSwxLjIxMjM3LC45NzU0LDEuMjEyNjEsLjk3NTQsMS41OTc1NCwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwuODEzNzgsLjgxMzc4LDEuMjEyMzcsMS4yMTIzNywxLjIxMjM3LC43MzU0MSwuOTc4NDcsLjk3MzYzLC44OTcyMywuODc4OTcsMS4wNDI2LC43OTQyOSwuODUyOTIsLjkxMTQ5LDEuMDU4MTUsMS4xNDA2LC43OTYzMSwuOTAxMjgsLjgzODUzLDEuMDQzOTYsMS4xMDYxNSwuOTc1NTIsLjk0NDM2LC45NzU1MiwuODg2NDEsLjgwNTI3LC45NjA4MywxLjAwMTM1LDEsMS4wNjc3NywuOTgxNywuOTExNDIsLjk5MzYxLDEuMTExNDQsMS41NzI5MywxLjExMTQ0LDEuMjEyMzcsLjc0NjI3LDEuMzE4MTgsMS4wNjU4NSwuOTcwNDIsLjgzMDU1LC45NzA0MiwuOTM1MDMsMS4xMjYxLC45NzA0MiwuOTc5MjIsMS4xNDIzNiwuOTQ1NTIsMS4wMTA1NCwxLjE0MjM2LDEuMDI0NzEsLjk3OTIyLC45NDE2NSwuOTcwNDIsLjk3MDQyLDEuMDI3NiwuNzg5MjksMS4xMjYxLC45NzkyMiwuOTU4NzQsMS4wMjE5NywuOTg1MDcsLjk2NzUyLC45NzE2OCwuOTUxMDcsMS4xNjU3OSwuOTUxMDcsMS4yMTIzNywxLjAzOTU5LDEuMDM2LDEuMDM2LDEsMS4wMzYsMS4xNjU3OSwuODczNTcsMS4zMTgxOCwxLjE4NzU0LDEuMjY3ODEsMS4wNTM1NiwxLjIxMjM3LDEuMTg2MjIsLjc5NDg3LC45NDk5NCwxLjI5MDA0LDEuMjQwNDcsMS4yNDA0NywxLjMxODE4LDEsLjkxNDg0LC45NzU0LDEuMzE4MTgsMS4xMzQ5LDEuMjQ4NjYsMS4wNTM1NiwxLjEzOTM0LDEuMTU1NzQsMS4xNzM4OSwuNzM1NDEsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk0Mzg1LC44Nzg5NywuNzk0MjksLjc5NDI5LC43OTQyOSwuNzk0MjksMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMDQyNiwxLjEwNjE1LC45NzU1MiwuOTc1NTIsLjk3NTUyLC45NzU1MiwuOTc1NTIsMS4yMTIzNywuOTc1NTIsMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwuOTExNDIsLjk0NDM2LC45ODcyMSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwuOTY3MDUsLjgzMDU1LC45MzUwMywuOTM1MDMsLjkzNTAzLC45MzUwMywxLjE0MjM2LDEuMTQyMzYsMS4xNDIzNiwxLjE0MjM2LC45MzEyNSwuOTc5MjIsLjk0MTY1LC45NDE2NSwuOTQxNjUsLjk0MTY1LC45NDE2NSwxLjI5MDA0LC45NDE2NSwuOTc5MjIsLjk3OTIyLC45NzkyMiwuOTc5MjIsLjk2NzUyLC45NzA0MiwuOTY3NTIsLjk3MzYzLDEuMDY1ODUsLjk3MzYzLDEuMDY1ODUsLjk3MzYzLDEuMDY1ODUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwxLjA0MjYsMS4wMDMzLDEuMDQyNiwuOTcwNDIsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC45MTE0OSwuOTcwNDIsLjkxMTQ5LC45NzA0MiwuOTExNDksLjk3MDQyLDEsMSwxLjA1ODE1LC45NzkyMiwxLjA1ODE1LC45NzkyMiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwuOTc0NDEsMS4wNDMwMiwuNzk2MzEsMS4wMTU4MiwxLDEsMS4wMTA1NCwuODM4NTMsMS4xNDIzNiwxLDEsLjgzODUzLDEuMDkxMjUsLjgzODUzLC45MDQxOCwuODM4NTMsMS4xOTUwOCwxLjEwNjE1LC45NzkyMiwxLDEsMS4xMDYxNSwuOTc5MjIsMS4wMTAzNCwxLjEwNDY2LC45NzkyMiwuOTc1NTIsLjk0MTY1LC45NzU1MiwuOTQxNjUsLjk3NTUyLC45NDE2NSwuOTE2MDIsLjkxOTgxLC44ODY0MSwxLjAyNzYsMSwxLC44ODY0MSwxLjAyNzYsLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwxLDEsLjk2MDgzLDEuMDU0MDMsLjk1OTIzLDEuMTY4NjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wNjc3NywxLjAyMTk3LC45MTE0MiwuOTY3NTIsLjkxMTQyLC45OTM2MSwuOTcxNjgsLjk5MzYxLC45NzE2OCwuOTkzNjEsLjk3MTY4LDEuMjMxOTksMS4wMzYsLjk3MzYzLDEuMDY1ODUsLjk0Mzg1LC45NjcwNSwuOTc1NTIsLjk0MTY1LDEsMSwuOTYwODMsMS4xMjYxLDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LC45NTE2MSwxLjI3MTI2LDEuMDA4MTEsLjgzMjg0LC43NzcwMiwuOTkxMzcsLjk1MjUzLDEuMDM0NywuODYxNDIsMS4wNzIwNSwxLjE0MjM2LC45NzM2MywuODk3MjMsLjg2ODY5LDEuMDk4MTgsLjc5NDI5LC45OTM2MSwxLjA1ODE1LC45NzU1MiwxLjE0MDYsLjkwMTI4LDEuMDY2NjIsMS4wNDM5NiwxLjEwNjE1LC44NDkxOCwuOTc1NTIsMS4wNDY5NCwuOTQ0MzYsLjk4MDE1LC45NjA4MywuOTExNDIsMS4wMDM1NiwuOTgxNywxLjAxOTQ1LC45ODk5OSwxLjE0MDYsLjkxMTQyLDEuMDQ5NjEsLjk4OTgsMS4wMDYzOSwxLjE0MjM2LDEuMDc1MTQsMS4wNDk2MSwuOTk2MDcsMS4wMjg5NywxLjAwOCwuOTg5OCwuOTUxMzQsMS4wMDYzOSwxLjExMTIxLDEuMTQyMzYsMS4wMDUxOCwuOTc5ODEsMS4wMjE4NiwxLDEuMDg1NzgsLjk0MTY1LC45OTMxNCwuOTgzODcsLjkzMDI4LC45MzM3NywxLjM1MTI1LDEuMDc1MTQsMS4xMDY4NywuOTM0OTEsMS4wNDIzMiwxLjAwMzUxLDEuMTQyMzYsMS4wNzUxNCwuOTQxNjUsMS4wNzUxNCwxLjAwMzUxLC43OTQyOSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA5MDk3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MzUwMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTY2MDksMSwxLDEsMSwxLDEsMS4wNjc3NywxLjAyMTk3LDEuMDY3NzcsMS4wMjE5NywxLjA2Nzc3LDEuMDIxOTcsLjkxMTQyLC45Njc1MiwxLDEuMjEyNjEsLjg5OTAzLDEsMSwuNzUxNTUsMS4wNDc0NSwxLjA0NzQ1LDEuMDQ3NDUsMS4wNDM5NCwuOTg2MzMsLjk4NjMzLC45ODYzMywuNzI5NTksLjcyOTU5LDEuMjA1MDIsLjkxNDA2LDEuMjY1MTQsMS4yMjIsMS4wMjk1NiwxLjAzMzcyLDEuMDMzNzIsLjk2MDM5LDEuMjQ2MzMsMSwxLjA5MTI1LC45MzMyNywxLjAzMzM2LDEuMTY1NDEsMS4wMzYsMSwxLDEsLjc3MSwxLDEsMS4xNTU3NCwxLjE1NTc0LDEuMTU1NzQsMS4xNTU3NCwuODYzNjQsLjk0NDM0LC44NjI3OSwuOTQ0MzQsLjg2MjI0LDEsMSwxLjE2Nzk4LDEsLjk2MDg1LC45MDA2OCwxLjIxMjM3LDEuMTg0MTYsMS4xMzkwNCwuNjk4MjUsLjk3MTYsMi4xMDMzOSwxLjI5MDA0LDEuMjkwMDQsMS4yMTMzOSwxLjI5MDA0LDEuMjkwMDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE4Nzc1LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4xMzI2OSwxLjEzMjY5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LlNlZ29ldWlCb2xkSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH07dC5TZWdvZXVpSXRhbGljRmFjdG9ycz1bMS43NjczOCwxLDEsLjk4OTQ2LDEuMTQ3NjMsMS4wNTM2NSwxLjA2MjM0LC45NjkyNywuOTI1ODYsMS4xNTM3MywxLjE4NDE0LC45MTM0OSwuOTEzNDksMS4wNzQwMywxLjE3MzA4LC43ODM4MywxLjIwMDg4LC43ODM4MywxLjQyNTMxLC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuNzgzODMsLjc4MzgzLDEuMTczMDgsMS4xNzMwOCwxLjE3MzA4LC43NzM0OSwuOTQ1NjUsLjk0NzI5LC44NTk0NCwuODg1MDYsLjk4NTgsLjc0ODE3LC44MDAxNiwuODg0NDksLjk4MDM5LC45NTc4MiwuNjkyMzgsLjg5ODk4LC44MzIzMSwuOTgxODMsMS4wMzk4OSwuOTY5MjQsLjg2MjM3LC45NjkyNCwuODA1OTUsLjc0NTI0LC44NjA5MSwuOTU0MDIsLjk0MTQzLC45ODQ0OCwuODg1OCwuODMwODksLjkzMjg1LDEuMDk0OSwxLjM5MDE2LDEuMDk0OSwxLjQ1OTk0LC43NDYyNywxLjA0ODM5LC45NzQ1NCwuOTc0NTQsLjg3MjA3LC45NzQ1NCwuODc1MzMsMS4wNjE1MSwuOTc0NTQsMS4wMDE3NiwxLjE2NDg0LDEuMDgxMzIsLjk4MDQ3LDEuMTY0ODQsMS4wMjk4OSwxLjAxMDU0LC45NjIyNSwuOTc0NTQsLjk3NDU0LDEuMDY1OTgsLjc5MDA0LDEuMTYzNDQsMS4wMDM1MSwuOTQ2MjksLjk5NzMsLjkxMDE2LC45Njc3NywuOTA0MywuOTEwODIsLjkyNDgxLC45MTA4MiwxLjE3MzA4LC45NTc0OCwuOTY5MjcsLjk2OTI3LDEsLjk2OTI3LC45MjQ4MSwuODA1OTcsMS4wNDgzOSwxLjIzMzkzLDEuMTc4MSwuOTI0NSwxLjE3MzA4LDEuMjA4MDgsLjYzMjE4LC45NDI2MSwxLjI0ODIyLDEuMDk5NzEsMS4wOTk3MSwxLjA0ODM5LDEsLjg1MjczLC43ODAzMiwxLjA0ODM5LDEuMDk5NzEsMS4yMjMyNiwuOTI0NSwxLjA5ODM2LDEuMTM1MjUsMS4xNTIyMiwuNzA0MjQsLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjg1NDk4LC44ODUwNiwuNzQ4MTcsLjc0ODE3LC43NDgxNywuNzQ4MTcsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk1NzgyLC45ODU4LDEuMDM5ODksLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwxLjE3MzA4LC45NjkyNCwuOTU0MDIsLjk1NDAyLC45NTQwMiwuOTU0MDIsLjgzMDg5LC44NjIzNywuODg0MDksLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjkyOTE2LC44NzIwNywuODc1MzMsLjg3NTMzLC44NzUzMywuODc1MzMsLjkzMTQ2LC45MzE0NiwuOTMxNDYsLjkzMTQ2LC45Mzg1NCwxLjAxMDU0LC45NjIyNSwuOTYyMjUsLjk2MjI1LC45NjIyNSwuOTYyMjUsMS4yNDgyMiwuODc2MSwxLjAwMzUxLDEuMDAzNTEsMS4wMDM1MSwxLjAwMzUxLC45Njc3NywuOTc0NTQsLjk2Nzc3LC45NDcyOSwuOTc0NTQsLjk0NzI5LC45NzQ1NCwuOTQ3MjksLjk3NDU0LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjk4NTgsLjk1MzkxLC45ODU4LC45NzQ1NCwuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjg4NDQ5LC45NzQ1NCwuODg0NDksLjk3NDU0LC44ODQ0OSwuOTc0NTQsMSwxLC45ODAzOSwxLjAwMTc2LC45ODAzOSwxLjAwMTc2LC45NTc4MiwuOTMxNDYsLjk1NzgyLC45MzE0NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwxLjE2NDg0LC45NTc4MiwuOTMxNDYsLjg0NDIxLDEuMTI3NjEsLjY5MjM4LDEuMDgxMzIsMSwxLC45ODA0NywuODMyMzEsMS4xNjQ4NCwxLDEsLjg0NzIzLDEuMDQ4NjEsLjg0NzIzLC43ODc1NSwuODMyMzEsMS4yMzczNiwxLjAzOTg5LDEuMDEwNTQsMSwxLDEuMDM5ODksMS4wMTA1NCwuOTg1NywxLjAzODQ5LDEuMDEwNTQsLjk2OTI0LC45NjIyNSwuOTY5MjQsLjk2MjI1LC45NjkyNCwuOTYyMjUsLjkyMzgzLC45MDE3MSwuODA1OTUsMS4wNjU5OCwxLDEsLjgwNTk1LDEuMDY1OTgsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwxLDEsLjg2MDkxLDEuMDI3NTksLjg1NzcxLDEuMTYzNDQsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk4NDQ4LC45OTczLC44MzA4OSwuOTY3NzcsLjgzMDg5LC45MzI4NSwuOTA0MywuOTMyODUsLjkwNDMsLjkzMjg1LC45MDQzLDEuMzE4NjgsLjk2OTI3LC45NDcyOSwuOTc0NTQsLjg1NDk4LC45MjkxNiwuOTY5MjQsLjg3NjEsMSwxLC44NjA5MSwxLjE2MzQ0LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LC44MTk2NSwuODE5NjUsLjk0NzI5LC43ODAzMiwuNzEwMjIsLjkwODgzLC44NDE3MSwuOTk4NzcsLjc3NTk2LDEuMDU3MzQsMS4yLC45NDcyOSwuODU5NDQsLjgyNzkxLC45NjA3LC43NDgxNywuOTMyODUsLjk4MDM5LC45NjkyNCwuOTU3ODIsLjg5ODk4LC45ODMxNiwuOTgxODMsMS4wMzk4OSwuNzg2MTQsLjk2OTI0LC45NzY0MiwuODYyMzcsLjg2MDc1LC44NjA5MSwuODMwODksLjkwMDgyLC44ODU4LC45NzI5NiwxLjAxMjg0LC45NTc4MiwuODMwODksMS4wOTc2LDEuMDQsMS4wMzM0MiwxLjIsMS4wNjc1LDEuMDk3NiwuOTgyMDUsMS4wMzgwOSwxLjA1MDk3LDEuMDQsLjk1MzY0LDEuMDMzNDIsMS4wNTQwMSwxLjIsMS4wMjE0OCwxLjAxMTksMS4wNDcyNCwxLjAxMjcsMS4wMjczMiwuOTYyMjUsLjg5NjUsLjk3NzgzLC45MzU3NCwuOTQ4MTgsMS4zMDY3OSwxLjA2NzUsMS4xMTgyNiwuOTk4MjEsMS4wNTU3LDEuMDMyNiwxLjIsMS4wNjc1LC45NjIyNSwxLjA2NzUsMS4wMzI2LC43NDgxNywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjAzNzU0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NzUzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTg3MDUsMSwxLDEsMSwxLDEsLjk4NDQ4LC45OTczLC45ODQ0OCwuOTk3MywuOTg0NDgsLjk5NzMsLjgzMDg5LC45Njc3NywxLDEuMjAwODgsLjg5OTAzLDEsMSwuNzUxNTUsLjk0OTQ1LC45NDk0NSwuOTQ5NDUsLjk0OTQ1LDEuMTIzMTcsMS4xMjMxNywxLjEyMzE3LC42NzYwMywuNjc2MDMsMS4xNTYyMSwuNzM1ODQsMS4yMTE5MSwxLjIyMTM1LDEuMDY0ODMsLjk0ODY4LC45NDg2OCwuOTU5OTYsMS4yNDYzMywxLDEuMDc0OTcsLjg3NzA5LC45NjkyNywxLjAxNDczLC45NjkyNywxLDEsMSwuNzcyOTUsMSwxLDEuMDk4MzYsMS4wOTgzNiwxLjA5ODM2LDEuMDE1MjIsLjg2MzIxLC45NDQzNCwuODY0OSwuOTQ0MzQsLjg2MTgyLDEsMSwxLjA4MywxLC45MTU3OCwuODY0MzgsMS4xNzMwOCwxLjE4NDE2LDEuMTQ1ODksLjY5ODI1LC45NzYyMiwxLjk2NzkxLDEuMjQ4MjIsMS4yNDgyMiwxLjE3MzA4LDEuMjQ4MjIsMS4yNDgyMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTc5ODQsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEwNzQyLDEuMTA3NDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuU2Vnb2V1aUl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9O3QuU2Vnb2V1aVJlZ3VsYXJGYWN0b3JzPVsxLjc2NzM4LDEsMSwuOTg1OTQsMS4wMjI4NSwxLjEwNDU0LDEuMDYyMzQsLjk2OTI3LC45MjAzNywxLjE5OTg1LDEuMjA0NiwuOTA2MTYsLjkwNjE2LDEuMDcxNTIsMS4xNzE0LC43ODAzMiwxLjIwMDg4LC43ODAzMiwxLjQwMjQ2LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuNzgwMzIsLjc4MDMyLDEuMTcxNCwxLjE3MTQsMS4xNzE0LC44MDU5NywuOTQwODQsLjk2NzA2LC44NTk0NCwuODU3MzQsLjk3MDkzLC43NTg0MiwuNzk5MzYsLjg4MTk4LC45ODMxLC45NTc4MiwuNzEzODcsLjg2OTY5LC44NDYzNiwxLjA3Nzk2LDEuMDM1ODQsLjk2OTI0LC44Mzk2OCwuOTY5MjQsLjgyODI2LC43OTY0OSwuODU3NzEsLjk1MTMyLC45MzExOSwuOTg5NjUsLjg4NDMzLC44Mjg3LC45MzM2NSwxLjA4NjEyLDEuMzYzOCwxLjA4NjEyLDEuNDU3ODYsLjc0NjI3LC44MDQ5OSwuOTE0ODQsMS4wNTcwNywuOTIzODMsMS4wNTg4MiwuOTQwMywxLjEyNjU0LDEuMDU4ODIsMS4wMTc1NiwxLjA5MDExLDEuMDkwMTEsLjk5NDE0LDEuMDkwMTEsMS4wMzQsMS4wMTc1NiwxLjA1MzU2LDEuMDU3MDcsMS4wNTg4MiwxLjA0Mzk5LC44NDg2MywxLjIxOTY4LDEuMDE3NTYsLjk1ODAxLDEuMDAwNjgsLjkxNzk3LC45Njc3NywuOTA0MywuOTAzNTEsLjkyMTA1LC45MDM1MSwxLjE3MTQsLjg1MzM3LC45NjkyNywuOTY5MjcsLjk5OTEyLC45NjkyNywuOTIxMDUsLjgwNTk3LDEuMjQzNCwxLjIwODA4LDEuMDU5MzcsLjkwOTU3LDEuMTcxNCwxLjIwODA4LC43NTE1NSwuOTQyNjEsMS4yNDY0NCwxLjA5OTcxLDEuMDk5NzEsLjg0NzUxLDEsLjg1MjczLC43ODAzMiwuNjE1ODQsMS4wNTQyNSwxLjE3OTE0LC45MDk1NywxLjA4NjY1LDEuMTE1OTMsMS4xNDE2OSwuNzMzODEsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjg2MDM1LC44NTczNCwuNzU4NDIsLjc1ODQyLC43NTg0MiwuNzU4NDIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk1NzgyLC45NzA5MywxLjAzNTg0LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsMS4xNzE0LC45NjkyNCwuOTUxMzIsLjk1MTMyLC45NTEzMiwuOTUxMzIsLjgyODcsLjgzOTY4LC44OTA0OSwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTM1NzUsLjkyMzgzLC45NDAzLC45NDAzLC45NDAzLC45NDAzLC44NzE3LC44NzE3LC44NzE3LC44NzE3LDEuMDA1MjcsMS4wMTc1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4yNDY0NCwuOTU5MjMsMS4wMTc1NiwxLjAxNzU2LDEuMDE3NTYsMS4wMTc1NiwuOTY3NzcsMS4wNTcwNywuOTY3NzcsLjk2NzA2LC45MTQ4NCwuOTY3MDYsLjkxNDg0LC45NjcwNiwuOTE0ODQsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuOTcwOTMsMS4wOTY5LC45NzA5MywxLjA1ODgyLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjg4MTk4LDEuMDU4ODIsLjg4MTk4LDEuMDU4ODIsLjg4MTk4LDEuMDU4ODIsMSwxLC45ODMxLDEuMDE3NTYsLjk4MzEsMS4wMTc1NiwuOTU3ODIsLjg3MTcsLjk1NzgyLC44NzE3LC45NTc4MiwuODcxNywuOTU3ODIsMS4wOTAxMSwuOTU3ODIsLjg3MTcsLjg0Nzg0LDEuMTE1NTEsLjcxMzg3LDEuMDkwMTEsMSwxLC45OTQxNCwuODQ2MzYsMS4wOTAxMSwxLDEsLjg0NjM2LDEuMDUzNiwuODQ2MzYsLjk0Mjk4LC44NDYzNiwxLjIzMjk3LDEuMDM1ODQsMS4wMTc1NiwxLDEsMS4wMzU4NCwxLjAxNzU2LDEuMDAzMjMsMS4wMzQ0NCwxLjAxNzU2LC45NjkyNCwxLjA1MzU2LC45NjkyNCwxLjA1MzU2LC45NjkyNCwxLjA1MzU2LC45MzA2NiwuOTgyOTMsLjgyODI2LDEuMDQzOTksMSwxLC44MjgyNiwxLjA0Mzk5LC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsMSwxLC44NTc3MSwxLjE3MzE4LC44NTc3MSwxLjIxOTY4LC45NTEzMiwxLjAxNzU2LC45NTEzMiwxLjAxNzU2LC45NTEzMiwxLjAxNzU2LC45NTEzMiwxLjAxNzU2LC45NTEzMiwxLjAxNzU2LC45NTEzMiwxLjAxNzU2LC45ODk2NSwxLjAwMDY4LC44Mjg3LC45Njc3NywuODI4NywuOTMzNjUsLjkwNDMsLjkzMzY1LC45MDQzLC45MzM2NSwuOTA0MywxLjA4NTcxLC45NjkyNywuOTY3MDYsLjkxNDg0LC44NjAzNSwuOTM1NzUsLjk2OTI0LC45NTkyMywxLDEsLjg1NzcxLDEuMjE5NjgsMS4xMTQzNywxLjExNDM3LC45MzEwOSwuOTEyMDIsLjYwNDExLC44NDE2NCwuNTU1NzIsMS4wMTE3MywuOTczNjEsLjgxODE4LC44MTgxOCwuOTY2MzUsLjc4MDMyLC43MjcyNywuOTIzNjYsLjk4NjAxLDEuMDM0MDUsLjc3OTY4LDEuMDk3OTksMS4yLC45NjcwNiwuODU5NDQsLjg1NjM4LC45NjQ5MSwuNzU4NDIsLjkzMzY1LC45ODMxLC45NjkyNCwuOTU3ODIsLjg2OTY5LC45NDE1MiwxLjA3Nzk2LDEuMDM1ODQsLjc4NDM3LC45NjkyNCwuOTg3MTUsLjgzOTY4LC44MzQ5MSwuODU3NzEsLjgyODcsLjk0NDkyLC44ODQzMywuOTI4NywxLjAwOTgsLjk1NzgyLC44Mjg3LDEuMDYyNSwuOTgyNDgsMS4wMzQyNCwxLjIsMS4wMTA3MSwxLjA2MjUsLjk1MjQ2LDEuMDM4MDksMS4wNDkxMiwuOTgyNDgsMS4wMDIyMSwxLjAzNDI0LDEuMDU0NDMsMS4yLDEuMDQ3ODUsLjk5NjA5LDEuMDAxNjksMS4wNTE3NiwuOTkzNDYsMS4wNTM1NiwuOTA4NywxLjAzMDA0LC45NTU0MiwuOTMxMTcsMS4yMzM2MiwxLjAxMDcxLDEuMDc4MzEsMS4wMjUxMiwxLjA1MjA1LDEuMDM1MDIsMS4yLDEuMDEwNzEsMS4wNTM1NiwxLjAxMDcxLDEuMDM1MDIsLjc1ODQyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDM3MTksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk0MDMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNDAyMSwxLDEsMSwxLDEsMSwuOTg5NjUsMS4wMDA2OCwuOTg5NjUsMS4wMDA2OCwuOTg5NjUsMS4wMDA2OCwuODI4NywuOTY3NzcsMSwxLjIwMDg4LC44OTkwMywxLDEsLjc1MTU1LDEuMDMwNzcsMS4wMzA3NywxLjAzMDc3LDEuMDMwNzcsMS4xMzE5NiwxLjEzMTk2LDEuMTMxOTYsLjY3NDI4LC42NzQyOCwxLjE2MDM5LC43MzI5MSwxLjIwOTk2LDEuMjIxMzUsMS4wNjQ4MywuOTQ4NjgsLjk0ODY4LC45NTk5NiwxLjI0NjMzLDEsMS4wNzQ5NywuODc3OTYsLjk2OTI3LDEuMDE1MTgsLjk2OTI3LDEsMSwxLC43NzI5NSwxLDEsMS4xMDUzOSwxLjEwNTM5LDEuMTEzNTgsMS4wNjk2NywuODYyNzksLjk0NDM0LC44NjI3OSwuOTQ0MzQsLjg2MTgyLDEsMSwxLjA4MywxLC45MTU3OCwuODY1MDcsMS4xNzE0LDEuMTg0MTYsMS4xNDU4OSwuNjk4MjUsLjk3NjIyLDEuOTY5NywxLjI0ODIyLDEuMjQ4MjIsMS4xNzIzOCwxLjI0ODIyLDEuMjQ4MjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE4MDgzLDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4xMDkzOCwxLjEwOTM4LDEsMSwxLDEuMDU0MjUsMS4wOTk3MSwxLjA5OTcxLDEuMDk5NzEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LlNlZ29ldWlSZWd1bGFyTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Qb3N0U2NyaXB0RXZhbHVhdG9yPXQuUG9zdFNjcmlwdENvbXBpbGVyPXQuUERGRnVuY3Rpb25GYWN0b3J5PXZvaWQgMDt0LmlzUERGRnVuY3Rpb249ZnVuY3Rpb24gaXNQREZGdW5jdGlvbihlKXtsZXQgdDtpZihlIGluc3RhbmNlb2Ygci5EaWN0KXQ9ZTtlbHNle2lmKCEoZSBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSkpcmV0dXJuITE7dD1lLmRpY3R9cmV0dXJuIHQuaGFzKCJGdW5jdGlvblR5cGUiKX07dmFyIHI9YSg0KSxuPWEoMiksaT1hKDU4KSxzPWEoNSksbz1hKDU5KTt0LlBERkZ1bmN0aW9uRmFjdG9yeT1jbGFzcyBQREZGdW5jdGlvbkZhY3Rvcnl7Y29uc3RydWN0b3Ioe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dD0hMH0pe3RoaXMueHJlZj1lO3RoaXMuaXNFdmFsU3VwcG9ydGVkPSExIT09dH1jcmVhdGUoZSl7Y29uc3QgdD10aGlzLmdldENhY2hlZChlKTtpZih0KXJldHVybiB0O2NvbnN0IGE9UERGRnVuY3Rpb24ucGFyc2Uoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbjplIGluc3RhbmNlb2Ygci5SZWY/dGhpcy54cmVmLmZldGNoKGUpOmV9KTt0aGlzLl9jYWNoZShlLGEpO3JldHVybiBhfWNyZWF0ZUZyb21BcnJheShlKXtjb25zdCB0PXRoaXMuZ2V0Q2FjaGVkKGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3QgYT1QREZGdW5jdGlvbi5wYXJzZUFycmF5KHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5pc0V2YWxTdXBwb3J0ZWQsZm5PYmo6ZSBpbnN0YW5jZW9mIHIuUmVmP3RoaXMueHJlZi5mZXRjaChlKTplfSk7dGhpcy5fY2FjaGUoZSxhKTtyZXR1cm4gYX1nZXRDYWNoZWQoZSl7bGV0IHQ7ZSBpbnN0YW5jZW9mIHIuUmVmP3Q9ZTplIGluc3RhbmNlb2Ygci5EaWN0P3Q9ZS5vYmpJZDplIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtJiYodD1lLmRpY3Q/Lm9iaklkKTtpZih0KXtjb25zdCBlPXRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5nZXRCeVJlZih0KTtpZihlKXJldHVybiBlfXJldHVybiBudWxsfV9jYWNoZShlLHQpe2lmKCF0KXRocm93IG5ldyBFcnJvcignUERGRnVuY3Rpb25GYWN0b3J5Ll9jYWNoZSAtIGV4cGVjdGVkICJwYXJzZWRGdW5jdGlvbiIgYXJndW1lbnQuJyk7bGV0IGE7ZSBpbnN0YW5jZW9mIHIuUmVmP2E9ZTplIGluc3RhbmNlb2Ygci5EaWN0P2E9ZS5vYmpJZDplIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtJiYoYT1lLmRpY3Q/Lm9iaklkKTthJiZ0aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUuc2V0KG51bGwsYSx0KX1nZXQgX2xvY2FsRnVuY3Rpb25DYWNoZSgpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJfbG9jYWxGdW5jdGlvbkNhY2hlIixuZXcgby5Mb2NhbEZ1bmN0aW9uQ2FjaGUpfX07ZnVuY3Rpb24gdG9OdW1iZXJBcnJheShlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gbnVsbDtjb25zdCB0PWUubGVuZ3RoO2ZvcihsZXQgYT0wO2E8dDthKyspaWYoIm51bWJlciIhPXR5cGVvZiBlW2FdKXtjb25zdCBhPW5ldyBBcnJheSh0KTtmb3IobGV0IHI9MDtyPHQ7cisrKWFbcl09K2Vbcl07cmV0dXJuIGF9cmV0dXJuIGV9Y2xhc3MgUERGRnVuY3Rpb257c3RhdGljIGdldFNhbXBsZUFycmF5KGUsdCxhLHIpe2xldCBuLGkscz0xO2ZvcihuPTAsaT1lLmxlbmd0aDtuPGk7bisrKXMqPWVbbl07cyo9dDtjb25zdCBvPW5ldyBBcnJheShzKTtsZXQgYz0wLGw9MDtjb25zdCBoPTEvKDIqKmEtMSksdT1yLmdldEJ5dGVzKChzKmErNykvOCk7bGV0IGQ9MDtmb3Iobj0wO248cztuKyspe2Zvcig7YzxhOyl7bDw8PTg7bHw9dVtkKytdO2MrPTh9Yy09YTtvW25dPShsPj5jKSpoO2wmPSgxPDxjKS0xfXJldHVybiBvfXN0YXRpYyBwYXJzZSh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmF9KXtjb25zdCByPWEuZGljdHx8YTtzd2l0Y2goci5nZXQoIkZ1bmN0aW9uVHlwZSIpKXtjYXNlIDA6cmV0dXJuIHRoaXMuY29uc3RydWN0U2FtcGxlZCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmEsZGljdDpyfSk7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxkaWN0OnJ9KTtjYXNlIDM6cmV0dXJuIHRoaXMuY29uc3RydWN0U3RpY2hlZCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGRpY3Q6cn0pO2Nhc2UgNDpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RQb3N0U2NyaXB0KHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm46YSxkaWN0OnJ9KX10aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlIG9mIGZ1bmN0aW9uIil9c3RhdGljIHBhcnNlQXJyYXkoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbk9iajphfSl7aWYoIUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIHRoaXMucGFyc2Uoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjphfSk7Y29uc3Qgcj1bXTtmb3IoY29uc3QgbiBvZiBhKXIucHVzaCh0aGlzLnBhcnNlKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm46ZS5mZXRjaElmUmVmKG4pfSkpO3JldHVybiBmdW5jdGlvbihlLHQsYSxuKXtmb3IobGV0IGk9MCxzPXIubGVuZ3RoO2k8cztpKyspcltpXShlLHQsYSxuK2kpfX1zdGF0aWMgY29uc3RydWN0U2FtcGxlZCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmEsZGljdDpyfSl7ZnVuY3Rpb24gdG9NdWx0aUFycmF5KGUpe2NvbnN0IHQ9ZS5sZW5ndGgsYT1bXTtsZXQgcj0wO2ZvcihsZXQgbj0wO248dDtuKz0yKWFbcisrXT1bZVtuXSxlW24rMV1dO3JldHVybiBhfWZ1bmN0aW9uIGludGVycG9sYXRlKGUsdCxhLHIsbil7cmV0dXJuIHIrKG4tcikvKGEtdCkqKGUtdCl9bGV0IGk9dG9OdW1iZXJBcnJheShyLmdldEFycmF5KCJEb21haW4iKSkscz10b051bWJlckFycmF5KHIuZ2V0QXJyYXkoIlJhbmdlIikpO2lmKCFpfHwhcyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiTm8gZG9tYWluIG9yIHJhbmdlIik7Y29uc3Qgbz1pLmxlbmd0aC8yLGM9cy5sZW5ndGgvMjtpPXRvTXVsdGlBcnJheShpKTtzPXRvTXVsdGlBcnJheShzKTtjb25zdCBsPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiU2l6ZSIpKSxoPXIuZ2V0KCJCaXRzUGVyU2FtcGxlIiksdT1yLmdldCgiT3JkZXIiKXx8MTsxIT09dSYmKDAsbi5pbmZvKSgiTm8gc3VwcG9ydCBmb3IgY3ViaWMgc3BsaW5lIGludGVycG9sYXRpb246ICIrdSk7bGV0IGQ9dG9OdW1iZXJBcnJheShyLmdldEFycmF5KCJFbmNvZGUiKSk7aWYoZClkPXRvTXVsdGlBcnJheShkKTtlbHNle2Q9W107Zm9yKGxldCBlPTA7ZTxvOysrZSlkLnB1c2goWzAsbFtlXS0xXSl9bGV0IGY9dG9OdW1iZXJBcnJheShyLmdldEFycmF5KCJEZWNvZGUiKSk7Zj1mP3RvTXVsdGlBcnJheShmKTpzO2NvbnN0IGc9dGhpcy5nZXRTYW1wbGVBcnJheShsLGMsaCxhKTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0U2FtcGxlZEZuKGUsdCxhLHIpe2NvbnN0IG49MTw8byxoPW5ldyBGbG9hdDY0QXJyYXkobiksdT1uZXcgVWludDMyQXJyYXkobik7bGV0IHAsbTtmb3IobT0wO208bjttKyspaFttXT0xO2xldCBiPWMseT0xO2ZvcihwPTA7cDxvOysrcCl7Y29uc3QgYT1pW3BdWzBdLHI9aVtwXVsxXTtsZXQgcz1pbnRlcnBvbGF0ZShNYXRoLm1pbihNYXRoLm1heChlW3QrcF0sYSksciksYSxyLGRbcF1bMF0sZFtwXVsxXSk7Y29uc3Qgbz1sW3BdO3M9TWF0aC5taW4oTWF0aC5tYXgocywwKSxvLTEpO2NvbnN0IGM9czxvLTE/TWF0aC5mbG9vcihzKTpzLTEsZj1jKzEtcyxnPXMtYyx3PWMqYixTPXcrYjtmb3IobT0wO208bjttKyspaWYobSZ5KXtoW21dKj1nO3VbbV0rPVN9ZWxzZXtoW21dKj1mO3VbbV0rPXd9Yio9bzt5PDw9MX1mb3IobT0wO208YzsrK20pe2xldCBlPTA7Zm9yKHA9MDtwPG47cCsrKWUrPWdbdVtwXSttXSpoW3BdO2U9aW50ZXJwb2xhdGUoZSwwLDEsZlttXVswXSxmW21dWzFdKTthW3IrbV09TWF0aC5taW4oTWF0aC5tYXgoZSxzW21dWzBdKSxzW21dWzFdKX19fXN0YXRpYyBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxkaWN0OmF9KXtjb25zdCByPXRvTnVtYmVyQXJyYXkoYS5nZXRBcnJheSgiQzAiKSl8fFswXSxuPXRvTnVtYmVyQXJyYXkoYS5nZXRBcnJheSgiQzEiKSl8fFsxXSxpPWEuZ2V0KCJOIikscz1bXTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDsrK2Upcy5wdXNoKG5bZV0tcltlXSk7Y29uc3Qgbz1zLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0SW50ZXJwb2xhdGVkRm4oZSx0LGEsbil7Y29uc3QgYz0xPT09aT9lW3RdOmVbdF0qKmk7Zm9yKGxldCBlPTA7ZTxvOysrZSlhW24rZV09cltlXStjKnNbZV19fXN0YXRpYyBjb25zdHJ1Y3RTdGljaGVkKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZGljdDphfSl7Y29uc3Qgcj10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkRvbWFpbiIpKTtpZighcil0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiTm8gZG9tYWluIik7aWYoMSE9PXIubGVuZ3RoLzIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBkb21haW4gZm9yIHN0aWNoZWQgZnVuY3Rpb24iKTtjb25zdCBpPVtdO2Zvcihjb25zdCByIG9mIGEuZ2V0KCJGdW5jdGlvbnMiKSlpLnB1c2godGhpcy5wYXJzZSh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmUuZmV0Y2hJZlJlZihyKX0pKTtjb25zdCBzPXRvTnVtYmVyQXJyYXkoYS5nZXRBcnJheSgiQm91bmRzIikpLG89dG9OdW1iZXJBcnJheShhLmdldEFycmF5KCJFbmNvZGUiKSksYz1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RTdGljaGVkRm4oZSx0LGEsbil7Y29uc3QgbD1mdW5jdGlvbiBjb25zdHJ1Y3RTdGljaGVkRnJvbUlSQ2xpcChlLHQsYSl7ZT5hP2U9YTplPHQmJihlPXQpO3JldHVybiBlfShlW3RdLHJbMF0sclsxXSksaD1zLmxlbmd0aDtsZXQgdTtmb3IodT0wO3U8aCYmIShsPHNbdV0pOysrdSk7bGV0IGQ9clswXTt1PjAmJihkPXNbdS0xXSk7bGV0IGY9clsxXTt1PHMubGVuZ3RoJiYoZj1zW3VdKTtjb25zdCBnPW9bMip1XSxwPW9bMip1KzFdO2NbMF09ZD09PWY/ZzpnKyhsLWQpKihwLWcpLyhmLWQpO2lbdV0oYywwLGEsbil9fXN0YXRpYyBjb25zdHJ1Y3RQb3N0U2NyaXB0KHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm46YSxkaWN0OnJ9KXtjb25zdCBzPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiRG9tYWluIikpLG89dG9OdW1iZXJBcnJheShyLmdldEFycmF5KCJSYW5nZSIpKTtpZighcyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiTm8gZG9tYWluLiIpO2lmKCFvKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJObyByYW5nZS4iKTtjb25zdCBjPW5ldyBpLlBvc3RTY3JpcHRMZXhlcihhKSxsPW5ldyBpLlBvc3RTY3JpcHRQYXJzZXIoYykucGFyc2UoKTtpZih0JiZuLkZlYXR1cmVUZXN0LmlzRXZhbFN1cHBvcnRlZCl7Y29uc3QgZT0obmV3IFBvc3RTY3JpcHRDb21waWxlcikuY29tcGlsZShsLHMsbyk7aWYoZSlyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzcmMiLCJzcmNPZmZzZXQiLCJkZXN0IiwiZGVzdE9mZnNldCIsZSl9KDAsbi5pbmZvKSgiVW5hYmxlIHRvIGNvbXBpbGUgUFMgZnVuY3Rpb24iKTtjb25zdCBoPW8ubGVuZ3RoPj4xLHU9cy5sZW5ndGg+PjEsZD1uZXcgUG9zdFNjcmlwdEV2YWx1YXRvcihsKSxmPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IGc9ODE5Mjtjb25zdCBwPW5ldyBGbG9hdDMyQXJyYXkodSk7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFBvc3RTY3JpcHRGbihlLHQsYSxyKXtsZXQgbixpLHM9IiI7Y29uc3QgYz1wO2ZvcihuPTA7bjx1O24rKyl7aT1lW3Qrbl07Y1tuXT1pO3MrPWkrIl8ifWNvbnN0IGw9ZltzXTtpZih2b2lkIDAhPT1sKXthLnNldChsLHIpO3JldHVybn1jb25zdCBtPW5ldyBGbG9hdDMyQXJyYXkoaCksYj1kLmV4ZWN1dGUoYykseT1iLmxlbmd0aC1oO2ZvcihuPTA7bjxoO24rKyl7aT1iW3krbl07bGV0IGU9b1syKm5dO2lmKGk8ZSlpPWU7ZWxzZXtlPW9bMipuKzFdO2k+ZSYmKGk9ZSl9bVtuXT1pfWlmKGc+MCl7Zy0tO2Zbc109bX1hLnNldChtLHIpfX19Y2xhc3MgUG9zdFNjcmlwdFN0YWNre3N0YXRpYyBNQVhfU1RBQ0tfU0laRT0xMDA7Y29uc3RydWN0b3IoZSl7dGhpcy5zdGFjaz1lP0FycmF5LmZyb20oZSk6W119cHVzaChlKXtpZih0aGlzLnN0YWNrLmxlbmd0aD49UG9zdFNjcmlwdFN0YWNrLk1BWF9TVEFDS19TSVpFKXRocm93IG5ldyBFcnJvcigiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayBvdmVyZmxvdy4iKTt0aGlzLnN0YWNrLnB1c2goZSl9cG9wKCl7aWYodGhpcy5zdGFjay5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIHVuZGVyZmxvdy4iKTtyZXR1cm4gdGhpcy5zdGFjay5wb3AoKX1jb3B5KGUpe2lmKHRoaXMuc3RhY2subGVuZ3RoK2U+PVBvc3RTY3JpcHRTdGFjay5NQVhfU1RBQ0tfU0laRSl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7Y29uc3QgdD10aGlzLnN0YWNrO2ZvcihsZXQgYT10Lmxlbmd0aC1lLHI9ZS0xO3I+PTA7ci0tLGErKyl0LnB1c2godFthXSl9aW5kZXgoZSl7dGhpcy5wdXNoKHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtZS0xXSl9cm9sbChlLHQpe2NvbnN0IGE9dGhpcy5zdGFjayxyPWEubGVuZ3RoLWUsbj1hLmxlbmd0aC0xLGk9cisodC1NYXRoLmZsb29yKHQvZSkqZSk7Zm9yKGxldCBlPXIsdD1uO2U8dDtlKyssdC0tKXtjb25zdCByPWFbZV07YVtlXT1hW3RdO2FbdF09cn1mb3IobGV0IGU9cix0PWktMTtlPHQ7ZSsrLHQtLSl7Y29uc3Qgcj1hW2VdO2FbZV09YVt0XTthW3RdPXJ9Zm9yKGxldCBlPWksdD1uO2U8dDtlKyssdC0tKXtjb25zdCByPWFbZV07YVtlXT1hW3RdO2FbdF09cn19fWNsYXNzIFBvc3RTY3JpcHRFdmFsdWF0b3J7Y29uc3RydWN0b3IoZSl7dGhpcy5vcGVyYXRvcnM9ZX1leGVjdXRlKGUpe2NvbnN0IHQ9bmV3IFBvc3RTY3JpcHRTdGFjayhlKTtsZXQgYT0wO2NvbnN0IHI9dGhpcy5vcGVyYXRvcnMsaT1yLmxlbmd0aDtsZXQgcyxvLGM7Zm9yKDthPGk7KXtzPXJbYSsrXTtpZigibnVtYmVyIiE9dHlwZW9mIHMpc3dpdGNoKHMpe2Nhc2UianoiOmM9dC5wb3AoKTtvPXQucG9wKCk7b3x8KGE9Yyk7YnJlYWs7Y2FzZSJqIjpvPXQucG9wKCk7YT1vO2JyZWFrO2Nhc2UiYWJzIjpvPXQucG9wKCk7dC5wdXNoKE1hdGguYWJzKG8pKTticmVhaztjYXNlImFkZCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobytjKTticmVhaztjYXNlImFuZCI6Yz10LnBvcCgpO289dC5wb3AoKTsiYm9vbGVhbiI9PXR5cGVvZiBvJiYiYm9vbGVhbiI9PXR5cGVvZiBjP3QucHVzaChvJiZjKTp0LnB1c2gobyZjKTticmVhaztjYXNlImF0YW4iOmM9dC5wb3AoKTtvPXQucG9wKCk7bz1NYXRoLmF0YW4yKG8sYykvTWF0aC5QSSoxODA7bzwwJiYobys9MzYwKTt0LnB1c2gobyk7YnJlYWs7Y2FzZSJiaXRzaGlmdCI6Yz10LnBvcCgpO289dC5wb3AoKTtvPjA/dC5wdXNoKG88PGMpOnQucHVzaChvPj5jKTticmVhaztjYXNlImNlaWxpbmciOm89dC5wb3AoKTt0LnB1c2goTWF0aC5jZWlsKG8pKTticmVhaztjYXNlImNvcHkiOm89dC5wb3AoKTt0LmNvcHkobyk7YnJlYWs7Y2FzZSJjb3MiOm89dC5wb3AoKTt0LnB1c2goTWF0aC5jb3MobyUzNjAvMTgwKk1hdGguUEkpKTticmVhaztjYXNlImN2aSI6bz0wfHQucG9wKCk7dC5wdXNoKG8pO2JyZWFrO2Nhc2UiY3ZyIjpicmVhaztjYXNlImRpdiI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2goby9jKTticmVhaztjYXNlImR1cCI6dC5jb3B5KDEpO2JyZWFrO2Nhc2UiZXEiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG89PT1jKTticmVhaztjYXNlImV4Y2giOnQucm9sbCgyLDEpO2JyZWFrO2Nhc2UiZXhwIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvKipjKTticmVhaztjYXNlImZhbHNlIjp0LnB1c2goITEpO2JyZWFrO2Nhc2UiZmxvb3IiOm89dC5wb3AoKTt0LnB1c2goTWF0aC5mbG9vcihvKSk7YnJlYWs7Y2FzZSJnZSI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobz49Yyk7YnJlYWs7Y2FzZSJndCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobz5jKTticmVhaztjYXNlImlkaXYiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8vY3wwKTticmVhaztjYXNlImluZGV4IjpvPXQucG9wKCk7dC5pbmRleChvKTticmVhaztjYXNlImxlIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvPD1jKTticmVhaztjYXNlImxuIjpvPXQucG9wKCk7dC5wdXNoKE1hdGgubG9nKG8pKTticmVhaztjYXNlImxvZyI6bz10LnBvcCgpO3QucHVzaChNYXRoLmxvZzEwKG8pKTticmVhaztjYXNlImx0IjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvPGMpO2JyZWFrO2Nhc2UibW9kIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvJWMpO2JyZWFrO2Nhc2UibXVsIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvKmMpO2JyZWFrO2Nhc2UibmUiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8hPT1jKTticmVhaztjYXNlIm5lZyI6bz10LnBvcCgpO3QucHVzaCgtbyk7YnJlYWs7Y2FzZSJub3QiOm89dC5wb3AoKTsiYm9vbGVhbiI9PXR5cGVvZiBvP3QucHVzaCghbyk6dC5wdXNoKH5vKTticmVhaztjYXNlIm9yIjpjPXQucG9wKCk7bz10LnBvcCgpOyJib29sZWFuIj09dHlwZW9mIG8mJiJib29sZWFuIj09dHlwZW9mIGM/dC5wdXNoKG98fGMpOnQucHVzaChvfGMpO2JyZWFrO2Nhc2UicG9wIjp0LnBvcCgpO2JyZWFrO2Nhc2Uicm9sbCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnJvbGwobyxjKTticmVhaztjYXNlInJvdW5kIjpvPXQucG9wKCk7dC5wdXNoKE1hdGgucm91bmQobykpO2JyZWFrO2Nhc2Uic2luIjpvPXQucG9wKCk7dC5wdXNoKE1hdGguc2luKG8lMzYwLzE4MCpNYXRoLlBJKSk7YnJlYWs7Y2FzZSJzcXJ0IjpvPXQucG9wKCk7dC5wdXNoKE1hdGguc3FydChvKSk7YnJlYWs7Y2FzZSJzdWIiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8tYyk7YnJlYWs7Y2FzZSJ0cnVlIjp0LnB1c2goITApO2JyZWFrO2Nhc2UidHJ1bmNhdGUiOm89dC5wb3AoKTtvPW88MD9NYXRoLmNlaWwobyk6TWF0aC5mbG9vcihvKTt0LnB1c2gobyk7YnJlYWs7Y2FzZSJ4b3IiOmM9dC5wb3AoKTtvPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2YgbyYmImJvb2xlYW4iPT10eXBlb2YgYz90LnB1c2gobyE9PWMpOnQucHVzaChvXmMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYFVua25vd24gb3BlcmF0b3IgJHtzfWApfWVsc2UgdC5wdXNoKHMpfXJldHVybiB0LnN0YWNrfX10LlBvc3RTY3JpcHRFdmFsdWF0b3I9UG9zdFNjcmlwdEV2YWx1YXRvcjtjbGFzcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUpe3RoaXMudHlwZT1lfXZpc2l0KGUpeygwLG4udW5yZWFjaGFibGUpKCJhYnN0cmFjdCBtZXRob2QiKX19Y2xhc3MgQXN0QXJndW1lbnQgZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigiYXJncyIpO3RoaXMuaW5kZXg9ZTt0aGlzLm1pbj10O3RoaXMubWF4PWF9dmlzaXQoZSl7ZS52aXNpdEFyZ3VtZW50KHRoaXMpfX1jbGFzcyBBc3RMaXRlcmFsIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlKXtzdXBlcigibGl0ZXJhbCIpO3RoaXMubnVtYmVyPWU7dGhpcy5taW49ZTt0aGlzLm1heD1lfXZpc2l0KGUpe2UudmlzaXRMaXRlcmFsKHRoaXMpfX1jbGFzcyBBc3RCaW5hcnlPcGVyYXRpb24gZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhLHIsbil7c3VwZXIoImJpbmFyeSIpO3RoaXMub3A9ZTt0aGlzLmFyZzE9dDt0aGlzLmFyZzI9YTt0aGlzLm1pbj1yO3RoaXMubWF4PW59dmlzaXQoZSl7ZS52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKX19Y2xhc3MgQXN0TWluIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCJtYXgiKTt0aGlzLmFyZz1lO3RoaXMubWluPWUubWluO3RoaXMubWF4PXR9dmlzaXQoZSl7ZS52aXNpdE1pbih0aGlzKX19Y2xhc3MgQXN0VmFyaWFibGUgZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigidmFyIik7dGhpcy5pbmRleD1lO3RoaXMubWluPXQ7dGhpcy5tYXg9YX12aXNpdChlKXtlLnZpc2l0VmFyaWFibGUodGhpcyl9fWNsYXNzIEFzdFZhcmlhYmxlRGVmaW5pdGlvbiBleHRlbmRzIEFzdE5vZGV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigiZGVmaW5pdGlvbiIpO3RoaXMudmFyaWFibGU9ZTt0aGlzLmFyZz10fXZpc2l0KGUpe2UudmlzaXRWYXJpYWJsZURlZmluaXRpb24odGhpcyl9fWNsYXNzIEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvcntjb25zdHJ1Y3Rvcigpe3RoaXMucGFydHM9W119dmlzaXRBcmd1bWVudChlKXt0aGlzLnBhcnRzLnB1c2goIk1hdGgubWF4KCIsZS5taW4sIiwgTWF0aC5taW4oIixlLm1heCwiLCBzcmNbc3JjT2Zmc2V0ICsgIixlLmluZGV4LCJdKSkiKX12aXNpdFZhcmlhYmxlKGUpe3RoaXMucGFydHMucHVzaCgidiIsZS5pbmRleCl9dmlzaXRMaXRlcmFsKGUpe3RoaXMucGFydHMucHVzaChlLm51bWJlcil9dmlzaXRCaW5hcnlPcGVyYXRpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCIoIik7ZS5hcmcxLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiICIsZS5vcCwiICIpO2UuYXJnMi52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIikiKX12aXNpdFZhcmlhYmxlRGVmaW5pdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goInZhciAiKTtlLnZhcmlhYmxlLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiID0gIik7ZS5hcmcudmlzaXQodGhpcyk7dGhpcy5wYXJ0cy5wdXNoKCI7Iil9dmlzaXRNaW4oZSl7dGhpcy5wYXJ0cy5wdXNoKCJNYXRoLm1pbigiKTtlLmFyZy52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIiwgIixlLm1heCwiKSIpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMucGFydHMuam9pbigiIil9fWZ1bmN0aW9uIGJ1aWxkQWRkT3BlcmF0aW9uKGUsdCl7cmV0dXJuImxpdGVyYWwiPT09dC50eXBlJiYwPT09dC5udW1iZXI/ZToibGl0ZXJhbCI9PT1lLnR5cGUmJjA9PT1lLm51bWJlcj90OiJsaXRlcmFsIj09PXQudHlwZSYmImxpdGVyYWwiPT09ZS50eXBlP25ldyBBc3RMaXRlcmFsKGUubnVtYmVyK3QubnVtYmVyKTpuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCIrIixlLHQsZS5taW4rdC5taW4sZS5tYXgrdC5tYXgpfWZ1bmN0aW9uIGJ1aWxkTXVsT3BlcmF0aW9uKGUsdCl7aWYoImxpdGVyYWwiPT09dC50eXBlKXtpZigwPT09dC5udW1iZXIpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApO2lmKDE9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKGUubnVtYmVyKnQubnVtYmVyKX1pZigibGl0ZXJhbCI9PT1lLnR5cGUpe2lmKDA9PT1lLm51bWJlcilyZXR1cm4gbmV3IEFzdExpdGVyYWwoMCk7aWYoMT09PWUubnVtYmVyKXJldHVybiB0fWNvbnN0IGE9TWF0aC5taW4oZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpLHI9TWF0aC5tYXgoZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpO3JldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCIqIixlLHQsYSxyKX1mdW5jdGlvbiBidWlsZFN1Yk9wZXJhdGlvbihlLHQpe2lmKCJsaXRlcmFsIj09PXQudHlwZSl7aWYoMD09PXQubnVtYmVyKXJldHVybiBlO2lmKCJsaXRlcmFsIj09PWUudHlwZSlyZXR1cm4gbmV3IEFzdExpdGVyYWwoZS5udW1iZXItdC5udW1iZXIpfXJldHVybiJiaW5hcnkiPT09dC50eXBlJiYiLSI9PT10Lm9wJiYibGl0ZXJhbCI9PT1lLnR5cGUmJjE9PT1lLm51bWJlciYmImxpdGVyYWwiPT09dC5hcmcxLnR5cGUmJjE9PT10LmFyZzEubnVtYmVyP3QuYXJnMjpuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCItIixlLHQsZS5taW4tdC5tYXgsZS5tYXgtdC5taW4pfWZ1bmN0aW9uIGJ1aWxkTWluT3BlcmF0aW9uKGUsdCl7cmV0dXJuIGUubWluPj10P25ldyBBc3RMaXRlcmFsKHQpOmUubWF4PD10P2U6bmV3IEFzdE1pbihlLHQpfWNsYXNzIFBvc3RTY3JpcHRDb21waWxlcntjb21waWxlKGUsdCxhKXtjb25zdCByPVtdLG49W10saT10Lmxlbmd0aD4+MSxzPWEubGVuZ3RoPj4xO2xldCBvLGMsbCxoLHUsZCxmLGcscD0wO2ZvcihsZXQgZT0wO2U8aTtlKyspci5wdXNoKG5ldyBBc3RBcmd1bWVudChlLHRbMiplXSx0WzIqZSsxXSkpO2ZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrKyl7Zz1lW3RdO2lmKCJudW1iZXIiIT10eXBlb2YgZylzd2l0Y2goZyl7Y2FzZSJhZGQiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRBZGRPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJjdnIiOmlmKHIubGVuZ3RoPDEpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSJtdWwiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRNdWxPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJzdWIiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRTdWJPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJleGNoIjppZihyLmxlbmd0aDwyKXJldHVybiBudWxsO3U9ci5wb3AoKTtkPXIucG9wKCk7ci5wdXNoKHUsZCk7YnJlYWs7Y2FzZSJwb3AiOmlmKHIubGVuZ3RoPDEpcmV0dXJuIG51bGw7ci5wb3AoKTticmVhaztjYXNlImluZGV4IjppZihyLmxlbmd0aDwxKXJldHVybiBudWxsO2w9ci5wb3AoKTtpZigibGl0ZXJhbCIhPT1sLnR5cGUpcmV0dXJuIG51bGw7bz1sLm51bWJlcjtpZihvPDB8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHxyLmxlbmd0aDxvKXJldHVybiBudWxsO3U9cltyLmxlbmd0aC1vLTFdO2lmKCJsaXRlcmFsIj09PXUudHlwZXx8InZhciI9PT11LnR5cGUpe3IucHVzaCh1KTticmVha31mPW5ldyBBc3RWYXJpYWJsZShwKyssdS5taW4sdS5tYXgpO3Jbci5sZW5ndGgtby0xXT1mO3IucHVzaChmKTtuLnB1c2gobmV3IEFzdFZhcmlhYmxlRGVmaW5pdGlvbihmLHUpKTticmVhaztjYXNlImR1cCI6aWYoci5sZW5ndGg8MSlyZXR1cm4gbnVsbDtpZigibnVtYmVyIj09dHlwZW9mIGVbdCsxXSYmImd0Ij09PWVbdCsyXSYmZVt0KzNdPT09dCs3JiYianoiPT09ZVt0KzRdJiYicG9wIj09PWVbdCs1XSYmZVt0KzZdPT09ZVt0KzFdKXtsPXIucG9wKCk7ci5wdXNoKGJ1aWxkTWluT3BlcmF0aW9uKGwsZVt0KzFdKSk7dCs9NjticmVha311PXIuYXQoLTEpO2lmKCJsaXRlcmFsIj09PXUudHlwZXx8InZhciI9PT11LnR5cGUpe3IucHVzaCh1KTticmVha31mPW5ldyBBc3RWYXJpYWJsZShwKyssdS5taW4sdS5tYXgpO3Jbci5sZW5ndGgtMV09ZjtyLnB1c2goZik7bi5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24oZix1KSk7YnJlYWs7Y2FzZSJyb2xsIjppZihyLmxlbmd0aDwyKXJldHVybiBudWxsO2g9ci5wb3AoKTtsPXIucG9wKCk7aWYoImxpdGVyYWwiIT09aC50eXBlfHwibGl0ZXJhbCIhPT1sLnR5cGUpcmV0dXJuIG51bGw7Yz1oLm51bWJlcjtvPWwubnVtYmVyO2lmKG88PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHwhTnVtYmVyLmlzSW50ZWdlcihjKXx8ci5sZW5ndGg8bylyZXR1cm4gbnVsbDtjPShjJW8rbyklbztpZigwPT09YylicmVhaztyLnB1c2goLi4uci5zcGxpY2Uoci5sZW5ndGgtbyxvLWMpKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfWVsc2Ugci5wdXNoKG5ldyBBc3RMaXRlcmFsKGcpKX1pZihyLmxlbmd0aCE9PXMpcmV0dXJuIG51bGw7Y29uc3QgbT1bXTtmb3IoY29uc3QgZSBvZiBuKXtjb25zdCB0PW5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3I7ZS52aXNpdCh0KTttLnB1c2godC50b1N0cmluZygpKX1mb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9cltlXSxuPW5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3I7dC52aXNpdChuKTtjb25zdCBpPWFbMiplXSxzPWFbMiplKzFdLG89W24udG9TdHJpbmcoKV07aWYoaT50Lm1pbil7by51bnNoaWZ0KCJNYXRoLm1heCgiLGksIiwgIik7by5wdXNoKCIpIil9aWYoczx0Lm1heCl7by51bnNoaWZ0KCJNYXRoLm1pbigiLHMsIiwgIik7by5wdXNoKCIpIil9by51bnNoaWZ0KCJkZXN0W2Rlc3RPZmZzZXQgKyAiLGUsIl0gPSAiKTtvLnB1c2goIjsiKTttLnB1c2goby5qb2luKCIiKSl9cmV0dXJuIG0uam9pbigiXG4iKX19dC5Qb3N0U2NyaXB0Q29tcGlsZXI9UG9zdFNjcmlwdENvbXBpbGVyfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUG9zdFNjcmlwdFBhcnNlcj10LlBvc3RTY3JpcHRMZXhlcj12b2lkIDA7dmFyIHI9YSgyKSxuPWEoNCksaT1hKDMpO3QuUG9zdFNjcmlwdFBhcnNlcj1jbGFzcyBQb3N0U2NyaXB0UGFyc2Vye2NvbnN0cnVjdG9yKGUpe3RoaXMubGV4ZXI9ZTt0aGlzLm9wZXJhdG9ycz1bXTt0aGlzLnRva2VuPW51bGw7dGhpcy5wcmV2PW51bGx9bmV4dFRva2VuKCl7dGhpcy5wcmV2PXRoaXMudG9rZW47dGhpcy50b2tlbj10aGlzLmxleGVyLmdldFRva2VuKCl9YWNjZXB0KGUpe2lmKHRoaXMudG9rZW4udHlwZT09PWUpe3RoaXMubmV4dFRva2VuKCk7cmV0dXJuITB9cmV0dXJuITF9ZXhwZWN0KGUpe2lmKHRoaXMuYWNjZXB0KGUpKXJldHVybiEwO3Rocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmV4cGVjdGVkIHN5bWJvbDogZm91bmQgJHt0aGlzLnRva2VuLnR5cGV9IGV4cGVjdGVkICR7ZX0uYCl9cGFyc2UoKXt0aGlzLm5leHRUb2tlbigpO3RoaXMuZXhwZWN0KHMuTEJSQUNFKTt0aGlzLnBhcnNlQmxvY2soKTt0aGlzLmV4cGVjdChzLlJCUkFDRSk7cmV0dXJuIHRoaXMub3BlcmF0b3JzfXBhcnNlQmxvY2soKXtmb3IoOzspaWYodGhpcy5hY2NlcHQocy5OVU1CRVIpKXRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtlbHNlIGlmKHRoaXMuYWNjZXB0KHMuT1BFUkFUT1IpKXRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtlbHNle2lmKCF0aGlzLmFjY2VwdChzLkxCUkFDRSkpcmV0dXJuO3RoaXMucGFyc2VDb25kaXRpb24oKX19cGFyc2VDb25kaXRpb24oKXtjb25zdCBlPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCk7dGhpcy5wYXJzZUJsb2NrKCk7dGhpcy5leHBlY3Qocy5SQlJBQ0UpO2lmKHRoaXMuYWNjZXB0KHMuSUYpKXt0aGlzLm9wZXJhdG9yc1tlXT10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5vcGVyYXRvcnNbZSsxXT0ianoifWVsc2V7aWYoIXRoaXMuYWNjZXB0KHMuTEJSQUNFKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiUFMgRnVuY3Rpb246IGVycm9yIHBhcnNpbmcgY29uZGl0aW9uYWwuIik7e2NvbnN0IHQ9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMub3BlcmF0b3JzLnB1c2gobnVsbCxudWxsKTtjb25zdCBhPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLnBhcnNlQmxvY2soKTt0aGlzLmV4cGVjdChzLlJCUkFDRSk7dGhpcy5leHBlY3Qocy5JRkVMU0UpO3RoaXMub3BlcmF0b3JzW3RdPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9yc1t0KzFdPSJqIjt0aGlzLm9wZXJhdG9yc1tlXT1hO3RoaXMub3BlcmF0b3JzW2UrMV09Imp6In19fX07Y29uc3Qgcz17TEJSQUNFOjAsUkJSQUNFOjEsTlVNQkVSOjIsT1BFUkFUT1I6MyxJRjo0LElGRUxTRTo1fTtjbGFzcyBQb3N0U2NyaXB0VG9rZW57c3RhdGljIGdldCBvcENhY2hlKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIm9wQ2FjaGUiLE9iamVjdC5jcmVhdGUobnVsbCkpfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy50eXBlPWU7dGhpcy52YWx1ZT10fXN0YXRpYyBnZXRPcGVyYXRvcihlKXtyZXR1cm4gUG9zdFNjcmlwdFRva2VuLm9wQ2FjaGVbZV18fD1uZXcgUG9zdFNjcmlwdFRva2VuKHMuT1BFUkFUT1IsZSl9c3RhdGljIGdldCBMQlJBQ0UoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiTEJSQUNFIixuZXcgUG9zdFNjcmlwdFRva2VuKHMuTEJSQUNFLCJ7IikpfXN0YXRpYyBnZXQgUkJSQUNFKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIlJCUkFDRSIsbmV3IFBvc3RTY3JpcHRUb2tlbihzLlJCUkFDRSwifSIpKX1zdGF0aWMgZ2V0IElGKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIklGIixuZXcgUG9zdFNjcmlwdFRva2VuKHMuSUYsIklGIikpfXN0YXRpYyBnZXQgSUZFTFNFKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIklGRUxTRSIsbmV3IFBvc3RTY3JpcHRUb2tlbihzLklGRUxTRSwiSUZFTFNFIikpfX10LlBvc3RTY3JpcHRMZXhlcj1jbGFzcyBQb3N0U2NyaXB0TGV4ZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5zdHJlYW09ZTt0aGlzLm5leHRDaGFyKCk7dGhpcy5zdHJCdWY9W119bmV4dENoYXIoKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9Z2V0VG9rZW4oKXtsZXQgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Zm9yKDs7KXtpZih0PDApcmV0dXJuIG4uRU9GO2lmKGUpMTAhPT10JiYxMyE9PXR8fChlPSExKTtlbHNlIGlmKDM3PT09dCllPSEwO2Vsc2UgaWYoISgwLGkuaXNXaGl0ZVNwYWNlKSh0KSlicmVhazt0PXRoaXMubmV4dENoYXIoKX1zd2l0Y2goMHx0KXtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OmNhc2UgNDM6Y2FzZSA0NTpjYXNlIDQ2OnJldHVybiBuZXcgUG9zdFNjcmlwdFRva2VuKHMuTlVNQkVSLHRoaXMuZ2V0TnVtYmVyKCkpO2Nhc2UgMTIzOnRoaXMubmV4dENoYXIoKTtyZXR1cm4gUG9zdFNjcmlwdFRva2VuLkxCUkFDRTtjYXNlIDEyNTp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5SQlJBQ0V9Y29uc3QgYT10aGlzLnN0ckJ1ZjthLmxlbmd0aD0wO2FbMF09U3RyaW5nLmZyb21DaGFyQ29kZSh0KTtmb3IoOyh0PXRoaXMubmV4dENoYXIoKSk+PTAmJih0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjIpOylhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh0KSk7Y29uc3Qgcj1hLmpvaW4oIiIpO3N3aXRjaChyLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaWYiOnJldHVybiBQb3N0U2NyaXB0VG9rZW4uSUY7Y2FzZSJpZmVsc2UiOnJldHVybiBQb3N0U2NyaXB0VG9rZW4uSUZFTFNFO2RlZmF1bHQ6cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5nZXRPcGVyYXRvcihyKX19Z2V0TnVtYmVyKCl7bGV0IGU9dGhpcy5jdXJyZW50Q2hhcjtjb25zdCB0PXRoaXMuc3RyQnVmO3QubGVuZ3RoPTA7dFswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpO2Zvcig7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmKGU+PTQ4JiZlPD01N3x8NDU9PT1lfHw0Nj09PWUpOyl0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7Y29uc3QgYT1wYXJzZUZsb2F0KHQuam9pbigiIikpO2lmKGlzTmFOKGEpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIGZsb2F0aW5nIHBvaW50IG51bWJlcjogJHthfWApO3JldHVybiBhfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5SZWdpb25hbEltYWdlQ2FjaGU9dC5Mb2NhbFRpbGluZ1BhdHRlcm5DYWNoZT10LkxvY2FsSW1hZ2VDYWNoZT10LkxvY2FsR1N0YXRlQ2FjaGU9dC5Mb2NhbEZ1bmN0aW9uQ2FjaGU9dC5Mb2NhbENvbG9yU3BhY2VDYWNoZT10Lkdsb2JhbEltYWdlQ2FjaGU9dm9pZCAwO3ZhciByPWEoMiksbj1hKDQpO2NsYXNzIEJhc2VMb2NhbENhY2hle2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uc3RydWN0b3I9PT1CYXNlTG9jYWxDYWNoZSYmKDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VMb2NhbENhY2hlLiIpO3RoaXMuX29ubHlSZWZzPSEwPT09ZT8ub25seVJlZnM7aWYoIXRoaXMuX29ubHlSZWZzKXt0aGlzLl9uYW1lUmVmTWFwPW5ldyBNYXA7dGhpcy5faW1hZ2VNYXA9bmV3IE1hcH10aGlzLl9pbWFnZUNhY2hlPW5ldyBuLlJlZlNldENhY2hlfWdldEJ5TmFtZShlKXt0aGlzLl9vbmx5UmVmcyYmKDAsci51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBgZ2V0QnlOYW1lYCBtZXRob2QuIik7Y29uc3QgdD10aGlzLl9uYW1lUmVmTWFwLmdldChlKTtyZXR1cm4gdD90aGlzLmdldEJ5UmVmKHQpOnRoaXMuX2ltYWdlTWFwLmdldChlKXx8bnVsbH1nZXRCeVJlZihlKXtyZXR1cm4gdGhpcy5faW1hZ2VDYWNoZS5nZXQoZSl8fG51bGx9c2V0KGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBzZXRgIGNhbGxlZC4iKX19dC5Mb2NhbEltYWdlQ2FjaGU9Y2xhc3MgTG9jYWxJbWFnZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7c2V0KGUsdD1udWxsLGEpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3RoaXMuX25hbWVSZWZNYXAuc2V0KGUsdCk7dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxhKX1lbHNlIHRoaXMuX2ltYWdlTWFwLmhhcyhlKXx8dGhpcy5faW1hZ2VNYXAuc2V0KGUsYSl9fTt0LkxvY2FsQ29sb3JTcGFjZUNhY2hlPWNsYXNzIExvY2FsQ29sb3JTcGFjZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7c2V0KGU9bnVsbCx0PW51bGwsYSl7aWYoInN0cmluZyIhPXR5cGVvZiBlJiYhdCl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsQ29sb3JTcGFjZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhbmQvb3IgInJlZiIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO251bGwhPT1lJiZ0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpO3RoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9ZWxzZSB0aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLGEpfX07dC5Mb2NhbEZ1bmN0aW9uQ2FjaGU9Y2xhc3MgTG9jYWxGdW5jdGlvbkNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoe29ubHlSZWZzOiEwfSl9c2V0KGU9bnVsbCx0LGEpe2lmKCF0KXRocm93IG5ldyBFcnJvcignTG9jYWxGdW5jdGlvbkNhY2hlLnNldCAtIGV4cGVjdGVkICJyZWYiIGFyZ3VtZW50LicpO3RoaXMuX2ltYWdlQ2FjaGUuaGFzKHQpfHx0aGlzLl9pbWFnZUNhY2hlLnB1dCh0LGEpfX07dC5Mb2NhbEdTdGF0ZUNhY2hlPWNsYXNzIExvY2FsR1N0YXRlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtzZXQoZSx0PW51bGwsYSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcignTG9jYWxHU3RhdGVDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3RoaXMuX25hbWVSZWZNYXAuc2V0KGUsdCk7dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxhKX1lbHNlIHRoaXMuX2ltYWdlTWFwLmhhcyhlKXx8dGhpcy5faW1hZ2VNYXAuc2V0KGUsYSl9fTt0LkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlPWNsYXNzIExvY2FsVGlsaW5nUGF0dGVybkNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoe29ubHlSZWZzOiEwfSl9c2V0KGU9bnVsbCx0LGEpe2lmKCF0KXRocm93IG5ldyBFcnJvcignTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXModCl8fHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9fTt0LlJlZ2lvbmFsSW1hZ2VDYWNoZT1jbGFzcyBSZWdpb25hbEltYWdlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtjb25zdHJ1Y3RvcihlKXtzdXBlcih7b25seVJlZnM6ITB9KX1zZXQoZT1udWxsLHQsYSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCdSZWdpb25hbEltYWdlQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXModCl8fHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9fTtjbGFzcyBHbG9iYWxJbWFnZUNhY2hle3N0YXRpYyBOVU1fUEFHRVNfVEhSRVNIT0xEPTI7c3RhdGljIE1JTl9JTUFHRVNfVE9fQ0FDSEU9MTA7c3RhdGljIE1BWF9CWVRFX1NJWkU9NSpyLk1BWF9JTUFHRV9TSVpFX1RPX0NBQ0hFO2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVmQ2FjaGU9bmV3IG4uUmVmU2V0Q2FjaGU7dGhpcy5faW1hZ2VDYWNoZT1uZXcgbi5SZWZTZXRDYWNoZX1nZXQgX2J5dGVTaXplKCl7bGV0IGU9MDtmb3IoY29uc3QgdCBvZiB0aGlzLl9pbWFnZUNhY2hlKWUrPXQuYnl0ZVNpemU7cmV0dXJuIGV9Z2V0IF9jYWNoZUxpbWl0UmVhY2hlZCgpe3JldHVybiEodGhpcy5faW1hZ2VDYWNoZS5zaXplPEdsb2JhbEltYWdlQ2FjaGUuTUlOX0lNQUdFU19UT19DQUNIRSkmJiEodGhpcy5fYnl0ZVNpemU8R2xvYmFsSW1hZ2VDYWNoZS5NQVhfQllURV9TSVpFKX1zaG91bGRDYWNoZShlLHQpe2xldCBhPXRoaXMuX3JlZkNhY2hlLmdldChlKTtpZighYSl7YT1uZXcgU2V0O3RoaXMuX3JlZkNhY2hlLnB1dChlLGEpfWEuYWRkKHQpO3JldHVybiEoYS5zaXplPEdsb2JhbEltYWdlQ2FjaGUuTlVNX1BBR0VTX1RIUkVTSE9MRCkmJiEoIXRoaXMuX2ltYWdlQ2FjaGUuaGFzKGUpJiZ0aGlzLl9jYWNoZUxpbWl0UmVhY2hlZCl9YWRkQnl0ZVNpemUoZSx0KXtjb25zdCBhPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGUpO2EmJihhLmJ5dGVTaXplfHwoYS5ieXRlU2l6ZT10KSl9Z2V0RGF0YShlLHQpe2NvbnN0IGE9dGhpcy5fcmVmQ2FjaGUuZ2V0KGUpO2lmKCFhKXJldHVybiBudWxsO2lmKGEuc2l6ZTxHbG9iYWxJbWFnZUNhY2hlLk5VTV9QQUdFU19USFJFU0hPTEQpcmV0dXJuIG51bGw7Y29uc3Qgcj10aGlzLl9pbWFnZUNhY2hlLmdldChlKTtpZighcilyZXR1cm4gbnVsbDthLmFkZCh0KTtyZXR1cm4gcn1zZXREYXRhKGUsdCl7aWYoIXRoaXMuX3JlZkNhY2hlLmhhcyhlKSl0aHJvdyBuZXcgRXJyb3IoJ0dsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGV4cGVjdGVkICJzaG91bGRDYWNoZSIgdG8gaGF2ZSBiZWVuIGNhbGxlZC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8KHRoaXMuX2NhY2hlTGltaXRSZWFjaGVkPygwLHIud2FybikoIkdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGNhY2hlIGxpbWl0IHJlYWNoZWQuIik6dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KSl9Y2xlYXIoZT0hMSl7ZXx8dGhpcy5fcmVmQ2FjaGUuY2xlYXIoKTt0aGlzLl9pbWFnZUNhY2hlLmNsZWFyKCl9fXQuR2xvYmFsSW1hZ2VDYWNoZT1HbG9iYWxJbWFnZUNhY2hlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuYmlkaT1mdW5jdGlvbiBiaWRpKGUsdD0tMSxhPSExKXtsZXQgYz0hMDtjb25zdCBsPWUubGVuZ3RoO2lmKDA9PT1sfHxhKXJldHVybiBjcmVhdGVCaWRpVGV4dChlLGMsYSk7cy5sZW5ndGg9bDtvLmxlbmd0aD1sO2xldCBoLHUsZD0wO2ZvcihoPTA7aDxsOysraCl7c1toXT1lLmNoYXJBdChoKTtjb25zdCB0PWUuY2hhckNvZGVBdChoKTtsZXQgYT0iTCI7aWYodDw9MjU1KWE9blt0XTtlbHNlIGlmKDE0MjQ8PXQmJnQ8PTE1MjQpYT0iUiI7ZWxzZSBpZigxNTM2PD10JiZ0PD0xNzkxKXthPWlbMjU1JnRdO2F8fCgwLHIud2FybikoIkJpZGk6IGludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXIgIit0LnRvU3RyaW5nKDE2KSl9ZWxzZSgxNzkyPD10JiZ0PD0yMjIwfHw2NDMzNjw9dCYmdDw9NjUwMjN8fDY1MTM2PD10JiZ0PD02NTI3OSkmJihhPSJBTCIpOyJSIiE9PWEmJiJBTCIhPT1hJiYiQU4iIT09YXx8ZCsrO29baF09YX1pZigwPT09ZCl7Yz0hMDtyZXR1cm4gY3JlYXRlQmlkaVRleHQoZSxjKX1pZigtMT09PXQpaWYoZC9sPC4zJiZsPjQpe2M9ITA7dD0wfWVsc2V7Yz0hMTt0PTF9Y29uc3QgZj1bXTtmb3IoaD0wO2g8bDsrK2gpZltoXT10O2NvbnN0IGc9aXNPZGQodCk/IlIiOiJMIixwPWcsbT1wO2xldCBiLHk9cDtmb3IoaD0wO2g8bDsrK2gpIk5TTSI9PT1vW2hdP29baF09eTp5PW9baF07eT1wO2ZvcihoPTA7aDxsOysraCl7Yj1vW2hdOyJFTiI9PT1iP29baF09IkFMIj09PXk/IkFOIjoiRU4iOiJSIiE9PWImJiJMIiE9PWImJiJBTCIhPT1ifHwoeT1iKX1mb3IoaD0wO2g8bDsrK2gpe2I9b1toXTsiQUwiPT09YiYmKG9baF09IlIiKX1mb3IoaD0xO2g8bC0xOysraCl7IkVTIj09PW9baF0mJiJFTiI9PT1vW2gtMV0mJiJFTiI9PT1vW2grMV0mJihvW2hdPSJFTiIpOyJDUyIhPT1vW2hdfHwiRU4iIT09b1toLTFdJiYiQU4iIT09b1toLTFdfHxvW2grMV0hPT1vW2gtMV18fChvW2hdPW9baC0xXSl9Zm9yKGg9MDtoPGw7KytoKWlmKCJFTiI9PT1vW2hdKXtmb3IobGV0IGU9aC0xO2U+PTAmJiJFVCI9PT1vW2VdOy0tZSlvW2VdPSJFTiI7Zm9yKGxldCBlPWgrMTtlPGwmJiJFVCI9PT1vW2VdOysrZSlvW2VdPSJFTiJ9Zm9yKGg9MDtoPGw7KytoKXtiPW9baF07IldTIiE9PWImJiJFUyIhPT1iJiYiRVQiIT09YiYmIkNTIiE9PWJ8fChvW2hdPSJPTiIpfXk9cDtmb3IoaD0wO2g8bDsrK2gpe2I9b1toXTsiRU4iPT09Yj9vW2hdPSJMIj09PXk/IkwiOiJFTiI6IlIiIT09YiYmIkwiIT09Ynx8KHk9Yil9Zm9yKGg9MDtoPGw7KytoKWlmKCJPTiI9PT1vW2hdKXtjb25zdCBlPWZpbmRVbmVxdWFsKG8saCsxLCJPTiIpO2xldCB0PXA7aD4wJiYodD1vW2gtMV0pO2xldCBhPW07ZSsxPGwmJihhPW9bZSsxXSk7IkwiIT09dCYmKHQ9IlIiKTsiTCIhPT1hJiYoYT0iUiIpO3Q9PT1hJiZzZXRWYWx1ZXMobyxoLGUsdCk7aD1lLTF9Zm9yKGg9MDtoPGw7KytoKSJPTiI9PT1vW2hdJiYob1toXT1nKTtmb3IoaD0wO2g8bDsrK2gpe2I9b1toXTtpc0V2ZW4oZltoXSk/IlIiPT09Yj9mW2hdKz0xOiJBTiIhPT1iJiYiRU4iIT09Ynx8KGZbaF0rPTIpOiJMIiE9PWImJiJBTiIhPT1iJiYiRU4iIT09Ynx8KGZbaF0rPTEpfWxldCB3LFM9LTEseD05OTtmb3IoaD0wLHU9Zi5sZW5ndGg7aDx1OysraCl7dz1mW2hdO1M8dyYmKFM9dyk7eD53JiZpc09kZCh3KSYmKHg9dyl9Zm9yKHc9Uzt3Pj14Oy0tdyl7bGV0IGU9LTE7Zm9yKGg9MCx1PWYubGVuZ3RoO2g8dTsrK2gpaWYoZltoXTx3KXtpZihlPj0wKXtyZXZlcnNlVmFsdWVzKHMsZSxoKTtlPS0xfX1lbHNlIGU8MCYmKGU9aCk7ZT49MCYmcmV2ZXJzZVZhbHVlcyhzLGUsZi5sZW5ndGgpfWZvcihoPTAsdT1zLmxlbmd0aDtoPHU7KytoKXtjb25zdCBlPXNbaF07IjwiIT09ZSYmIj4iIT09ZXx8KHNbaF09IiIpfXJldHVybiBjcmVhdGVCaWRpVGV4dChzLmpvaW4oIiIpLGMpfTt2YXIgcj1hKDIpO2NvbnN0IG49WyJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJTIiwiQiIsIlMiLCJXUyIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQiIsIkIiLCJCIiwiUyIsIldTIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFVCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJFUyIsIkNTIiwiRVMiLCJDUyIsIkNTIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJDUyIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQ1MiLCJPTiIsIkVUIiwiRVQiLCJFVCIsIkVUIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiT04iLCJPTiIsIkJOIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFTiIsIkVOIiwiT04iLCJMIiwiT04iLCJPTiIsIk9OIiwiRU4iLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCJdLGk9WyJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJPTiIsIk9OIiwiQUwiLCJFVCIsIkVUIiwiQUwiLCJDUyIsIkFMIiwiT04iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCIiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkVUIiwiQU4iLCJBTiIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIl07ZnVuY3Rpb24gaXNPZGQoZSl7cmV0dXJuIDAhPSgxJmUpfWZ1bmN0aW9uIGlzRXZlbihlKXtyZXR1cm4gMD09KDEmZSl9ZnVuY3Rpb24gZmluZFVuZXF1YWwoZSx0LGEpe2xldCByLG47Zm9yKHI9dCxuPWUubGVuZ3RoO3I8bjsrK3IpaWYoZVtyXSE9PWEpcmV0dXJuIHI7cmV0dXJuIHJ9ZnVuY3Rpb24gc2V0VmFsdWVzKGUsdCxhLHIpe2ZvcihsZXQgbj10O248YTsrK24pZVtuXT1yfWZ1bmN0aW9uIHJldmVyc2VWYWx1ZXMoZSx0LGEpe2ZvcihsZXQgcj10LG49YS0xO3I8bjsrK3IsLS1uKXtjb25zdCB0PWVbcl07ZVtyXT1lW25dO2Vbbl09dH19ZnVuY3Rpb24gY3JlYXRlQmlkaVRleHQoZSx0LGE9ITEpe2xldCByPSJsdHIiO2E/cj0idHRiIjp0fHwocj0icnRsIik7cmV0dXJue3N0cjplLGRpcjpyfX1jb25zdCBzPVtdLG89W119LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5nZXRGb250U3Vic3RpdHV0aW9uPWZ1bmN0aW9uIGdldEZvbnRTdWJzdGl0dXRpb24oZSx0LGEsdSxkKXtjb25zdCBmPXU9KDAsci5ub3JtYWxpemVGb250TmFtZSkodSk7bGV0IGc9ZS5nZXQoZik7aWYoZylyZXR1cm4gZztsZXQgcD1sLmdldCh1KTtpZighcClmb3IoY29uc3RbZSx0XW9mIGgpaWYodS5zdGFydHNXaXRoKGUpKXt1PWAke3R9JHt1LnN1YnN0cmluZyhlLmxlbmd0aCl9YDtwPWwuZ2V0KHUpO2JyZWFrfWxldCBtPSExO2lmKCFwKXtwPWwuZ2V0KGQpO209ITB9Y29uc3QgYj1gJHt0LmdldERvY0lkKCl9X3Mke3QuY3JlYXRlRm9udElkKCl9YDtpZighcCl7aWYoISgwLG4udmFsaWRhdGVGb250TmFtZSkodSkpe2Uuc2V0KGYsbnVsbCk7cmV0dXJuIG51bGx9Y29uc3QgdD0vYm9sZC9naS50ZXN0KHUpLGE9L29ibGlxdWV8aXRhbGljL2dpLnRlc3QodSk7Zz17Y3NzOmIsZ3Vlc3NGYWxsYmFjazohMCxsb2FkZWROYW1lOmIsYmFzZUZvbnROYW1lOnUsc3JjOmBsb2NhbCgke3V9KWAsc3R5bGU6dCYmYSYmY3x8dCYmc3x8YSYmb3x8aX07ZS5zZXQoZixnKTtyZXR1cm4gZ31jb25zdCB5PVtdO20mJigwLG4udmFsaWRhdGVGb250TmFtZSkodSkmJnkucHVzaChgbG9jYWwoJHt1fSlgKTtjb25zdHtzdHlsZTp3LHVsdGltYXRlOlN9PWdlbmVyYXRlRm9udChwLHksYSkseD1udWxsPT09UztnPXtjc3M6YCR7Yn0ke3g/IiI6YCwke1N9YH1gLGd1ZXNzRmFsbGJhY2s6eCxsb2FkZWROYW1lOmIsYmFzZUZvbnROYW1lOnUsc3JjOnkuam9pbigiLCIpLHN0eWxlOnd9O2Uuc2V0KGYsZyk7cmV0dXJuIGd9O3ZhciByPWEoMzgpLG49YSgzKTtjb25zdCBpPXtzdHlsZToibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCJ9LHM9e3N0eWxlOiJub3JtYWwiLHdlaWdodDoiYm9sZCJ9LG89e3N0eWxlOiJpdGFsaWMiLHdlaWdodDoibm9ybWFsIn0sYz17c3R5bGU6Iml0YWxpYyIsd2VpZ2h0OiJib2xkIn0sbD1uZXcgTWFwKFtbIlRpbWVzLVJvbWFuIix7bG9jYWw6WyJUaW1lcyBOZXcgUm9tYW4iLCJUaW1lcy1Sb21hbiIsIlRpbWVzIiwiTGliZXJhdGlvbiBTZXJpZiIsIk5pbWJ1cyBSb21hbiIsIk5pbWJ1cyBSb21hbiBMIiwiVGlub3MiLCJUaG9ybmRhbGUiLCJUZVggR3lyZSBUZXJtZXMiLCJGcmVlU2VyaWYiLCJEZWphVnUgU2VyaWYiLCJCaXRzdHJlYW0gVmVyYSBTZXJpZiIsIlVidW50dSJdLHN0eWxlOmksdWx0aW1hdGU6InNlcmlmIn1dLFsiVGltZXMtQm9sZCIse2FsaWFzOiJUaW1lcy1Sb21hbiIsc3R5bGU6cyx1bHRpbWF0ZToic2VyaWYifV0sWyJUaW1lcy1JdGFsaWMiLHthbGlhczoiVGltZXMtUm9tYW4iLHN0eWxlOm8sdWx0aW1hdGU6InNlcmlmIn1dLFsiVGltZXMtQm9sZEl0YWxpYyIse2FsaWFzOiJUaW1lcy1Sb21hbiIsc3R5bGU6Yyx1bHRpbWF0ZToic2VyaWYifV0sWyJIZWx2ZXRpY2EiLHtsb2NhbDpbIkhlbHZldGljYSIsIkhlbHZldGljYSBOZXVlIiwiQXJpYWwiLCJBcmlhbCBOb3ZhIiwiTGliZXJhdGlvbiBTYW5zIiwiQXJpbW8iLCJOaW1idXMgU2FucyIsIk5pbWJ1cyBTYW5zIEwiLCJBMDMwIiwiVGVYIEd5cmUgSGVyb3MiLCJGcmVlU2FucyIsIkRlamFWdSBTYW5zIiwiQWxiYW55IiwiQml0c3RyZWFtIFZlcmEgU2FucyIsIkFyaWFsIFVuaWNvZGUgTVMiLCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIkFwcGxlIFN5bWJvbHMiLCJDYW50YXJlbGwiXSxwYXRoOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZiIsc3R5bGU6aSx1bHRpbWF0ZToic2Fucy1zZXJpZiJ9XSxbIkhlbHZldGljYS1Cb2xkIix7YWxpYXM6IkhlbHZldGljYSIscGF0aDoiTGliZXJhdGlvblNhbnMtQm9sZC50dGYiLHN0eWxlOnMsdWx0aW1hdGU6InNhbnMtc2VyaWYifV0sWyJIZWx2ZXRpY2EtT2JsaXF1ZSIse2FsaWFzOiJIZWx2ZXRpY2EiLHBhdGg6IkxpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiLHN0eWxlOm8sdWx0aW1hdGU6InNhbnMtc2VyaWYifV0sWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLHthbGlhczoiSGVsdmV0aWNhIixwYXRoOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiIsc3R5bGU6Yyx1bHRpbWF0ZToic2Fucy1zZXJpZiJ9XSxbIkNvdXJpZXIiLHtsb2NhbDpbIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkxpYmVyYXRpb24gTW9ubyIsIk5pbWJ1cyBNb25vIiwiTmltYnVzIE1vbm8gTCIsIkNvdXNpbmUiLCJDdW1iZXJsYW5kIiwiVGVYIEd5cmUgQ3Vyc29yIiwiRnJlZU1vbm8iXSxzdHlsZTppLHVsdGltYXRlOiJtb25vc3BhY2UifV0sWyJDb3VyaWVyLUJvbGQiLHthbGlhczoiQ291cmllciIsc3R5bGU6cyx1bHRpbWF0ZToibW9ub3NwYWNlIn1dLFsiQ291cmllci1PYmxpcXVlIix7YWxpYXM6IkNvdXJpZXIiLHN0eWxlOm8sdWx0aW1hdGU6Im1vbm9zcGFjZSJ9XSxbIkNvdXJpZXItQm9sZE9ibGlxdWUiLHthbGlhczoiQ291cmllciIsc3R5bGU6Yyx1bHRpbWF0ZToibW9ub3NwYWNlIn1dLFsiQXJpYWxCbGFjayIse2xvY2FsOlsiQXJpYWwgQmxhY2siXSxzdHlsZTp7c3R5bGU6Im5vcm1hbCIsd2VpZ2h0OiI5MDAifSxmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGQifV0sWyJBcmlhbEJsYWNrLUJvbGQiLHthbGlhczoiQXJpYWxCbGFjayJ9XSxbIkFyaWFsQmxhY2stSXRhbGljIix7YWxpYXM6IkFyaWFsQmxhY2siLHN0eWxlOntzdHlsZToiaXRhbGljIix3ZWlnaHQ6IjkwMCJ9LGZhbGxiYWNrOiJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUifV0sWyJBcmlhbEJsYWNrLUJvbGRJdGFsaWMiLHthbGlhczoiQXJpYWxCbGFjay1JdGFsaWMifV0sWyJBcmlhbE5hcnJvdyIse2xvY2FsOlsiQXJpYWwgTmFycm93IiwiTGliZXJhdGlvbiBTYW5zIE5hcnJvdyIsIkhlbHZldGljYSBDb25kZW5zZWQiLCJOaW1idXMgU2FucyBOYXJyb3ciLCJUZVggR3lyZSBIZXJvcyBDbiJdLHN0eWxlOmksZmFsbGJhY2s6IkhlbHZldGljYSJ9XSxbIkFyaWFsTmFycm93LUJvbGQiLHthbGlhczoiQXJpYWxOYXJyb3ciLHN0eWxlOnMsZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkIn1dLFsiQXJpYWxOYXJyb3ctSXRhbGljIix7YWxpYXM6IkFyaWFsTmFycm93IixzdHlsZTpvLGZhbGxiYWNrOiJIZWx2ZXRpY2EtT2JsaXF1ZSJ9XSxbIkFyaWFsTmFycm93LUJvbGRJdGFsaWMiLHthbGlhczoiQXJpYWxOYXJyb3ciLHN0eWxlOmMsZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJ9XSxbIkNhbGlicmkiLHtsb2NhbDpbIkNhbGlicmkiLCJDYXJsaXRvIl0sc3R5bGU6aSxmYWxsYmFjazoiSGVsdmV0aWNhIn1dLFsiQ2FsaWJyaS1Cb2xkIix7YWxpYXM6IkNhbGlicmkiLHN0eWxlOnMsZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkIn1dLFsiQ2FsaWJyaS1JdGFsaWMiLHthbGlhczoiQ2FsaWJyaSIsc3R5bGU6byxmYWxsYmFjazoiSGVsdmV0aWNhLU9ibGlxdWUifV0sWyJDYWxpYnJpLUJvbGRJdGFsaWMiLHthbGlhczoiQ2FsaWJyaSIsc3R5bGU6YyxmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIn1dLFsiV2luZ2RpbmdzIix7bG9jYWw6WyJXaW5nZGluZ3MiLCJVUlcgRGluZ2JhdHMiXSxzdHlsZTppfV0sWyJXaW5nZGluZ3MtUmVndWxhciIse2FsaWFzOiJXaW5nZGluZ3MifV0sWyJXaW5nZGluZ3MtQm9sZCIse2FsaWFzOiJXaW5nZGluZ3MifV1dKSxoPW5ldyBNYXAoW1siQXJpYWwtQmxhY2siLCJBcmlhbEJsYWNrIl1dKTtmdW5jdGlvbiBnZW5lcmF0ZUZvbnQoe2FsaWFzOmUsbG9jYWw6dCxwYXRoOmEsZmFsbGJhY2s6cixzdHlsZTpuLHVsdGltYXRlOml9LGgsdSxkPSEwLGY9ITAsZz0iIil7Y29uc3QgcD17c3R5bGU6bnVsbCx1bHRpbWF0ZTpudWxsfTtpZih0KXtjb25zdCBlPWc/YCAke2d9YDoiIjtmb3IoY29uc3QgYSBvZiB0KWgucHVzaChgbG9jYWwoJHthfSR7ZX0pYCl9aWYoZSl7Y29uc3QgdD1sLmdldChlKSxpPWd8fGZ1bmN0aW9uIGdldFN0eWxlVG9BcHBlbmQoZSl7c3dpdGNoKGUpe2Nhc2UgczpyZXR1cm4iQm9sZCI7Y2FzZSBvOnJldHVybiJJdGFsaWMiO2Nhc2UgYzpyZXR1cm4iQm9sZCBJdGFsaWMiO2RlZmF1bHQ6aWYoImJvbGQiPT09ZT8ud2VpZ2h0KXJldHVybiJCb2xkIjtpZigiaXRhbGljIj09PWU/LnN0eWxlKXJldHVybiJJdGFsaWMifXJldHVybiIifShuKTtPYmplY3QuYXNzaWduKHAsZ2VuZXJhdGVGb250KHQsaCx1LGQmJiFyLGYmJiFhLGkpKX1uJiYocC5zdHlsZT1uKTtpJiYocC51bHRpbWF0ZT1pKTtpZihkJiZyKXtjb25zdCBlPWwuZ2V0KHIpLHt1bHRpbWF0ZTp0fT1nZW5lcmF0ZUZvbnQoZSxoLHUsZCxmJiYhYSxnKTtwLnVsdGltYXRlfHw9dH1mJiZhJiZ1JiZoLnB1c2goYHVybCgke3V9JHthfSlgKTtyZXR1cm4gcH19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5JbWFnZVJlc2l6ZXI9dm9pZCAwO3ZhciByPWEoMik7Y2xhc3MgSW1hZ2VSZXNpemVye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faW1nRGF0YT1lO3RoaXMuX2lzTWFzaz10fXN0YXRpYyBuZWVkc1RvQmVSZXNpemVkKGUsdCl7aWYoZTw9dGhpcy5fZ29vZFNxdWFyZUxlbmd0aCYmdDw9dGhpcy5fZ29vZFNxdWFyZUxlbmd0aClyZXR1cm4hMTtjb25zdHtNQVhfRElNOmF9PXRoaXM7aWYoZT5hfHx0PmEpcmV0dXJuITA7Y29uc3Qgcj1lKnQ7aWYodGhpcy5faGFzTWF4QXJlYSlyZXR1cm4gcj50aGlzLk1BWF9BUkVBO2lmKHI8dGhpcy5fZ29vZFNxdWFyZUxlbmd0aCoqMilyZXR1cm4hMTtpZih0aGlzLl9hcmVHb29kRGltcyhlLHQpKXt0aGlzLl9nb29kU3F1YXJlTGVuZ3RoPU1hdGgubWF4KHRoaXMuX2dvb2RTcXVhcmVMZW5ndGgsTWF0aC5mbG9vcihNYXRoLnNxcnQoZSp0KSkpO3JldHVybiExfXRoaXMuX2dvb2RTcXVhcmVMZW5ndGg9dGhpcy5fZ3Vlc3NNYXgodGhpcy5fZ29vZFNxdWFyZUxlbmd0aCxhLDEyOCwwKTtyZXR1cm4gcj4odGhpcy5NQVhfQVJFQT10aGlzLl9nb29kU3F1YXJlTGVuZ3RoKioyKX1zdGF0aWMgZ2V0IE1BWF9ESU0oKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiTUFYX0RJTSIsdGhpcy5fZ3Vlc3NNYXgoMjA0OCw2NTUzNywwLDEpKX1zdGF0aWMgZ2V0IE1BWF9BUkVBKCl7dGhpcy5faGFzTWF4QXJlYT0hMDtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiTUFYX0FSRUEiLHRoaXMuX2d1ZXNzTWF4KEltYWdlUmVzaXplci5fZ29vZFNxdWFyZUxlbmd0aCx0aGlzLk1BWF9ESU0sMTI4LDApKioyKX1zdGF0aWMgc2V0IE1BWF9BUkVBKGUpe2lmKGU+PTApe3RoaXMuX2hhc01heEFyZWE9ITA7KDAsci5zaGFkb3cpKHRoaXMsIk1BWF9BUkVBIixlKX19c3RhdGljIHNldE1heEFyZWEoZSl7dGhpcy5faGFzTWF4QXJlYXx8KHRoaXMuTUFYX0FSRUE9ZT4+Mil9c3RhdGljIF9hcmVHb29kRGltcyhlLHQpe3RyeXtjb25zdCBhPW5ldyBPZmZzY3JlZW5DYW52YXMoZSx0KSxyPWEuZ2V0Q29udGV4dCgiMmQiKTtyLmZpbGxSZWN0KDAsMCwxLDEpO2NvbnN0IG49ci5nZXRJbWFnZURhdGEoMCwwLDEsMSkuZGF0YVszXTthLndpZHRoPWEuaGVpZ2h0PTE7cmV0dXJuIDAhPT1ufWNhdGNoe3JldHVybiExfX1zdGF0aWMgX2d1ZXNzTWF4KGUsdCxhLHIpe2Zvcig7ZSthKzE8dDspe2NvbnN0IGE9TWF0aC5mbG9vcigoZSt0KS8yKSxuPXJ8fGE7dGhpcy5fYXJlR29vZERpbXMoYSxuKT9lPWE6dD1hfXJldHVybiBlfXN0YXRpYyBhc3luYyBjcmVhdGVJbWFnZShlLHQ9ITEpe3JldHVybiBuZXcgSW1hZ2VSZXNpemVyKGUsdCkuX2NyZWF0ZUltYWdlKCl9YXN5bmMgX2NyZWF0ZUltYWdlKCl7Y29uc3QgZT10aGlzLl9lbmNvZGVCTVAoKSx0PW5ldyBCbG9iKFtlLmJ1ZmZlcl0se3R5cGU6ImltYWdlL2JtcCJ9KSxhPWNyZWF0ZUltYWdlQml0bWFwKHQpLHtNQVhfQVJFQTpyLE1BWF9ESU06bn09SW1hZ2VSZXNpemVyLHtfaW1nRGF0YTppfT10aGlzLHt3aWR0aDpzLGhlaWdodDpvfT1pLGM9TWF0aC5tYXgocy9uLG8vbixNYXRoLnNxcnQocypvL3IpKSxsPU1hdGgubWF4KGMsMiksaD1NYXRoLnJvdW5kKDEwKihjKzEuMjUpKS8xMC9sLHU9TWF0aC5mbG9vcihNYXRoLmxvZzIoaCkpLGQ9bmV3IEFycmF5KHUrMikuZmlsbCgyKTtkWzBdPWw7ZC5zcGxpY2UoLTEsMSxoLygxPDx1KSk7bGV0IGY9cyxnPW8scD1hd2FpdCBhO2Zvcihjb25zdCBlIG9mIGQpe2NvbnN0IHQ9ZixhPWc7Zj1NYXRoLmZsb29yKGYvZSktMTtnPU1hdGguZmxvb3IoZy9lKS0xO2NvbnN0IHI9bmV3IE9mZnNjcmVlbkNhbnZhcyhmLGcpO3IuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UocCwwLDAsdCxhLDAsMCxmLGcpO3A9ci50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX1pLmRhdGE9bnVsbDtpLmJpdG1hcD1wO2kud2lkdGg9ZjtpLmhlaWdodD1nO3JldHVybiBpfV9lbmNvZGVCTVAoKXtjb25zdHt3aWR0aDplLGhlaWdodDp0LGtpbmQ6YX09dGhpcy5faW1nRGF0YTtsZXQgbixpPXRoaXMuX2ltZ0RhdGEuZGF0YSxzPW5ldyBVaW50OEFycmF5KDApLG89cyxjPTA7c3dpdGNoKGEpe2Nhc2Ugci5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6e249MTtzPW5ldyBVaW50OEFycmF5KHRoaXMuX2lzTWFzaz9bMjU1LDI1NSwyNTUsMjU1LDAsMCwwLDBdOlswLDAsMCwwLDI1NSwyNTUsMjU1LDI1NV0pO2NvbnN0IGE9ZSs3Pj4zLHI9YSszJi00O2lmKGEhPT1yKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KHIqdCk7bGV0IG49MDtmb3IobGV0IHM9MCxvPXQqYTtzPG87cys9YSxuKz1yKWUuc2V0KGkuc3ViYXJyYXkocyxzK2EpLG4pO2k9ZX1icmVha31jYXNlIHIuSW1hZ2VLaW5kLlJHQl8yNEJQUDpuPTI0O2lmKDMmZSl7Y29uc3QgYT0zKmUscj1hKzMmLTQsbj1yLWEscz1uZXcgVWludDhBcnJheShyKnQpO2xldCBvPTA7Zm9yKGxldCBlPTAscj10KmE7ZTxyO2UrPWEpe2NvbnN0IHQ9aS5zdWJhcnJheShlLGUrYSk7Zm9yKGxldCBlPTA7ZTxhO2UrPTMpe3NbbysrXT10W2UrMl07c1tvKytdPXRbZSsxXTtzW28rK109dFtlXX1vKz1ufWk9c31lbHNlIGZvcihsZXQgZT0wLHQ9aS5sZW5ndGg7ZTx0O2UrPTMpe2NvbnN0IHQ9aVtlXTtpW2VdPWlbZSsyXTtpW2UrMl09dH1icmVhaztjYXNlIHIuSW1hZ2VLaW5kLlJHQkFfMzJCUFA6bj0zMjtjPTM7bz1uZXcgVWludDhBcnJheSg2OCk7Y29uc3QgYT1uZXcgRGF0YVZpZXcoby5idWZmZXIpO2lmKHIuRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4pe2Euc2V0VWludDMyKDAsMjU1LCEwKTthLnNldFVpbnQzMig0LDY1MjgwLCEwKTthLnNldFVpbnQzMig4LDE2NzExNjgwLCEwKTthLnNldFVpbnQzMigxMiw0Mjc4MTkwMDgwLCEwKX1lbHNle2Euc2V0VWludDMyKDAsNDI3ODE5MDA4MCwhMCk7YS5zZXRVaW50MzIoNCwxNjcxMTY4MCwhMCk7YS5zZXRVaW50MzIoOCw2NTI4MCwhMCk7YS5zZXRVaW50MzIoMTIsMjU1LCEwKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQiKX1sZXQgbD0wO2NvbnN0IGg9NDArby5sZW5ndGgsdT0xNCtoK3MubGVuZ3RoK2kubGVuZ3RoLGQ9bmV3IFVpbnQ4QXJyYXkodSksZj1uZXcgRGF0YVZpZXcoZC5idWZmZXIpO2Yuc2V0VWludDE2KGwsMTk3NzgsITApO2wrPTI7Zi5zZXRVaW50MzIobCx1LCEwKTtsKz00O2Yuc2V0VWludDMyKGwsMCwhMCk7bCs9NDtmLnNldFVpbnQzMihsLDE0K2grcy5sZW5ndGgsITApO2wrPTQ7Zi5zZXRVaW50MzIobCxoLCEwKTtsKz00O2Yuc2V0SW50MzIobCxlLCEwKTtsKz00O2Yuc2V0SW50MzIobCwtdCwhMCk7bCs9NDtmLnNldFVpbnQxNihsLDEsITApO2wrPTI7Zi5zZXRVaW50MTYobCxuLCEwKTtsKz0yO2Yuc2V0VWludDMyKGwsYywhMCk7bCs9NDtmLnNldFVpbnQzMihsLDAsITApO2wrPTQ7Zi5zZXRJbnQzMihsLDAsITApO2wrPTQ7Zi5zZXRJbnQzMihsLDAsITApO2wrPTQ7Zi5zZXRVaW50MzIobCxzLmxlbmd0aC80LCEwKTtsKz00O2Yuc2V0VWludDMyKGwsMCwhMCk7bCs9NDtkLnNldChvLGwpO2wrPW8ubGVuZ3RoO2Quc2V0KHMsbCk7bCs9cy5sZW5ndGg7ZC5zZXQoaSxsKTtyZXR1cm4gZH19dC5JbWFnZVJlc2l6ZXI9SW1hZ2VSZXNpemVyO0ltYWdlUmVzaXplci5fZ29vZFNxdWFyZUxlbmd0aD0yMDQ4fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuTXVybXVySGFzaDNfNjQ9dm9pZCAwO3ZhciByPWEoMik7Y29uc3Qgbj0zMjg1Mzc3NTIwLGk9NDI5NDkwMTc2MCxzPTY1NTM1O3QuTXVybXVySGFzaDNfNjQ9Y2xhc3MgTXVybXVySGFzaDNfNjR7Y29uc3RydWN0b3IoZSl7dGhpcy5oMT1lPzQyOTQ5NjcyOTUmZTpuO3RoaXMuaDI9ZT80Mjk0OTY3Mjk1JmU6bn11cGRhdGUoZSl7bGV0IHQsYTtpZigic3RyaW5nIj09dHlwZW9mIGUpe3Q9bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCk7YT0wO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQocik7aWYobjw9MjU1KXRbYSsrXT1uO2Vsc2V7dFthKytdPW4+Pj44O3RbYSsrXT0yNTUmbn19fWVsc2V7aWYoISgwLHIuaXNBcnJheUJ1ZmZlcikoZSkpdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBkYXRhIGZvcm1hdCBpbiBNdXJtdXJIYXNoM182NF91cGRhdGUuIElucHV0IG11c3QgYmUgYSBzdHJpbmcgb3IgYXJyYXkuIik7dD1lLnNsaWNlKCk7YT10LmJ5dGVMZW5ndGh9Y29uc3Qgbj1hPj4yLG89YS00Km4sYz1uZXcgVWludDMyQXJyYXkodC5idWZmZXIsMCxuKTtsZXQgbD0wLGg9MCx1PXRoaXMuaDEsZD10aGlzLmgyO2NvbnN0IGY9MzQzMjkxODM1MyxnPTQ2MTg0NTkwNyxwPTExNjAxLG09MTM3MTU7Zm9yKGxldCBlPTA7ZTxuO2UrKylpZigxJmUpe2w9Y1tlXTtsPWwqZiZpfGwqcCZzO2w9bDw8MTV8bD4+PjE3O2w9bCpnJml8bCptJnM7dV49bDt1PXU8PDEzfHU+Pj4xOTt1PTUqdSszODY0MjkyMTk2fWVsc2V7aD1jW2VdO2g9aCpmJml8aCpwJnM7aD1oPDwxNXxoPj4+MTc7aD1oKmcmaXxoKm0mcztkXj1oO2Q9ZDw8MTN8ZD4+PjE5O2Q9NSpkKzM4NjQyOTIxOTZ9bD0wO3N3aXRjaChvKXtjYXNlIDM6bF49dFs0Km4rMl08PDE2O2Nhc2UgMjpsXj10WzQqbisxXTw8ODtjYXNlIDE6bF49dFs0Km5dO2w9bCpmJml8bCpwJnM7bD1sPDwxNXxsPj4+MTc7bD1sKmcmaXxsKm0mczsxJm4/dV49bDpkXj1sfXRoaXMuaDE9dTt0aGlzLmgyPWR9aGV4ZGlnZXN0KCl7bGV0IGU9dGhpcy5oMSx0PXRoaXMuaDI7ZV49dD4+PjE7ZT0zOTgxODA2Nzk3KmUmaXwzNjA0NSplJnM7dD00MjgzNTQzNTExKnQmaXwoMjk1MDE2Mzc5NyoodDw8MTZ8ZT4+PjE2KSZpKT4+PjE2O2VePXQ+Pj4xO2U9NDQ0OTg0NDAzKmUmaXw2MDQ5OSplJnM7dD0zMzAxODgyMzY2KnQmaXwoMzEyMDQzNzg5MyoodDw8MTZ8ZT4+PjE2KSZpKT4+PjE2O2VePXQ+Pj4xO3JldHVybihlPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsodD4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk9wZXJhdG9yTGlzdD12b2lkIDA7dmFyIHI9YSgyKTtmdW5jdGlvbiBhZGRTdGF0ZShlLHQsYSxyLG4pe2xldCBpPWU7Zm9yKGxldCBlPTAsYT10Lmxlbmd0aC0xO2U8YTtlKyspe2NvbnN0IGE9dFtlXTtpPWlbYV18fD1bXX1pW3QuYXQoLTEpXT17Y2hlY2tGbjphLGl0ZXJhdGVGbjpyLHByb2Nlc3NGbjpufX1jb25zdCBuPVtdO2FkZFN0YXRlKG4sW3IuT1BTLnNhdmUsci5PUFMudHJhbnNmb3JtLHIuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0LHIuT1BTLnJlc3RvcmVdLG51bGwsKGZ1bmN0aW9uIGl0ZXJhdGVJbmxpbmVJbWFnZUdyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksbj0odC0oZS5pQ3Vyci0zKSklNDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiBhW3RdPT09ci5PUFMuc2F2ZTtjYXNlIDE6cmV0dXJuIGFbdF09PT1yLk9QUy50cmFuc2Zvcm07Y2FzZSAyOnJldHVybiBhW3RdPT09ci5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q7Y2FzZSAzOnJldHVybiBhW3RdPT09ci5PUFMucmVzdG9yZX10aHJvdyBuZXcgRXJyb3IoYGl0ZXJhdGVJbmxpbmVJbWFnZUdyb3VwIC0gaW52YWxpZCBwb3M6ICR7bn1gKX0pLChmdW5jdGlvbiBmb3VuZElubGluZUltYWdlR3JvdXAoZSx0KXtjb25zdCBhPWUuZm5BcnJheSxuPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixzPWktMyxvPWktMixjPWktMSxsPU1hdGgubWluKE1hdGguZmxvb3IoKHQtcykvNCksMjAwKTtpZihsPDEwKXJldHVybiB0LSh0LXMpJTQ7bGV0IGg9MDtjb25zdCB1PVtdO2xldCBkPTAsZj0xLGc9MTtmb3IobGV0IGU9MDtlPGw7ZSsrKXtjb25zdCB0PW5bbysoZTw8MildLGE9bltjKyhlPDwyKV1bMF07aWYoZithLndpZHRoPjFlMyl7aD1NYXRoLm1heChoLGYpO2crPWQrMjtmPTA7ZD0wfXUucHVzaCh7dHJhbnNmb3JtOnQseDpmLHk6Zyx3OmEud2lkdGgsaDphLmhlaWdodH0pO2YrPWEud2lkdGgrMjtkPU1hdGgubWF4KGQsYS5oZWlnaHQpfWNvbnN0IHA9TWF0aC5tYXgoaCxmKSsxLG09ZytkKzEsYj1uZXcgVWludDhBcnJheShwKm0qNCkseT1wPDwyO2ZvcihsZXQgZT0wO2U8bDtlKyspe2NvbnN0IHQ9bltjKyhlPDwyKV1bMF0uZGF0YSxhPXVbZV0udzw8MjtsZXQgcj0wLGk9dVtlXS54K3VbZV0ueSpwPDwyO2Iuc2V0KHQuc3ViYXJyYXkoMCxhKSxpLXkpO2ZvcihsZXQgbj0wLHM9dVtlXS5oO248cztuKyspe2Iuc2V0KHQuc3ViYXJyYXkocixyK2EpLGkpO3IrPWE7aSs9eX1iLnNldCh0LnN1YmFycmF5KHItYSxyKSxpKTtmb3IoO2k+PTA7KXt0W2ktNF09dFtpXTt0W2ktM109dFtpKzFdO3RbaS0yXT10W2krMl07dFtpLTFdPXRbaSszXTt0W2krYV09dFtpK2EtNF07dFtpK2ErMV09dFtpK2EtM107dFtpK2ErMl09dFtpK2EtMl07dFtpK2ErM109dFtpK2EtMV07aS09eX19Y29uc3Qgdz17d2lkdGg6cCxoZWlnaHQ6bX07aWYoZS5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCl7Y29uc3QgZT1uZXcgT2Zmc2NyZWVuQ2FudmFzKHAsbSk7ZS5nZXRDb250ZXh0KCIyZCIpLnB1dEltYWdlRGF0YShuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShiLmJ1ZmZlcikscCxtKSwwLDApO3cuYml0bWFwPWUudHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7dy5kYXRhPW51bGx9ZWxzZXt3LmtpbmQ9ci5JbWFnZUtpbmQuUkdCQV8zMkJQUDt3LmRhdGE9Yn1hLnNwbGljZShzLDQqbCxyLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwKTtuLnNwbGljZShzLDQqbCxbdyx1XSk7cmV0dXJuIHMrMX0pKTthZGRTdGF0ZShuLFtyLk9QUy5zYXZlLHIuT1BTLnRyYW5zZm9ybSxyLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Qsci5PUFMucmVzdG9yZV0sbnVsbCwoZnVuY3Rpb24gaXRlcmF0ZUltYWdlTWFza0dyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksbj0odC0oZS5pQ3Vyci0zKSklNDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiBhW3RdPT09ci5PUFMuc2F2ZTtjYXNlIDE6cmV0dXJuIGFbdF09PT1yLk9QUy50cmFuc2Zvcm07Y2FzZSAyOnJldHVybiBhW3RdPT09ci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0O2Nhc2UgMzpyZXR1cm4gYVt0XT09PXIuT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VNYXNrR3JvdXAgLSBpbnZhbGlkIHBvczogJHtufWApfSksKGZ1bmN0aW9uIGZvdW5kSW1hZ2VNYXNrR3JvdXAoZSx0KXtjb25zdCBhPWUuZm5BcnJheSxuPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixzPWktMyxvPWktMixjPWktMTtsZXQgbD1NYXRoLmZsb29yKCh0LXMpLzQpO2lmKGw8MTApcmV0dXJuIHQtKHQtcyklNDtsZXQgaCx1LGQ9ITE7Y29uc3QgZj1uW2NdWzBdLGc9bltvXVswXSxwPW5bb11bMV0sbT1uW29dWzJdLGI9bltvXVszXTtpZihwPT09bSl7ZD0hMDtoPW8rNDtsZXQgZT1jKzQ7Zm9yKGxldCB0PTE7dDxsO3QrKyxoKz00LGUrPTQpe3U9bltoXTtpZihuW2VdWzBdIT09Znx8dVswXSE9PWd8fHVbMV0hPT1wfHx1WzJdIT09bXx8dVszXSE9PWIpe3Q8MTA/ZD0hMTpsPXQ7YnJlYWt9fX1pZihkKXtsPU1hdGgubWluKGwsMWUzKTtjb25zdCBlPW5ldyBGbG9hdDMyQXJyYXkoMipsKTtoPW87Zm9yKGxldCB0PTA7dDxsO3QrKyxoKz00KXt1PW5baF07ZVt0PDwxXT11WzRdO2VbMSsodDw8MSldPXVbNV19YS5zcGxpY2Uocyw0Kmwsci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KTtuLnNwbGljZShzLDQqbCxbZixnLHAsbSxiLGVdKX1lbHNle2w9TWF0aC5taW4obCwxMDApO2NvbnN0IGU9W107Zm9yKGxldCB0PTA7dDxsO3QrKyl7dT1uW28rKHQ8PDIpXTtjb25zdCBhPW5bYysodDw8MildWzBdO2UucHVzaCh7ZGF0YTphLmRhdGEsd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHQsaW50ZXJwb2xhdGU6YS5pbnRlcnBvbGF0ZSxjb3VudDphLmNvdW50LHRyYW5zZm9ybTp1fSl9YS5zcGxpY2Uocyw0Kmwsci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXApO24uc3BsaWNlKHMsNCpsLFtlXSl9cmV0dXJuIHMrMX0pKTthZGRTdGF0ZShuLFtyLk9QUy5zYXZlLHIuT1BTLnRyYW5zZm9ybSxyLk9QUy5wYWludEltYWdlWE9iamVjdCxyLk9QUy5yZXN0b3JlXSwoZnVuY3Rpb24oZSl7Y29uc3QgdD1lLmFyZ3NBcnJheSxhPWUuaUN1cnItMjtyZXR1cm4gMD09PXRbYV1bMV0mJjA9PT10W2FdWzJdfSksKGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZUdyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxpPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIGFbdF09PT1yLk9QUy5zYXZlO2Nhc2UgMTppZihhW3RdIT09ci5PUFMudHJhbnNmb3JtKXJldHVybiExO2NvbnN0IGk9ZS5pQ3Vyci0yLHM9bltpXVswXSxvPW5baV1bM107cmV0dXJuIG5bdF1bMF09PT1zJiYwPT09blt0XVsxXSYmMD09PW5bdF1bMl0mJm5bdF1bM109PT1vO2Nhc2UgMjppZihhW3RdIT09ci5PUFMucGFpbnRJbWFnZVhPYmplY3QpcmV0dXJuITE7Y29uc3QgYz1uW2UuaUN1cnItMV1bMF07cmV0dXJuIG5bdF1bMF09PT1jO2Nhc2UgMzpyZXR1cm4gYVt0XT09PXIuT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke2l9YCl9KSwoZnVuY3Rpb24oZSx0KXtjb25zdCBhPWUuZm5BcnJheSxuPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixzPWktMyxvPWktMixjPW5baS0xXVswXSxsPW5bb11bMF0saD1uW29dWzNdLHU9TWF0aC5taW4oTWF0aC5mbG9vcigodC1zKS80KSwxZTMpO2lmKHU8MylyZXR1cm4gdC0odC1zKSU0O2NvbnN0IGQ9bmV3IEZsb2F0MzJBcnJheSgyKnUpO2xldCBmPW87Zm9yKGxldCBlPTA7ZTx1O2UrKyxmKz00KXtjb25zdCB0PW5bZl07ZFtlPDwxXT10WzRdO2RbMSsoZTw8MSldPXRbNV19Y29uc3QgZz1bYyxsLGgsZF07YS5zcGxpY2Uocyw0KnUsci5PUFMucGFpbnRJbWFnZVhPYmplY3RSZXBlYXQpO24uc3BsaWNlKHMsNCp1LGcpO3JldHVybiBzKzF9KSk7YWRkU3RhdGUobixbci5PUFMuYmVnaW5UZXh0LHIuT1BTLnNldEZvbnQsci5PUFMuc2V0VGV4dE1hdHJpeCxyLk9QUy5zaG93VGV4dCxyLk9QUy5lbmRUZXh0XSxudWxsLChmdW5jdGlvbiBpdGVyYXRlU2hvd1RleHRHcm91cChlLHQpe2NvbnN0IGE9ZS5mbkFycmF5LG49ZS5hcmdzQXJyYXksaT0odC0oZS5pQ3Vyci00KSklNTtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBhW3RdPT09ci5PUFMuYmVnaW5UZXh0O2Nhc2UgMTpyZXR1cm4gYVt0XT09PXIuT1BTLnNldEZvbnQ7Y2FzZSAyOnJldHVybiBhW3RdPT09ci5PUFMuc2V0VGV4dE1hdHJpeDtjYXNlIDM6aWYoYVt0XSE9PXIuT1BTLnNob3dUZXh0KXJldHVybiExO2NvbnN0IGk9ZS5pQ3Vyci0zLHM9bltpXVswXSxvPW5baV1bMV07cmV0dXJuIG5bdF1bMF09PT1zJiZuW3RdWzFdPT09bztjYXNlIDQ6cmV0dXJuIGFbdF09PT1yLk9QUy5lbmRUZXh0fXRocm93IG5ldyBFcnJvcihgaXRlcmF0ZVNob3dUZXh0R3JvdXAgLSBpbnZhbGlkIHBvczogJHtpfWApfSksKGZ1bmN0aW9uKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXkscj1lLmFyZ3NBcnJheSxuPWUuaUN1cnIsaT1uLTQscz1uLTMsbz1uLTIsYz1uLTEsbD1uLGg9cltzXVswXSx1PXJbc11bMV07bGV0IGQ9TWF0aC5taW4oTWF0aC5mbG9vcigodC1pKS81KSwxZTMpO2lmKGQ8MylyZXR1cm4gdC0odC1pKSU1O2xldCBmPWk7aWYoaT49NCYmYVtpLTRdPT09YVtzXSYmYVtpLTNdPT09YVtvXSYmYVtpLTJdPT09YVtjXSYmYVtpLTFdPT09YVtsXSYmcltpLTRdWzBdPT09aCYmcltpLTRdWzFdPT09dSl7ZCsrO2YtPTV9bGV0IGc9Zis0O2ZvcihsZXQgZT0xO2U8ZDtlKyspe2Euc3BsaWNlKGcsMyk7ci5zcGxpY2UoZywzKTtnKz0yfXJldHVybiBnKzF9KSk7Y2xhc3MgTnVsbE9wdGltaXplcntjb25zdHJ1Y3RvcihlKXt0aGlzLnF1ZXVlPWV9X29wdGltaXplKCl7fXB1c2goZSx0KXt0aGlzLnF1ZXVlLmZuQXJyYXkucHVzaChlKTt0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKHQpO3RoaXMuX29wdGltaXplKCl9Zmx1c2goKXt9cmVzZXQoKXt9fWNsYXNzIFF1ZXVlT3B0aW1pemVyIGV4dGVuZHMgTnVsbE9wdGltaXplcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLnN0YXRlPW51bGw7dGhpcy5jb250ZXh0PXtpQ3VycjowLGZuQXJyYXk6ZS5mbkFycmF5LGFyZ3NBcnJheTplLmFyZ3NBcnJheSxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDohMX07dGhpcy5tYXRjaD1udWxsO3RoaXMubGFzdFByb2Nlc3NlZD0wfXNldCBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZChlKXt0aGlzLmNvbnRleHQuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9ZX1fb3B0aW1pemUoKXtjb25zdCBlPXRoaXMucXVldWUuZm5BcnJheTtsZXQgdD10aGlzLmxhc3RQcm9jZXNzZWQsYT1lLmxlbmd0aCxyPXRoaXMuc3RhdGUsaT10aGlzLm1hdGNoO2lmKCFyJiYhaSYmdCsxPT09YSYmIW5bZVt0XV0pe3RoaXMubGFzdFByb2Nlc3NlZD1hO3JldHVybn1jb25zdCBzPXRoaXMuY29udGV4dDtmb3IoO3Q8YTspe2lmKGkpe2lmKCgwLGkuaXRlcmF0ZUZuKShzLHQpKXt0Kys7Y29udGludWV9dD0oMCxpLnByb2Nlc3NGbikocyx0KzEpO2E9ZS5sZW5ndGg7aT1udWxsO3I9bnVsbDtpZih0Pj1hKWJyZWFrfXI9KHJ8fG4pW2VbdF1dO2lmKHImJiFBcnJheS5pc0FycmF5KHIpKXtzLmlDdXJyPXQ7dCsrO2lmKCFyLmNoZWNrRm58fCgwLHIuY2hlY2tGbikocykpe2k9cjtyPW51bGx9ZWxzZSByPW51bGx9ZWxzZSB0Kyt9dGhpcy5zdGF0ZT1yO3RoaXMubWF0Y2g9aTt0aGlzLmxhc3RQcm9jZXNzZWQ9dH1mbHVzaCgpe2Zvcig7dGhpcy5tYXRjaDspe2NvbnN0IGU9dGhpcy5xdWV1ZS5mbkFycmF5Lmxlbmd0aDt0aGlzLmxhc3RQcm9jZXNzZWQ9KDAsdGhpcy5tYXRjaC5wcm9jZXNzRm4pKHRoaXMuY29udGV4dCxlKTt0aGlzLm1hdGNoPW51bGw7dGhpcy5zdGF0ZT1udWxsO3RoaXMuX29wdGltaXplKCl9fXJlc2V0KCl7dGhpcy5zdGF0ZT1udWxsO3RoaXMubWF0Y2g9bnVsbDt0aGlzLmxhc3RQcm9jZXNzZWQ9MH19Y2xhc3MgT3BlcmF0b3JMaXN0e3N0YXRpYyBDSFVOS19TSVpFPTFlMztzdGF0aWMgQ0hVTktfU0laRV9BQk9VVD10aGlzLkNIVU5LX1NJWkUtNTtjb25zdHJ1Y3RvcihlPTAsdCl7dGhpcy5fc3RyZWFtU2luaz10O3RoaXMuZm5BcnJheT1bXTt0aGlzLmFyZ3NBcnJheT1bXTt0aGlzLm9wdGltaXplcj0hdHx8ZSZyLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUP25ldyBOdWxsT3B0aW1pemVyKHRoaXMpOm5ldyBRdWV1ZU9wdGltaXplcih0aGlzKTt0aGlzLmRlcGVuZGVuY2llcz1uZXcgU2V0O3RoaXMuX3RvdGFsTGVuZ3RoPTA7dGhpcy53ZWlnaHQ9MDt0aGlzLl9yZXNvbHZlZD10P251bGw6UHJvbWlzZS5yZXNvbHZlKCl9c2V0IGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKGUpe3RoaXMub3B0aW1pemVyLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPWV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmFyZ3NBcnJheS5sZW5ndGh9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVkfHx0aGlzLl9zdHJlYW1TaW5rLnJlYWR5fWdldCB0b3RhbExlbmd0aCgpe3JldHVybiB0aGlzLl90b3RhbExlbmd0aCt0aGlzLmxlbmd0aH1hZGRPcChlLHQpe3RoaXMub3B0aW1pemVyLnB1c2goZSx0KTt0aGlzLndlaWdodCsrO3RoaXMuX3N0cmVhbVNpbmsmJih0aGlzLndlaWdodD49T3BlcmF0b3JMaXN0LkNIVU5LX1NJWkV8fHRoaXMud2VpZ2h0Pj1PcGVyYXRvckxpc3QuQ0hVTktfU0laRV9BQk9VVCYmKGU9PT1yLk9QUy5yZXN0b3JlfHxlPT09ci5PUFMuZW5kVGV4dCkpJiZ0aGlzLmZsdXNoKCl9YWRkSW1hZ2VPcHMoZSx0LGEpe3ZvaWQgMCE9PWEmJnRoaXMuYWRkT3Aoci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsWyJPQyIsYV0pO3RoaXMuYWRkT3AoZSx0KTt2b2lkIDAhPT1hJiZ0aGlzLmFkZE9wKHIuT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pfWFkZERlcGVuZGVuY3koZSl7aWYoIXRoaXMuZGVwZW5kZW5jaWVzLmhhcyhlKSl7dGhpcy5kZXBlbmRlbmNpZXMuYWRkKGUpO3RoaXMuYWRkT3Aoci5PUFMuZGVwZW5kZW5jeSxbZV0pfX1hZGREZXBlbmRlbmNpZXMoZSl7Zm9yKGNvbnN0IHQgb2YgZSl0aGlzLmFkZERlcGVuZGVuY3kodCl9YWRkT3BMaXN0KGUpe2lmKGUgaW5zdGFuY2VvZiBPcGVyYXRvckxpc3Qpe2Zvcihjb25zdCB0IG9mIGUuZGVwZW5kZW5jaWVzKXRoaXMuZGVwZW5kZW5jaWVzLmFkZCh0KTtmb3IobGV0IHQ9MCxhPWUubGVuZ3RoO3Q8YTt0KyspdGhpcy5hZGRPcChlLmZuQXJyYXlbdF0sZS5hcmdzQXJyYXlbdF0pfWVsc2UoMCxyLndhcm4pKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkICJvcExpc3QiIHBhcmFtZXRlci4nKX1nZXRJUigpe3JldHVybntmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGVuZ3RoOnRoaXMubGVuZ3RofX1nZXQgX3RyYW5zZmVycygpe2NvbnN0IGU9W10se2ZuQXJyYXk6dCxhcmdzQXJyYXk6YSxsZW5ndGg6bn09dGhpcztmb3IobGV0IGk9MDtpPG47aSsrKXN3aXRjaCh0W2ldKXtjYXNlIHIuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OmNhc2Ugci5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDpjYXNlIHIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDpjb25zdCB0PWFbaV1bMF07IXQuY2FjaGVkJiZ0LmRhdGE/LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZlLnB1c2godC5kYXRhLmJ1ZmZlcil9cmV0dXJuIGV9Zmx1c2goZT0hMSx0PW51bGwpe3RoaXMub3B0aW1pemVyLmZsdXNoKCk7Y29uc3QgYT10aGlzLmxlbmd0aDt0aGlzLl90b3RhbExlbmd0aCs9YTt0aGlzLl9zdHJlYW1TaW5rLmVucXVldWUoe2ZuQXJyYXk6dGhpcy5mbkFycmF5LGFyZ3NBcnJheTp0aGlzLmFyZ3NBcnJheSxsYXN0Q2h1bms6ZSxzZXBhcmF0ZUFubm90czp0LGxlbmd0aDphfSwxLHRoaXMuX3RyYW5zZmVycyk7dGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKTt0aGlzLmZuQXJyYXkubGVuZ3RoPTA7dGhpcy5hcmdzQXJyYXkubGVuZ3RoPTA7dGhpcy53ZWlnaHQ9MDt0aGlzLm9wdGltaXplci5yZXNldCgpfX10Lk9wZXJhdG9yTGlzdD1PcGVyYXRvckxpc3R9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5QREZJbWFnZT12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMjgpLGk9YSg1KSxzPWEoMTIpLG89YSgxOCksYz1hKDYyKSxsPWEoMjYpLGg9YSgzMCksdT1hKDQpO2Z1bmN0aW9uIGRlY29kZUFuZENsYW1wKGUsdCxhLHIpeyhlPXQrZSphKTwwP2U9MDplPnImJihlPXIpO3JldHVybiBlfWZ1bmN0aW9uIHJlc2l6ZUltYWdlTWFzayhlLHQsYSxyLG4saSl7Y29uc3Qgcz1uKmk7bGV0IG87bz10PD04P25ldyBVaW50OEFycmF5KHMpOnQ8PTE2P25ldyBVaW50MTZBcnJheShzKTpuZXcgVWludDMyQXJyYXkocyk7Y29uc3QgYz1hL24sbD1yL2k7bGV0IGgsdSxkLGYsZz0wO2NvbnN0IHA9bmV3IFVpbnQxNkFycmF5KG4pLG09YTtmb3IoaD0wO2g8bjtoKyspcFtoXT1NYXRoLmZsb29yKGgqYyk7Zm9yKGg9MDtoPGk7aCsrKXtkPU1hdGguZmxvb3IoaCpsKSptO2Zvcih1PTA7dTxuO3UrKyl7Zj1kK3BbdV07b1tnKytdPWVbZl19fXJldHVybiBvfWNsYXNzIFBERkltYWdle2NvbnN0cnVjdG9yKHt4cmVmOmUscmVzOnQsaW1hZ2U6YSxpc0lubGluZTpuPSExLHNtYXNrOm89bnVsbCxtYXNrOmM9bnVsbCxpc01hc2s6bD0hMSxwZGZGdW5jdGlvbkZhY3Rvcnk6ZCxsb2NhbENvbG9yU3BhY2VDYWNoZTpmfSl7dGhpcy5pbWFnZT1hO2NvbnN0IGc9YS5kaWN0LHA9Zy5nZXQoIkYiLCJGaWx0ZXIiKTtsZXQgbTtpZihwIGluc3RhbmNlb2YgdS5OYW1lKW09cC5uYW1lO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShwKSl7Y29uc3QgdD1lLmZldGNoSWZSZWYocFswXSk7dCBpbnN0YW5jZW9mIHUuTmFtZSYmKG09dC5uYW1lKX1zd2l0Y2gobSl7Y2FzZSJKUFhEZWNvZGUiOmNvbnN0IGU9bmV3IGguSnB4SW1hZ2U7ZS5wYXJzZUltYWdlUHJvcGVydGllcyhhLnN0cmVhbSk7YS5zdHJlYW0ucmVzZXQoKTthLndpZHRoPWUud2lkdGg7YS5oZWlnaHQ9ZS5oZWlnaHQ7YS5iaXRzUGVyQ29tcG9uZW50PWUuYml0c1BlckNvbXBvbmVudDthLm51bUNvbXBzPWUuY29tcG9uZW50c0NvdW50O2JyZWFrO2Nhc2UiSkJJRzJEZWNvZGUiOmEuYml0c1BlckNvbXBvbmVudD0xO2EubnVtQ29tcHM9MX1sZXQgYj1nLmdldCgiVyIsIldpZHRoIikseT1nLmdldCgiSCIsIkhlaWdodCIpO2lmKE51bWJlci5pc0ludGVnZXIoYS53aWR0aCkmJmEud2lkdGg+MCYmTnVtYmVyLmlzSW50ZWdlcihhLmhlaWdodCkmJmEuaGVpZ2h0PjAmJihhLndpZHRoIT09Ynx8YS5oZWlnaHQhPT15KSl7KDAsci53YXJuKSgiUERGSW1hZ2UgLSB1c2luZyB0aGUgV2lkdGgvSGVpZ2h0IG9mIHRoZSBpbWFnZSBkYXRhLCByYXRoZXIgdGhhbiB0aGUgaW1hZ2UgZGljdGlvbmFyeS4iKTtiPWEud2lkdGg7eT1hLmhlaWdodH1pZihiPDF8fHk8MSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBpbWFnZSB3aWR0aDogJHtifSBvciBoZWlnaHQ6ICR7eX1gKTt0aGlzLndpZHRoPWI7dGhpcy5oZWlnaHQ9eTt0aGlzLmludGVycG9sYXRlPWcuZ2V0KCJJIiwiSW50ZXJwb2xhdGUiKTt0aGlzLmltYWdlTWFzaz1nLmdldCgiSU0iLCJJbWFnZU1hc2siKXx8ITE7dGhpcy5tYXR0ZT1nLmdldCgiTWF0dGUiKXx8ITE7bGV0IHc9YS5iaXRzUGVyQ29tcG9uZW50O2lmKCF3KXt3PWcuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iik7aWYoIXcpe2lmKCF0aGlzLmltYWdlTWFzayl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgQml0cyBwZXIgY29tcG9uZW50IG1pc3NpbmcgaW4gaW1hZ2U6ICR7dGhpcy5pbWFnZU1hc2t9YCk7dz0xfX10aGlzLmJwYz13O2lmKCF0aGlzLmltYWdlTWFzayl7bGV0IGk9Zy5nZXRSYXcoIkNTIil8fGcuZ2V0UmF3KCJDb2xvclNwYWNlIik7aWYoIWkpeygwLHIuaW5mbykoIkpQWCBpbWFnZXMgKHdoaWNoIGRvIG5vdCByZXF1aXJlIGNvbG9yIHNwYWNlcykiKTtzd2l0Y2goYS5udW1Db21wcyl7Y2FzZSAxOmk9dS5OYW1lLmdldCgiRGV2aWNlR3JheSIpO2JyZWFrO2Nhc2UgMzppPXUuTmFtZS5nZXQoIkRldmljZVJHQiIpO2JyZWFrO2Nhc2UgNDppPXUuTmFtZS5nZXQoIkRldmljZUNNWUsiKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgSlBYIGltYWdlcyB3aXRoICR7YS5udW1Db21wc30gY29sb3IgY29tcG9uZW50cyBub3Qgc3VwcG9ydGVkLmApfX10aGlzLmNvbG9yU3BhY2U9cy5Db2xvclNwYWNlLnBhcnNlKHtjczppLHhyZWY6ZSxyZXNvdXJjZXM6bj90Om51bGwscGRmRnVuY3Rpb25GYWN0b3J5OmQsbG9jYWxDb2xvclNwYWNlQ2FjaGU6Zn0pO3RoaXMubnVtQ29tcHM9dGhpcy5jb2xvclNwYWNlLm51bUNvbXBzfXRoaXMuZGVjb2RlPWcuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTt0aGlzLm5lZWRzRGVjb2RlPSExO2lmKHRoaXMuZGVjb2RlJiYodGhpcy5jb2xvclNwYWNlJiYhdGhpcy5jb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSx3KXx8bCYmIXMuQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsMSkpKXt0aGlzLm5lZWRzRGVjb2RlPSEwO2NvbnN0IGU9KDE8PHcpLTE7dGhpcy5kZWNvZGVDb2VmZmljaWVudHM9W107dGhpcy5kZWNvZGVBZGRlbmRzPVtdO2NvbnN0IHQ9IkluZGV4ZWQiPT09dGhpcy5jb2xvclNwYWNlPy5uYW1lO2ZvcihsZXQgYT0wLHI9MDthPHRoaXMuZGVjb2RlLmxlbmd0aDthKz0yLCsrcil7Y29uc3Qgbj10aGlzLmRlY29kZVthXSxpPXRoaXMuZGVjb2RlW2ErMV07dGhpcy5kZWNvZGVDb2VmZmljaWVudHNbcl09dD8oaS1uKS9lOmktbjt0aGlzLmRlY29kZUFkZGVuZHNbcl09dD9uOmUqbn19aWYobyl0aGlzLnNtYXNrPW5ldyBQREZJbWFnZSh7eHJlZjplLHJlczp0LGltYWdlOm8saXNJbmxpbmU6bixwZGZGdW5jdGlvbkZhY3Rvcnk6ZCxsb2NhbENvbG9yU3BhY2VDYWNoZTpmfSk7ZWxzZSBpZihjKWlmKGMgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pe2MuZGljdC5nZXQoIklNIiwiSW1hZ2VNYXNrIik/dGhpcy5tYXNrPW5ldyBQREZJbWFnZSh7eHJlZjplLHJlczp0LGltYWdlOmMsaXNJbmxpbmU6bixpc01hc2s6ITAscGRmRnVuY3Rpb25GYWN0b3J5OmQsbG9jYWxDb2xvclNwYWNlQ2FjaGU6Zn0pOigwLHIud2FybikoIklnbm9yaW5nIC9NYXNrIGluIGltYWdlIHdpdGhvdXQgL0ltYWdlTWFzay4iKX1lbHNlIHRoaXMubWFzaz1jfXN0YXRpYyBhc3luYyBidWlsZEltYWdlKHt4cmVmOmUscmVzOnQsaW1hZ2U6YSxpc0lubGluZTpuPSExLHBkZkZ1bmN0aW9uRmFjdG9yeTpzLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm99KXtjb25zdCBjPWE7bGV0IGw9bnVsbCxoPW51bGw7Y29uc3QgdT1hLmRpY3QuZ2V0KCJTTWFzayIpLGQ9YS5kaWN0LmdldCgiTWFzayIpO3U/dSBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbT9sPXU6KDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgL1NNYXNrIGZvcm1hdC4iKTpkJiYoZCBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbXx8QXJyYXkuaXNBcnJheShkKT9oPWQ6KDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgL01hc2sgZm9ybWF0LiIpKTtyZXR1cm4gbmV3IFBERkltYWdlKHt4cmVmOmUscmVzOnQsaW1hZ2U6Yyxpc0lubGluZTpuLHNtYXNrOmwsbWFzazpoLHBkZkZ1bmN0aW9uRmFjdG9yeTpzLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm99KX1zdGF0aWMgY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6ZSx3aWR0aDp0LGhlaWdodDphLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOnIsaW52ZXJzZURlY29kZTpuLGludGVycG9sYXRlOml9KXtjb25zdCBzPSh0Kzc+PjMpKmEsbz1lLmJ5dGVMZW5ndGg7bGV0IGMsbDtpZighcnx8biYmIShzPT09bykpaWYobil7Yz1uZXcgVWludDhBcnJheShzKTtjLnNldChlKTtjLmZpbGwoMjU1LG8pfWVsc2UgYz1uZXcgVWludDhBcnJheShlKTtlbHNlIGM9ZTtpZihuKWZvcihsPTA7bDxvO2wrKyljW2xdXj0yNTU7cmV0dXJue2RhdGE6Yyx3aWR0aDp0LGhlaWdodDphLGludGVycG9sYXRlOml9fXN0YXRpYyBhc3luYyBjcmVhdGVNYXNrKHtpbWdBcnJheTplLHdpZHRoOnQsaGVpZ2h0OmEsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06aSxpbnZlcnNlRGVjb2RlOnMsaW50ZXJwb2xhdGU6byxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpsPSExfSl7Y29uc3QgaD0xPT09dCYmMT09PWEmJnM9PT0oMD09PWUubGVuZ3RofHwhISgxMjgmZVswXSkpO2lmKGgpcmV0dXJue2lzU2luZ2xlT3BhcXVlUGl4ZWw6aH07aWYobCl7aWYoYy5JbWFnZVJlc2l6ZXIubmVlZHNUb0JlUmVzaXplZCh0LGEpKXtjb25zdCBpPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KmEqNCk7KDAsbi5jb252ZXJ0QmxhY2tBbmRXaGl0ZVRvUkdCQSkoe3NyYzplLGRlc3Q6aSx3aWR0aDp0LGhlaWdodDphLG5vbkJsYWNrQ29sb3I6MCxpbnZlcnNlRGVjb2RlOnN9KTtyZXR1cm4gYy5JbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2Uoe2tpbmQ6ci5JbWFnZUtpbmQuUkdCQV8zMkJQUCxkYXRhOmksd2lkdGg6dCxoZWlnaHQ6YSxpbnRlcnBvbGF0ZTpvfSl9Y29uc3QgaT1uZXcgT2Zmc2NyZWVuQ2FudmFzKHQsYSksbD1pLmdldENvbnRleHQoIjJkIiksaD1sLmNyZWF0ZUltYWdlRGF0YSh0LGEpOygwLG4uY29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkEpKHtzcmM6ZSxkZXN0OmguZGF0YSx3aWR0aDp0LGhlaWdodDphLG5vbkJsYWNrQ29sb3I6MCxpbnZlcnNlRGVjb2RlOnN9KTtsLnB1dEltYWdlRGF0YShoLDAsMCk7cmV0dXJue2RhdGE6bnVsbCx3aWR0aDp0LGhlaWdodDphLGludGVycG9sYXRlOm8sYml0bWFwOmkudHJhbnNmZXJUb0ltYWdlQml0bWFwKCl9fXJldHVybiB0aGlzLmNyZWF0ZVJhd01hc2soe2ltZ0FycmF5OmUsd2lkdGg6dCxoZWlnaHQ6YSxpbnZlcnNlRGVjb2RlOnMsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06aSxpbnRlcnBvbGF0ZTpvfSl9Z2V0IGRyYXdXaWR0aCgpe3JldHVybiBNYXRoLm1heCh0aGlzLndpZHRoLHRoaXMuc21hc2s/LndpZHRofHwwLHRoaXMubWFzaz8ud2lkdGh8fDApfWdldCBkcmF3SGVpZ2h0KCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuaGVpZ2h0LHRoaXMuc21hc2s/LmhlaWdodHx8MCx0aGlzLm1hc2s/LmhlaWdodHx8MCl9ZGVjb2RlQnVmZmVyKGUpe2NvbnN0IHQ9dGhpcy5icGMsYT10aGlzLm51bUNvbXBzLHI9dGhpcy5kZWNvZGVBZGRlbmRzLG49dGhpcy5kZWNvZGVDb2VmZmljaWVudHMsaT0oMTw8dCktMTtsZXQgcyxvO2lmKDE9PT10KXtmb3Iocz0wLG89ZS5sZW5ndGg7czxvO3MrKyllW3NdPSshZVtzXTtyZXR1cm59bGV0IGM9MDtmb3Iocz0wLG89dGhpcy53aWR0aCp0aGlzLmhlaWdodDtzPG87cysrKWZvcihsZXQgdD0wO3Q8YTt0Kyspe2VbY109ZGVjb2RlQW5kQ2xhbXAoZVtjXSxyW3RdLG5bdF0saSk7YysrfX1nZXRDb21wb25lbnRzKGUpe2NvbnN0IHQ9dGhpcy5icGM7aWYoOD09PXQpcmV0dXJuIGU7Y29uc3QgYT10aGlzLndpZHRoLHI9dGhpcy5oZWlnaHQsbj10aGlzLm51bUNvbXBzLGk9YSpyKm47bGV0IHMsbz0wO3M9dDw9OD9uZXcgVWludDhBcnJheShpKTp0PD0xNj9uZXcgVWludDE2QXJyYXkoaSk6bmV3IFVpbnQzMkFycmF5KGkpO2NvbnN0IGM9YSpuLGw9KDE8PHQpLTE7bGV0IGgsdSxkPTA7aWYoMT09PXQpe2xldCB0LGEsbjtmb3IobGV0IGk9MDtpPHI7aSsrKXthPWQrKC04JmMpO249ZCtjO2Zvcig7ZDxhOyl7dT1lW28rK107c1tkXT11Pj43JjE7c1tkKzFdPXU+PjYmMTtzW2QrMl09dT4+NSYxO3NbZCszXT11Pj40JjE7c1tkKzRdPXU+PjMmMTtzW2QrNV09dT4+MiYxO3NbZCs2XT11Pj4xJjE7c1tkKzddPTEmdTtkKz04fWlmKGQ8bil7dT1lW28rK107dD0xMjg7Zm9yKDtkPG47KXtzW2QrK109KyEhKHUmdCk7dD4+PTF9fX19ZWxzZXtsZXQgYT0wO3U9MDtmb3IoZD0wLGg9aTtkPGg7KytkKXtpZihkJWM9PTApe3U9MDthPTB9Zm9yKDthPHQ7KXt1PXU8PDh8ZVtvKytdO2ErPTh9Y29uc3Qgcj1hLXQ7bGV0IG49dT4+cjtuPDA/bj0wOm4+bCYmKG49bCk7c1tkXT1uO3UmPSgxPDxyKS0xO2E9cn19cmV0dXJuIHN9ZmlsbE9wYWNpdHkoZSx0LGEsbixpKXtjb25zdCBzPXRoaXMuc21hc2ssbz10aGlzLm1hc2s7bGV0IGMsbCxoLHUsZCxmO2lmKHMpe2w9cy53aWR0aDtoPXMuaGVpZ2h0O2M9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGwqaCk7cy5maWxsR3JheUJ1ZmZlcihjKTtsPT09dCYmaD09PWF8fChjPXJlc2l6ZUltYWdlTWFzayhjLHMuYnBjLGwsaCx0LGEpKX1lbHNlIGlmKG8paWYobyBpbnN0YW5jZW9mIFBERkltYWdlKXtsPW8ud2lkdGg7aD1vLmhlaWdodDtjPW5ldyBVaW50OENsYW1wZWRBcnJheShsKmgpO28ubnVtQ29tcHM9MTtvLmZpbGxHcmF5QnVmZmVyKGMpO2Zvcih1PTAsZD1sKmg7dTxkOysrdSljW3VdPTI1NS1jW3VdO2w9PT10JiZoPT09YXx8KGM9cmVzaXplSW1hZ2VNYXNrKGMsby5icGMsbCxoLHQsYSkpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkobykpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVua25vd24gbWFzayBmb3JtYXQuIik7e2M9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqYSk7Y29uc3QgZT10aGlzLm51bUNvbXBzO2Zvcih1PTAsZD10KmE7dTxkOysrdSl7bGV0IHQ9MDtjb25zdCBhPXUqZTtmb3IoZj0wO2Y8ZTsrK2Ype2NvbnN0IGU9aVthK2ZdLHI9MipmO2lmKGU8b1tyXXx8ZT5vW3IrMV0pe3Q9MjU1O2JyZWFrfX1jW3VdPXR9fX1pZihjKWZvcih1PTAsZj0zLGQ9dCpuO3U8ZDsrK3UsZis9NCllW2ZdPWNbdV07ZWxzZSBmb3IodT0wLGY9MyxkPXQqbjt1PGQ7Kyt1LGYrPTQpZVtmXT0yNTV9dW5kb1ByZWJsZW5kKGUsdCxhKXtjb25zdCByPXRoaXMuc21hc2s/Lm1hdHRlO2lmKCFyKXJldHVybjtjb25zdCBuPXRoaXMuY29sb3JTcGFjZS5nZXRSZ2IociwwKSxpPW5bMF0scz1uWzFdLG89blsyXSxjPXQqYSo0O2ZvcihsZXQgdD0wO3Q8Yzt0Kz00KXtjb25zdCBhPWVbdCszXTtpZigwPT09YSl7ZVt0XT0yNTU7ZVt0KzFdPTI1NTtlW3QrMl09MjU1O2NvbnRpbnVlfWNvbnN0IHI9MjU1L2E7ZVt0XT0oZVt0XS1pKSpyK2k7ZVt0KzFdPShlW3QrMV0tcykqcitzO2VbdCsyXT0oZVt0KzJdLW8pKnIrb319YXN5bmMgY3JlYXRlSW1hZ2VEYXRhKGU9ITEsdD0hMSl7Y29uc3QgYT10aGlzLmRyYXdXaWR0aCxuPXRoaXMuZHJhd0hlaWdodCxpPXt3aWR0aDphLGhlaWdodDpuLGludGVycG9sYXRlOnRoaXMuaW50ZXJwb2xhdGUsa2luZDowLGRhdGE6bnVsbH0scz10aGlzLm51bUNvbXBzLG89dGhpcy53aWR0aCxoPXRoaXMuaGVpZ2h0LHU9dGhpcy5icGMsZD1vKnMqdSs3Pj4zLGY9dCYmYy5JbWFnZVJlc2l6ZXIubmVlZHNUb0JlUmVzaXplZChhLG4pO2lmKCFlKXtsZXQgZTsiRGV2aWNlR3JheSI9PT10aGlzLmNvbG9yU3BhY2UubmFtZSYmMT09PXU/ZT1yLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDoiRGV2aWNlUkdCIiE9PXRoaXMuY29sb3JTcGFjZS5uYW1lfHw4IT09dXx8dGhpcy5uZWVkc0RlY29kZXx8KGU9ci5JbWFnZUtpbmQuUkdCXzI0QlBQKTtpZihlJiYhdGhpcy5zbWFzayYmIXRoaXMubWFzayYmYT09PW8mJm49PT1oKXtjb25zdCBzPXRoaXMuZ2V0SW1hZ2VCeXRlcyhoKmQse30pO2lmKHQpcmV0dXJuIGY/Yy5JbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2Uoe2RhdGE6cyxraW5kOmUsd2lkdGg6YSxoZWlnaHQ6bixpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlfSx0aGlzLm5lZWRzRGVjb2RlKTp0aGlzLmNyZWF0ZUJpdG1hcChlLG8saCxzKTtpLmtpbmQ9ZTtpLmRhdGE9cztpZih0aGlzLm5lZWRzRGVjb2RlKXsoMCxyLmFzc2VydCkoZT09PXIuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQLCJQREZJbWFnZS5jcmVhdGVJbWFnZURhdGE6IFRoZSBpbWFnZSBtdXN0IGJlIGdyYXlzY2FsZS4iKTtjb25zdCB0PWkuZGF0YTtmb3IobGV0IGU9MCxhPXQubGVuZ3RoO2U8YTtlKyspdFtlXV49MjU1fXJldHVybiBpfWlmKHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBsLkpwZWdTdHJlYW0mJiF0aGlzLnNtYXNrJiYhdGhpcy5tYXNrJiYhdGhpcy5uZWVkc0RlY29kZSl7bGV0IGU9aCpkO2lmKHQmJiFmKXtsZXQgdD0hMTtzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6ZSo9NDt0PSEwO2JyZWFrO2Nhc2UiRGV2aWNlUkdCIjplPWUvMyo0O3Q9ITA7YnJlYWs7Y2FzZSJEZXZpY2VDTVlLIjp0PSEwfWlmKHQpe2NvbnN0IHQ9dGhpcy5nZXRJbWFnZUJ5dGVzKGUse2RyYXdXaWR0aDphLGRyYXdIZWlnaHQ6bixmb3JjZVJHQkE6ITB9KTtyZXR1cm4gdGhpcy5jcmVhdGVCaXRtYXAoci5JbWFnZUtpbmQuUkdCQV8zMkJQUCxhLG4sdCl9fWVsc2Ugc3dpdGNoKHRoaXMuY29sb3JTcGFjZS5uYW1lKXtjYXNlIkRldmljZUdyYXkiOmUqPTM7Y2FzZSJEZXZpY2VSR0IiOmNhc2UiRGV2aWNlQ01ZSyI6aS5raW5kPXIuSW1hZ2VLaW5kLlJHQl8yNEJQUDtpLmRhdGE9dGhpcy5nZXRJbWFnZUJ5dGVzKGUse2RyYXdXaWR0aDphLGRyYXdIZWlnaHQ6bixmb3JjZVJHQjohMH0pO3JldHVybiBmP2MuSW1hZ2VSZXNpemVyLmNyZWF0ZUltYWdlKGkpOml9fX1jb25zdCBnPXRoaXMuZ2V0SW1hZ2VCeXRlcyhoKmQse2ludGVybmFsOiEwfSkscD0wfGcubGVuZ3RoL2Qqbi9oLG09dGhpcy5nZXRDb21wb25lbnRzKGcpO2xldCBiLHksdyxTLHgsQztpZih0JiYhZil7dz1uZXcgT2Zmc2NyZWVuQ2FudmFzKGEsbik7Uz13LmdldENvbnRleHQoIjJkIik7eD1TLmNyZWF0ZUltYWdlRGF0YShhLG4pO0M9eC5kYXRhfWkua2luZD1yLkltYWdlS2luZC5SR0JBXzMyQlBQO2lmKGV8fHRoaXMuc21hc2t8fHRoaXMubWFzayl7dCYmIWZ8fChDPW5ldyBVaW50OENsYW1wZWRBcnJheShhKm4qNCkpO2I9MTt5PSEwO3RoaXMuZmlsbE9wYWNpdHkoQyxhLG4scCxtKX1lbHNle2lmKCF0fHxmKXtpLmtpbmQ9ci5JbWFnZUtpbmQuUkdCXzI0QlBQO0M9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGEqbiozKTtiPTB9ZWxzZXtuZXcgVWludDMyQXJyYXkoQy5idWZmZXIpLmZpbGwoci5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NSk7Yj0xfXk9ITF9dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIobSk7dGhpcy5jb2xvclNwYWNlLmZpbGxSZ2IoQyxvLGgsYSxuLHAsdSxtLGIpO3kmJnRoaXMudW5kb1ByZWJsZW5kKEMsYSxwKTtpZih0JiYhZil7Uy5wdXRJbWFnZURhdGEoeCwwLDApO3JldHVybntkYXRhOm51bGwsd2lkdGg6YSxoZWlnaHQ6bixiaXRtYXA6dy50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKSxpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlfX1pLmRhdGE9QztyZXR1cm4gZj9jLkltYWdlUmVzaXplci5jcmVhdGVJbWFnZShpKTppfWZpbGxHcmF5QnVmZmVyKGUpe2NvbnN0IHQ9dGhpcy5udW1Db21wcztpZigxIT09dCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgUmVhZGluZyBncmF5IHNjYWxlIGZyb20gYSBjb2xvciBpbWFnZTogJHt0fWApO2NvbnN0IGE9dGhpcy53aWR0aCxuPXRoaXMuaGVpZ2h0LGk9dGhpcy5icGMscz1hKnQqaSs3Pj4zLG89dGhpcy5nZXRJbWFnZUJ5dGVzKG4qcyx7aW50ZXJuYWw6ITB9KSxjPXRoaXMuZ2V0Q29tcG9uZW50cyhvKTtsZXQgbCxoO2lmKDE9PT1pKXtoPWEqbjtpZih0aGlzLm5lZWRzRGVjb2RlKWZvcihsPTA7bDxoOysrbCllW2xdPWNbbF0tMSYyNTU7ZWxzZSBmb3IobD0wO2w8aDsrK2wpZVtsXT0yNTUmLWNbbF07cmV0dXJufXRoaXMubmVlZHNEZWNvZGUmJnRoaXMuZGVjb2RlQnVmZmVyKGMpO2g9YSpuO2NvbnN0IHU9MjU1LygoMTw8aSktMSk7Zm9yKGw9MDtsPGg7KytsKWVbbF09dSpjW2xdfWNyZWF0ZUJpdG1hcChlLHQsYSxpKXtjb25zdCBzPW5ldyBPZmZzY3JlZW5DYW52YXModCxhKSxvPXMuZ2V0Q29udGV4dCgiMmQiKTtsZXQgYztpZihlPT09ci5JbWFnZUtpbmQuUkdCQV8zMkJQUCljPW5ldyBJbWFnZURhdGEoaSx0LGEpO2Vsc2V7Yz1vLmNyZWF0ZUltYWdlRGF0YSh0LGEpOygwLG4uY29udmVydFRvUkdCQSkoe2tpbmQ6ZSxzcmM6aSxkZXN0Om5ldyBVaW50MzJBcnJheShjLmRhdGEuYnVmZmVyKSx3aWR0aDp0LGhlaWdodDphLGludmVyc2VEZWNvZGU6dGhpcy5uZWVkc0RlY29kZX0pfW8ucHV0SW1hZ2VEYXRhKGMsMCwwKTtyZXR1cm57ZGF0YTpudWxsLHdpZHRoOnQsaGVpZ2h0OmEsYml0bWFwOnMudHJhbnNmZXJUb0ltYWdlQml0bWFwKCksaW50ZXJwb2xhdGU6dGhpcy5pbnRlcnBvbGF0ZX19Z2V0SW1hZ2VCeXRlcyhlLHtkcmF3V2lkdGg6dCxkcmF3SGVpZ2h0OmEsZm9yY2VSR0JBOm49ITEsZm9yY2VSR0I6aT0hMSxpbnRlcm5hbDpzPSExfSl7dGhpcy5pbWFnZS5yZXNldCgpO3RoaXMuaW1hZ2UuZHJhd1dpZHRoPXR8fHRoaXMud2lkdGg7dGhpcy5pbWFnZS5kcmF3SGVpZ2h0PWF8fHRoaXMuaGVpZ2h0O3RoaXMuaW1hZ2UuZm9yY2VSR0JBPSEhbjt0aGlzLmltYWdlLmZvcmNlUkdCPSEhaTtjb25zdCBjPXRoaXMuaW1hZ2UuZ2V0Qnl0ZXMoZSk7aWYoc3x8dGhpcy5pbWFnZSBpbnN0YW5jZW9mIG8uRGVjb2RlU3RyZWFtKXJldHVybiBjOygwLHIuYXNzZXJ0KShjIGluc3RhbmNlb2YgVWludDhBcnJheSwnUERGSW1hZ2UuZ2V0SW1hZ2VCeXRlczogVW5zdXBwb3J0ZWQgImltYWdlQnl0ZXMiIHR5cGUuJyk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGMpfX10LlBERkltYWdlPVBERkltYWdlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ2F0YWxvZz12b2lkIDA7dmFyIHI9YSgzKSxuPWEoMiksaT1hKDQpLHM9YSg2Nyksbz1hKDUpLGM9YSg2OCksbD1hKDEyKSxoPWEoNjkpLHU9YSg1OSksZD1hKDcwKSxmPWEoNzIpO2Z1bmN0aW9uIGZldGNoRGVzdGluYXRpb24oZSl7ZSBpbnN0YW5jZW9mIGkuRGljdCYmKGU9ZS5nZXQoIkQiKSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpudWxsfWNsYXNzIENhdGFsb2d7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnBkZk1hbmFnZXI9ZTt0aGlzLnhyZWY9dDt0aGlzLl9jYXREaWN0PXQuZ2V0Q2F0YWxvZ09iaigpO2lmKCEodGhpcy5fY2F0RGljdCBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7dGhpcy50b3BsZXZlbFBhZ2VzRGljdDt0aGlzLl9hY3R1YWxOdW1QYWdlcz1udWxsO3RoaXMuZm9udENhY2hlPW5ldyBpLlJlZlNldENhY2hlO3RoaXMuYnVpbHRJbkNNYXBDYWNoZT1uZXcgTWFwO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPW5ldyBNYXA7dGhpcy5nbG9iYWxJbWFnZUNhY2hlPW5ldyB1Lkdsb2JhbEltYWdlQ2FjaGU7dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGU9bmV3IGkuUmVmU2V0Q2FjaGU7dGhpcy5wYWdlSW5kZXhDYWNoZT1uZXcgaS5SZWZTZXRDYWNoZTt0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9bmV3IGkuUmVmU2V0O3RoaXMuc3lzdGVtRm9udENhY2hlPW5ldyBNYXB9Y2xvbmVEaWN0KCl7cmV0dXJuIHRoaXMuX2NhdERpY3QuY2xvbmUoKX1nZXQgdmVyc2lvbigpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlZlcnNpb24iKTtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXtpZihyLlBERl9WRVJTSU9OX1JFR0VYUC50ZXN0KGUubmFtZSkpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInZlcnNpb24iLGUubmFtZSk7KDAsbi53YXJuKShgSW52YWxpZCBQREYgY2F0YWxvZyB2ZXJzaW9uOiAke2UubmFtZX1gKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywidmVyc2lvbiIsbnVsbCl9Z2V0IGxhbmcoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJMYW5nIik7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImxhbmciLCJzdHJpbmciPT10eXBlb2YgZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlKTpudWxsKX1nZXQgbmVlZHNSZW5kZXJpbmcoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOZWVkc1JlbmRlcmluZyIpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJuZWVkc1JlbmRlcmluZyIsImJvb2xlYW4iPT10eXBlb2YgZSYmZSl9Z2V0IGNvbGxlY3Rpb24oKXtsZXQgZT1udWxsO3RyeXtjb25zdCB0PXRoaXMuX2NhdERpY3QuZ2V0KCJDb2xsZWN0aW9uIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKSgiQ2Fubm90IGZldGNoIENvbGxlY3Rpb24gZW50cnk7IGFzc3VtaW5nIG5vIGNvbGxlY3Rpb24gaXMgcHJlc2VudC4iKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiY29sbGVjdGlvbiIsZSl9Z2V0IGFjcm9Gb3JtKCl7bGV0IGU9bnVsbDt0cnl7Y29uc3QgdD10aGlzLl9jYXREaWN0LmdldCgiQWNyb0Zvcm0iKTt0IGluc3RhbmNlb2YgaS5EaWN0JiZ0LnNpemU+MCYmKGU9dCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHIuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLmluZm8pKCJDYW5ub3QgZmV0Y2ggQWNyb0Zvcm0gZW50cnk7IGFzc3VtaW5nIG5vIGZvcm1zIGFyZSBwcmVzZW50LiIpfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJhY3JvRm9ybSIsZSl9Z2V0IGFjcm9Gb3JtUmVmKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldFJhdygiQWNyb0Zvcm0iKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYWNyb0Zvcm1SZWYiLGUgaW5zdGFuY2VvZiBpLlJlZj9lOm51bGwpfWdldCBtZXRhZGF0YSgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIk1ldGFkYXRhIik7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJtZXRhZGF0YSIsbnVsbCk7bGV0IHQ9bnVsbDt0cnl7Y29uc3QgYT10aGlzLnhyZWYuZmV0Y2goZSwhdGhpcy54cmVmLmVuY3J5cHQ/LmVuY3J5cHRNZXRhZGF0YSk7aWYoYSBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSYmYS5kaWN0IGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBlPWEuZGljdC5nZXQoIlR5cGUiKSxyPWEuZGljdC5nZXQoIlN1YnR5cGUiKTtpZigoMCxpLmlzTmFtZSkoZSwiTWV0YWRhdGEiKSYmKDAsaS5pc05hbWUpKHIsIlhNTCIpKXtjb25zdCBlPSgwLG4uc3RyaW5nVG9VVEY4U3RyaW5nKShhLmdldFN0cmluZygpKTtlJiYodD1uZXcgZC5NZXRhZGF0YVBhcnNlcihlKS5zZXJpYWxpemFibGUpfX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHIuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLmluZm8pKGBTa2lwcGluZyBpbnZhbGlkIE1ldGFkYXRhOiAiJHtlfSIuYCl9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm1ldGFkYXRhIix0KX1nZXQgbWFya0luZm8oKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRNYXJrSW5mbygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgiVW5hYmxlIHRvIHJlYWQgbWFyayBpbmZvLiIpfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJtYXJrSW5mbyIsZSl9X3JlYWRNYXJrSW5mbygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk1hcmtJbmZvIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gbnVsbDtjb25zdCB0PXtNYXJrZWQ6ITEsVXNlclByb3BlcnRpZXM6ITEsU3VzcGVjdHM6ITF9O2Zvcihjb25zdCBhIGluIHQpe2NvbnN0IHI9ZS5nZXQoYSk7ImJvb2xlYW4iPT10eXBlb2YgciYmKHRbYV09cil9cmV0dXJuIHR9Z2V0IHN0cnVjdFRyZWVSb290KCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkU3RydWN0VHJlZVJvb3QoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoIlVuYWJsZSByZWFkIHRvIHN0cnVjdFRyZWVSb290IGluZm8uIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInN0cnVjdFRyZWVSb290IixlKX1fcmVhZFN0cnVjdFRyZWVSb290KCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldFJhdygiU3RydWN0VHJlZVJvb3QiKSx0PXRoaXMueHJlZi5mZXRjaElmUmVmKGUpO2lmKCEodCBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgZi5TdHJ1Y3RUcmVlUm9vdCh0LGUpO2EuaW5pdCgpO3JldHVybiBhfWdldCB0b3BsZXZlbFBhZ2VzRGljdCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VzIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS4iKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidG9wbGV2ZWxQYWdlc0RpY3QiLGUpfWdldCBkb2N1bWVudE91dGxpbmUoKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9X3JlYWREb2N1bWVudE91dGxpbmUoKXtsZXQgZT10aGlzLl9jYXREaWN0LmdldCgiT3V0bGluZXMiKTtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiBudWxsO2U9ZS5nZXRSYXcoIkZpcnN0Iik7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKXJldHVybiBudWxsO2NvbnN0IHQ9e2l0ZW1zOltdfSxhPVt7b2JqOmUscGFyZW50OnR9XSxyPW5ldyBpLlJlZlNldDtyLnB1dChlKTtjb25zdCBzPXRoaXMueHJlZixvPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtmb3IoO2EubGVuZ3RoPjA7KXtjb25zdCB0PWEuc2hpZnQoKSxjPXMuZmV0Y2hJZlJlZih0Lm9iaik7aWYobnVsbD09PWMpY29udGludWU7aWYoIWMuaGFzKCJUaXRsZSIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIG91dGxpbmUgaXRlbSBlbmNvdW50ZXJlZC4iKTtjb25zdCBoPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O0NhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6YyxyZXN1bHRPYmo6aCxkb2NCYXNlVXJsOnRoaXMuYmFzZVVybCxkb2NBdHRhY2htZW50czp0aGlzLmF0dGFjaG1lbnRzfSk7Y29uc3QgdT1jLmdldCgiVGl0bGUiKSxkPWMuZ2V0KCJGIil8fDAsZj1jLmdldEFycmF5KCJDIiksZz1jLmdldCgiQ291bnQiKTtsZXQgcD1vOyFBcnJheS5pc0FycmF5KGYpfHwzIT09Zi5sZW5ndGh8fDA9PT1mWzBdJiYwPT09ZlsxXSYmMD09PWZbMl18fChwPWwuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoZiwwKSk7Y29uc3QgbT17YWN0aW9uOmguYWN0aW9uLGF0dGFjaG1lbnQ6aC5hdHRhY2htZW50LGRlc3Q6aC5kZXN0LHVybDpoLnVybCx1bnNhZmVVcmw6aC51bnNhZmVVcmwsbmV3V2luZG93OmgubmV3V2luZG93LHNldE9DR1N0YXRlOmguc2V0T0NHU3RhdGUsdGl0bGU6KDAsbi5zdHJpbmdUb1BERlN0cmluZykodSksY29sb3I6cCxjb3VudDpOdW1iZXIuaXNJbnRlZ2VyKGcpP2c6dm9pZCAwLGJvbGQ6ISEoMiZkKSxpdGFsaWM6ISEoMSZkKSxpdGVtczpbXX07dC5wYXJlbnQuaXRlbXMucHVzaChtKTtlPWMuZ2V0UmF3KCJGaXJzdCIpO2lmKGUgaW5zdGFuY2VvZiBpLlJlZiYmIXIuaGFzKGUpKXthLnB1c2goe29iajplLHBhcmVudDptfSk7ci5wdXQoZSl9ZT1jLmdldFJhdygiTmV4dCIpO2lmKGUgaW5zdGFuY2VvZiBpLlJlZiYmIXIuaGFzKGUpKXthLnB1c2goe29iajplLHBhcmVudDp0LnBhcmVudH0pO3IucHV0KGUpfX1yZXR1cm4gdC5pdGVtcy5sZW5ndGg+MD90Lml0ZW1zOm51bGx9Z2V0IHBlcm1pc3Npb25zKCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkUGVybWlzc2lvbnMoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoIlVuYWJsZSB0byByZWFkIHBlcm1pc3Npb25zLiIpfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJwZXJtaXNzaW9ucyIsZSl9X3JlYWRQZXJtaXNzaW9ucygpe2NvbnN0IGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJFbmNyeXB0Iik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gbnVsbDtsZXQgdD1lLmdldCgiUCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gbnVsbDt0Kz0yKiozMjtjb25zdCBhPVtdO2Zvcihjb25zdCBlIGluIG4uUGVybWlzc2lvbkZsYWcpe2NvbnN0IHI9bi5QZXJtaXNzaW9uRmxhZ1tlXTt0JnImJmEucHVzaChyKX1yZXR1cm4gYX1nZXQgb3B0aW9uYWxDb250ZW50Q29uZmlnKCl7bGV0IGU9bnVsbDt0cnl7Y29uc3QgdD10aGlzLl9jYXREaWN0LmdldCgiT0NQcm9wZXJ0aWVzIik7aWYoIXQpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7Y29uc3QgYT10LmdldCgiRCIpO2lmKCFhKXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO2NvbnN0IHI9dC5nZXQoIk9DR3MiKTtpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4oMCxuLnNoYWRvdykodGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTtjb25zdCBzPVtdLG89W107Zm9yKGNvbnN0IGUgb2Ygcil7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKWNvbnRpbnVlO28ucHVzaChlKTtjb25zdCB0PXRoaXMueHJlZi5mZXRjaElmUmVmKGUpO3MucHVzaCh7aWQ6ZS50b1N0cmluZygpLG5hbWU6InN0cmluZyI9PXR5cGVvZiB0LmdldCgiTmFtZSIpPygwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHQuZ2V0KCJOYW1lIikpOm51bGwsaW50ZW50OiJzdHJpbmciPT10eXBlb2YgdC5nZXQoIkludGVudCIpPygwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHQuZ2V0KCJJbnRlbnQiKSk6bnVsbH0pfWU9dGhpcy5fcmVhZE9wdGlvbmFsQ29udGVudENvbmZpZyhhLG8pO2UuZ3JvdXBzPXN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHIuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLndhcm4pKGBVbmFibGUgdG8gcmVhZCBvcHRpb25hbCBjb250ZW50IGNvbmZpZzogJHtlfWApfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLGUpfV9yZWFkT3B0aW9uYWxDb250ZW50Q29uZmlnKGUsdCl7ZnVuY3Rpb24gcGFyc2VPbk9mZihlKXtjb25zdCBhPVtdO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGNvbnN0IHIgb2YgZSlyIGluc3RhbmNlb2YgaS5SZWYmJnQuaW5jbHVkZXMocikmJmEucHVzaChyLnRvU3RyaW5nKCkpO3JldHVybiBhfWZ1bmN0aW9uIHBhcnNlT3JkZXIoZSxhPTApe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiBudWxsO2NvbnN0IG49W107Zm9yKGNvbnN0IHMgb2YgZSl7aWYocyBpbnN0YW5jZW9mIGkuUmVmJiZ0LmluY2x1ZGVzKHMpKXtyLnB1dChzKTtuLnB1c2gocy50b1N0cmluZygpKTtjb250aW51ZX1jb25zdCBlPXBhcnNlTmVzdGVkT3JkZXIocyxhKTtlJiZuLnB1c2goZSl9aWYoYT4wKXJldHVybiBuO2NvbnN0IHM9W107Zm9yKGNvbnN0IGUgb2YgdClyLmhhcyhlKXx8cy5wdXNoKGUudG9TdHJpbmcoKSk7cy5sZW5ndGgmJm4ucHVzaCh7bmFtZTpudWxsLG9yZGVyOnN9KTtyZXR1cm4gbn1mdW5jdGlvbiBwYXJzZU5lc3RlZE9yZGVyKGUsdCl7aWYoKyt0PnMpeygwLG4ud2FybikoInBhcnNlTmVzdGVkT3JkZXIgLSByZWFjaGVkIE1BWF9ORVNURURfTEVWRUxTLiIpO3JldHVybiBudWxsfWNvbnN0IHI9YS5mZXRjaElmUmVmKGUpO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybiBudWxsO2NvbnN0IGk9YS5mZXRjaElmUmVmKHJbMF0pO2lmKCJzdHJpbmciIT10eXBlb2YgaSlyZXR1cm4gbnVsbDtjb25zdCBvPXBhcnNlT3JkZXIoci5zbGljZSgxKSx0KTtyZXR1cm4gbyYmby5sZW5ndGg/e25hbWU6KDAsbi5zdHJpbmdUb1BERlN0cmluZykoaSksb3JkZXI6b306bnVsbH1jb25zdCBhPXRoaXMueHJlZixyPW5ldyBpLlJlZlNldCxzPTEwO3JldHVybntuYW1lOiJzdHJpbmciPT10eXBlb2YgZS5nZXQoIk5hbWUiKT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiTmFtZSIpKTpudWxsLGNyZWF0b3I6InN0cmluZyI9PXR5cGVvZiBlLmdldCgiQ3JlYXRvciIpPygwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJDcmVhdG9yIikpOm51bGwsYmFzZVN0YXRlOmUuZ2V0KCJCYXNlU3RhdGUiKWluc3RhbmNlb2YgaS5OYW1lP2UuZ2V0KCJCYXNlU3RhdGUiKS5uYW1lOm51bGwsb246cGFyc2VPbk9mZihlLmdldCgiT04iKSksb2ZmOnBhcnNlT25PZmYoZS5nZXQoIk9GRiIpKSxvcmRlcjpwYXJzZU9yZGVyKGUuZ2V0KCJPcmRlciIpKSxncm91cHM6bnVsbH19c2V0QWN0dWFsTnVtUGFnZXMoZT1udWxsKXt0aGlzLl9hY3R1YWxOdW1QYWdlcz1lfWdldCBoYXNBY3R1YWxOdW1QYWdlcygpe3JldHVybiBudWxsIT09dGhpcy5fYWN0dWFsTnVtUGFnZXN9Z2V0IF9wYWdlc0NvdW50KCl7Y29uc3QgZT10aGlzLnRvcGxldmVsUGFnZXNEaWN0LmdldCgiQ291bnQiKTtpZighTnVtYmVyLmlzSW50ZWdlcihlKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZSBjb3VudCBpbiB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeSBpcyBub3QgYW4gaW50ZWdlci4iKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX3BhZ2VzQ291bnQiLGUpfWdldCBudW1QYWdlcygpe3JldHVybiB0aGlzLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuX2FjdHVhbE51bVBhZ2VzOnRoaXMuX3BhZ2VzQ291bnR9Z2V0IGRlc3RpbmF0aW9ucygpe2NvbnN0IGU9dGhpcy5fcmVhZERlc3RzKCksdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGUgaW5zdGFuY2VvZiBzLk5hbWVUcmVlKWZvcihjb25zdFthLHJdb2YgZS5nZXRBbGwoKSl7Y29uc3QgZT1mZXRjaERlc3RpbmF0aW9uKHIpO2UmJih0WygwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGEpXT1lKX1lbHNlIGUgaW5zdGFuY2VvZiBpLkRpY3QmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSxhKXtjb25zdCByPWZldGNoRGVzdGluYXRpb24oYSk7ciYmKHRbZV09cil9KSk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImRlc3RpbmF0aW9ucyIsdCl9Z2V0RGVzdGluYXRpb24oZSl7Y29uc3QgdD10aGlzLl9yZWFkRGVzdHMoKTtpZih0IGluc3RhbmNlb2Ygcy5OYW1lVHJlZSl7Y29uc3QgYT1mZXRjaERlc3RpbmF0aW9uKHQuZ2V0KGUpKTtpZihhKXJldHVybiBhO2NvbnN0IHI9dGhpcy5kZXN0aW5hdGlvbnNbZV07aWYocil7KDAsbi53YXJuKShgRm91bmQgIiR7ZX0iIGF0IGFuIGluY29ycmVjdCBwb3NpdGlvbiBpbiB0aGUgTmFtZVRyZWUuYCk7cmV0dXJuIHJ9fWVsc2UgaWYodCBpbnN0YW5jZW9mIGkuRGljdCl7Y29uc3QgYT1mZXRjaERlc3RpbmF0aW9uKHQuZ2V0KGUpKTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfV9yZWFkRGVzdHMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpO3JldHVybiBlPy5oYXMoIkRlc3RzIik/bmV3IHMuTmFtZVRyZWUoZS5nZXRSYXcoIkRlc3RzIiksdGhpcy54cmVmKTp0aGlzLl9jYXREaWN0LmhhcygiRGVzdHMiKT90aGlzLl9jYXREaWN0LmdldCgiRGVzdHMiKTp2b2lkIDB9Z2V0IHBhZ2VMYWJlbHMoKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRQYWdlTGFiZWxzKCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHIuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLndhcm4pKCJVbmFibGUgdG8gcmVhZCBwYWdlIGxhYmVscy4iKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywicGFnZUxhYmVscyIsZSl9X3JlYWRQYWdlTGFiZWxzKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldFJhdygiUGFnZUxhYmVscyIpO2lmKCFlKXJldHVybiBudWxsO2NvbnN0IHQ9bmV3IEFycmF5KHRoaXMubnVtUGFnZXMpO2xldCBhPW51bGwsbz0iIjtjb25zdCBjPW5ldyBzLk51bWJlclRyZWUoZSx0aGlzLnhyZWYpLmdldEFsbCgpO2xldCBsPSIiLGg9MTtmb3IobGV0IGU9MCxzPXRoaXMubnVtUGFnZXM7ZTxzO2UrKyl7Y29uc3Qgcz1jLmdldChlKTtpZih2b2lkIDAhPT1zKXtpZighKHMgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJQYWdlTGFiZWwgaXMgbm90IGEgZGljdGlvbmFyeS4iKTtpZihzLmhhcygiVHlwZSIpJiYhKDAsaS5pc05hbWUpKHMuZ2V0KCJUeXBlIiksIlBhZ2VMYWJlbCIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIHR5cGUgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7aWYocy5oYXMoIlMiKSl7Y29uc3QgZT1zLmdldCgiUyIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuTmFtZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgc3R5bGUgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7YT1lLm5hbWV9ZWxzZSBhPW51bGw7aWYocy5oYXMoIlAiKSl7Y29uc3QgZT1zLmdldCgiUCIpO2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBwcmVmaXggaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7bz0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlKX1lbHNlIG89IiI7aWYocy5oYXMoIlN0Iikpe2NvbnN0IGU9cy5nZXQoIlN0Iik7aWYoIShOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPj0xKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBzdGFydCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtoPWV9ZWxzZSBoPTF9c3dpdGNoKGEpe2Nhc2UiRCI6bD1oO2JyZWFrO2Nhc2UiUiI6Y2FzZSJyIjpsPSgwLHIudG9Sb21hbk51bWVyYWxzKShoLCJyIj09PWEpO2JyZWFrO2Nhc2UiQSI6Y2FzZSJhIjpjb25zdCBlPTI2LHQ9ImEiPT09YT85Nzo2NSxpPWgtMTtsPVN0cmluZy5mcm9tQ2hhckNvZGUodCtpJWUpLnJlcGVhdChNYXRoLmZsb29yKGkvZSkrMSk7YnJlYWs7ZGVmYXVsdDppZihhKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKGBJbnZhbGlkIHN0eWxlICIke2F9IiBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5gKTtsPSIifXRbZV09bytsO2grK31yZXR1cm4gdH1nZXQgcGFnZUxheW91dCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VMYXlvdXQiKTtsZXQgdD0iIjtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiU2luZ2xlUGFnZSI6Y2FzZSJPbmVDb2x1bW4iOmNhc2UiVHdvQ29sdW1uTGVmdCI6Y2FzZSJUd29Db2x1bW5SaWdodCI6Y2FzZSJUd29QYWdlTGVmdCI6Y2FzZSJUd29QYWdlUmlnaHQiOnQ9ZS5uYW1lfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJwYWdlTGF5b3V0Iix0KX1nZXQgcGFnZU1vZGUoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJQYWdlTW9kZSIpO2xldCB0PSJVc2VOb25lIjtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiVXNlTm9uZSI6Y2FzZSJVc2VPdXRsaW5lcyI6Y2FzZSJVc2VUaHVtYnMiOmNhc2UiRnVsbFNjcmVlbiI6Y2FzZSJVc2VPQyI6Y2FzZSJVc2VBdHRhY2htZW50cyI6dD1lLm5hbWV9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInBhZ2VNb2RlIix0KX1nZXQgdmlld2VyUHJlZmVyZW5jZXMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJWaWV3ZXJQcmVmZXJlbmNlcyIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInZpZXdlclByZWZlcmVuY2VzIixudWxsKTtsZXQgdD1udWxsO2Zvcihjb25zdCBhIG9mIGUuZ2V0S2V5cygpKXtjb25zdCByPWUuZ2V0KGEpO2xldCBzO3N3aXRjaChhKXtjYXNlIkhpZGVUb29sYmFyIjpjYXNlIkhpZGVNZW51YmFyIjpjYXNlIkhpZGVXaW5kb3dVSSI6Y2FzZSJGaXRXaW5kb3ciOmNhc2UiQ2VudGVyV2luZG93IjpjYXNlIkRpc3BsYXlEb2NUaXRsZSI6Y2FzZSJQaWNrVHJheUJ5UERGU2l6ZSI6ImJvb2xlYW4iPT10eXBlb2YgciYmKHM9cik7YnJlYWs7Y2FzZSJOb25GdWxsU2NyZWVuUGFnZU1vZGUiOmlmKHIgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKHIubmFtZSl7Y2FzZSJVc2VOb25lIjpjYXNlIlVzZU91dGxpbmVzIjpjYXNlIlVzZVRodW1icyI6Y2FzZSJVc2VPQyI6cz1yLm5hbWU7YnJlYWs7ZGVmYXVsdDpzPSJVc2VOb25lIn1icmVhaztjYXNlIkRpcmVjdGlvbiI6aWYociBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goci5uYW1lKXtjYXNlIkwyUiI6Y2FzZSJSMkwiOnM9ci5uYW1lO2JyZWFrO2RlZmF1bHQ6cz0iTDJSIn1icmVhaztjYXNlIlZpZXdBcmVhIjpjYXNlIlZpZXdDbGlwIjpjYXNlIlByaW50QXJlYSI6Y2FzZSJQcmludENsaXAiOmlmKHIgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKHIubmFtZSl7Y2FzZSJNZWRpYUJveCI6Y2FzZSJDcm9wQm94IjpjYXNlIkJsZWVkQm94IjpjYXNlIlRyaW1Cb3giOmNhc2UiQXJ0Qm94IjpzPXIubmFtZTticmVhaztkZWZhdWx0OnM9IkNyb3BCb3gifWJyZWFrO2Nhc2UiUHJpbnRTY2FsaW5nIjppZihyIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChyLm5hbWUpe2Nhc2UiTm9uZSI6Y2FzZSJBcHBEZWZhdWx0IjpzPXIubmFtZTticmVhaztkZWZhdWx0OnM9IkFwcERlZmF1bHQifWJyZWFrO2Nhc2UiRHVwbGV4IjppZihyIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChyLm5hbWUpe2Nhc2UiU2ltcGxleCI6Y2FzZSJEdXBsZXhGbGlwU2hvcnRFZGdlIjpjYXNlIkR1cGxleEZsaXBMb25nRWRnZSI6cz1yLm5hbWU7YnJlYWs7ZGVmYXVsdDpzPSJOb25lIn1icmVhaztjYXNlIlByaW50UGFnZVJhbmdlIjppZihBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aCUyPT0wKXtyLmV2ZXJ5KCgoZSx0LGEpPT5OdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjAmJigwPT09dHx8ZT49YVt0LTFdKSYmZTw9dGhpcy5udW1QYWdlcykpJiYocz1yKX1icmVhaztjYXNlIk51bUNvcGllcyI6TnVtYmVyLmlzSW50ZWdlcihyKSYmcj4wJiYocz1yKTticmVhaztkZWZhdWx0OigwLG4ud2FybikoYElnbm9yaW5nIG5vbi1zdGFuZGFyZCBrZXkgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICR7YX0uYCk7Y29udGludWV9aWYodm9pZCAwIT09cyl7dHx8KHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7dFthXT1zfWVsc2UoMCxuLndhcm4pKGBCYWQgdmFsdWUsIGZvciBrZXkgIiR7YX0iLCBpbiBWaWV3ZXJQcmVmZXJlbmNlczogJHtyfS5gKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywidmlld2VyUHJlZmVyZW5jZXMiLHQpfWdldCBvcGVuQWN0aW9uKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiT3BlbkFjdGlvbiIpLHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlIGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBhPW5ldyBpLkRpY3QodGhpcy54cmVmKTthLnNldCgiQSIsZSk7Y29uc3Qgcj17dXJsOm51bGwsZGVzdDpudWxsLGFjdGlvbjpudWxsfTtDYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmEscmVzdWx0T2JqOnJ9KTtBcnJheS5pc0FycmF5KHIuZGVzdCk/dC5kZXN0PXIuZGVzdDpyLmFjdGlvbiYmKHQuYWN0aW9uPXIuYWN0aW9uKX1lbHNlIEFycmF5LmlzQXJyYXkoZSkmJih0LmRlc3Q9ZSk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm9wZW5BY3Rpb24iLCgwLG4ub2JqZWN0U2l6ZSkodCk+MD90Om51bGwpfWdldCBhdHRhY2htZW50cygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7bGV0IHQ9bnVsbDtpZihlIGluc3RhbmNlb2YgaS5EaWN0JiZlLmhhcygiRW1iZWRkZWRGaWxlcyIpKXtjb25zdCBhPW5ldyBzLk5hbWVUcmVlKGUuZ2V0UmF3KCJFbWJlZGRlZEZpbGVzIiksdGhpcy54cmVmKTtmb3IoY29uc3RbZSxyXW9mIGEuZ2V0QWxsKCkpe2NvbnN0IGE9bmV3IGguRmlsZVNwZWMocix0aGlzLnhyZWYpO3R8fCh0PU9iamVjdC5jcmVhdGUobnVsbCkpO3RbKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSldPWEuc2VyaWFsaXphYmxlfX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYXR0YWNobWVudHMiLHQpfWdldCB4ZmFJbWFnZXMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpO2xldCB0PW51bGw7aWYoZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5oYXMoIlhGQUltYWdlcyIpKXtjb25zdCBhPW5ldyBzLk5hbWVUcmVlKGUuZ2V0UmF3KCJYRkFJbWFnZXMiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLHJdb2YgYS5nZXRBbGwoKSl7dHx8KHQ9bmV3IGkuRGljdCh0aGlzLnhyZWYpKTt0LnNldCgoMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlKSxyKX19cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInhmYUltYWdlcyIsdCl9X2NvbGxlY3RKYXZhU2NyaXB0KCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKTtsZXQgdD1udWxsO2Z1bmN0aW9uIGFwcGVuZElmSmF2YVNjcmlwdERpY3QoZSxhKXtpZighKGEgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybjtpZighKDAsaS5pc05hbWUpKGEuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSlyZXR1cm47bGV0IHI9YS5nZXQoIkpTIik7aWYociBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSlyPXIuZ2V0U3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIHIpcmV0dXJuO3I9KDAsbi5zdHJpbmdUb1BERlN0cmluZykocikucmVwbGFjZUFsbCgiXDAiLCIiKTtyJiYodHx8PW5ldyBNYXApLnNldChlLHIpfWlmKGUgaW5zdGFuY2VvZiBpLkRpY3QmJmUuaGFzKCJKYXZhU2NyaXB0Iikpe2NvbnN0IHQ9bmV3IHMuTmFtZVRyZWUoZS5nZXRSYXcoIkphdmFTY3JpcHQiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLGFdb2YgdC5nZXRBbGwoKSlhcHBlbmRJZkphdmFTY3JpcHREaWN0KCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUpLGEpfWNvbnN0IGE9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKTthJiZhcHBlbmRJZkphdmFTY3JpcHREaWN0KCJPcGVuQWN0aW9uIixhKTtyZXR1cm4gdH1nZXQganNBY3Rpb25zKCl7Y29uc3QgZT10aGlzLl9jb2xsZWN0SmF2YVNjcmlwdCgpO2xldCB0PSgwLHIuY29sbGVjdEFjdGlvbnMpKHRoaXMueHJlZix0aGlzLl9jYXREaWN0LG4uRG9jdW1lbnRBY3Rpb25FdmVudFR5cGUpO2lmKGUpe3R8fD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFthLHJdb2YgZSlhIGluIHQ/dFthXS5wdXNoKHIpOnRbYV09W3JdfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJqc0FjdGlvbnMiLHQpfWFzeW5jIGZvbnRGYWxsYmFjayhlLHQpe2NvbnN0IGE9YXdhaXQgUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Zvcihjb25zdCByIG9mIGEpaWYoci5sb2FkZWROYW1lPT09ZSl7ci5mYWxsYmFjayh0KTtyZXR1cm59fWFzeW5jIGNsZWFudXAoZT0hMSl7KDAsYy5jbGVhckdsb2JhbENhY2hlcykoKTt0aGlzLmdsb2JhbEltYWdlQ2FjaGUuY2xlYXIoZSk7dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKTt0aGlzLnBhZ2VJbmRleENhY2hlLmNsZWFyKCk7dGhpcy5ub25CbGVuZE1vZGVzU2V0LmNsZWFyKCk7Y29uc3QgdD1hd2FpdCBQcm9taXNlLmFsbCh0aGlzLmZvbnRDYWNoZSk7Zm9yKGNvbnN0e2RpY3Q6ZX1vZiB0KWRlbGV0ZSBlLmNhY2hlS2V5O3RoaXMuZm9udENhY2hlLmNsZWFyKCk7dGhpcy5idWlsdEluQ01hcENhY2hlLmNsZWFyKCk7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuY2xlYXIoKTt0aGlzLnN5c3RlbUZvbnRDYWNoZS5jbGVhcigpfWFzeW5jIGdldFBhZ2VEaWN0KGUpe2NvbnN0IHQ9W3RoaXMudG9wbGV2ZWxQYWdlc0RpY3RdLGE9bmV3IGkuUmVmU2V0LHI9dGhpcy5fY2F0RGljdC5nZXRSYXcoIlBhZ2VzIik7ciBpbnN0YW5jZW9mIGkuUmVmJiZhLnB1dChyKTtjb25zdCBzPXRoaXMueHJlZixvPXRoaXMucGFnZUtpZHNDb3VudENhY2hlLGM9dGhpcy5wYWdlSW5kZXhDYWNoZTtsZXQgbD0wO2Zvcig7dC5sZW5ndGg7KXtjb25zdCByPXQucG9wKCk7aWYociBpbnN0YW5jZW9mIGkuUmVmKXtjb25zdCBoPW8uZ2V0KHIpO2lmKGg+PTAmJmwraDw9ZSl7bCs9aDtjb250aW51ZX1pZihhLmhhcyhyKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuIik7YS5wdXQocik7Y29uc3QgdT1hd2FpdCBzLmZldGNoQXN5bmMocik7aWYodSBpbnN0YW5jZW9mIGkuRGljdCl7bGV0IHQ9dS5nZXRSYXcoIlR5cGUiKTt0IGluc3RhbmNlb2YgaS5SZWYmJih0PWF3YWl0IHMuZmV0Y2hBc3luYyh0KSk7aWYoKDAsaS5pc05hbWUpKHQsIlBhZ2UiKXx8IXUuaGFzKCJLaWRzIikpe28uaGFzKHIpfHxvLnB1dChyLDEpO2MuaGFzKHIpfHxjLnB1dChyLGwpO2lmKGw9PT1lKXJldHVyblt1LHJdO2wrKztjb250aW51ZX19dC5wdXNoKHUpO2NvbnRpbnVlfWlmKCEociBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWQgcmVmZXJlbmNlIHBvaW50cyB0byB3cm9uZyB0eXBlIG9mIG9iamVjdC4iKTtjb25zdHtvYmpJZDpofT1yO2xldCB1PXIuZ2V0UmF3KCJDb3VudCIpO3UgaW5zdGFuY2VvZiBpLlJlZiYmKHU9YXdhaXQgcy5mZXRjaEFzeW5jKHUpKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHUpJiZ1Pj0wKXtoJiYhby5oYXMoaCkmJm8ucHV0KGgsdSk7aWYobCt1PD1lKXtsKz11O2NvbnRpbnVlfX1sZXQgZD1yLmdldFJhdygiS2lkcyIpO2QgaW5zdGFuY2VvZiBpLlJlZiYmKGQ9YXdhaXQgcy5mZXRjaEFzeW5jKGQpKTtpZighQXJyYXkuaXNBcnJheShkKSl7bGV0IHQ9ci5nZXRSYXcoIlR5cGUiKTt0IGluc3RhbmNlb2YgaS5SZWYmJih0PWF3YWl0IHMuZmV0Y2hBc3luYyh0KSk7aWYoKDAsaS5pc05hbWUpKHQsIlBhZ2UiKXx8IXIuaGFzKCJLaWRzIikpe2lmKGw9PT1lKXJldHVybltyLG51bGxdO2wrKztjb250aW51ZX10aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKX1mb3IobGV0IGU9ZC5sZW5ndGgtMTtlPj0wO2UtLSl0LnB1c2goZFtlXSl9dGhyb3cgbmV3IEVycm9yKGBQYWdlIGluZGV4ICR7ZX0gbm90IGZvdW5kLmApfWFzeW5jIGdldEFsbFBhZ2VEaWN0cyhlPSExKXtjb25zdHtpZ25vcmVFcnJvcnM6dH09dGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMsYT1be2N1cnJlbnROb2RlOnRoaXMudG9wbGV2ZWxQYWdlc0RpY3QscG9zSW5LaWRzOjB9XSxzPW5ldyBpLlJlZlNldCxvPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlcyIpO28gaW5zdGFuY2VvZiBpLlJlZiYmcy5wdXQobyk7Y29uc3QgYz1uZXcgTWFwLGw9dGhpcy54cmVmLGg9dGhpcy5wYWdlSW5kZXhDYWNoZTtsZXQgdT0wO2Z1bmN0aW9uIGFkZFBhZ2VEaWN0KGUsdCl7dCYmIWguaGFzKHQpJiZoLnB1dCh0LHUpO2Muc2V0KHUrKyxbZSx0XSl9ZnVuY3Rpb24gYWRkUGFnZUVycm9yKGEpe2lmKGEgaW5zdGFuY2VvZiByLlhSZWZFbnRyeUV4Y2VwdGlvbiYmIWUpdGhyb3cgYTtpZihlJiZ0JiYwPT09dSl7KDAsbi53YXJuKShgZ2V0QWxsUGFnZURpY3RzIC0gU2tpcHBpbmcgaW52YWxpZCBmaXJzdCBwYWdlOiAiJHthfSIuYCk7YT1pLkRpY3QuZW1wdHl9Yy5zZXQodSsrLFthLG51bGxdKX1mb3IoO2EubGVuZ3RoPjA7KXtjb25zdCBlPWEuYXQoLTEpLHtjdXJyZW50Tm9kZTp0LHBvc0luS2lkczpyfT1lO2xldCBvPXQuZ2V0UmF3KCJLaWRzIik7aWYobyBpbnN0YW5jZW9mIGkuUmVmKXRyeXtvPWF3YWl0IGwuZmV0Y2hBc3luYyhvKX1jYXRjaChlKXthZGRQYWdlRXJyb3IoZSk7YnJlYWt9aWYoIUFycmF5LmlzQXJyYXkobykpe2FkZFBhZ2VFcnJvcihuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKSk7YnJlYWt9aWYocj49by5sZW5ndGgpe2EucG9wKCk7Y29udGludWV9Y29uc3QgYz1vW3JdO2xldCBoO2lmKGMgaW5zdGFuY2VvZiBpLlJlZil7aWYocy5oYXMoYykpe2FkZFBhZ2VFcnJvcihuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuIikpO2JyZWFrfXMucHV0KGMpO3RyeXtoPWF3YWl0IGwuZmV0Y2hBc3luYyhjKX1jYXRjaChlKXthZGRQYWdlRXJyb3IoZSk7YnJlYWt9fWVsc2UgaD1jO2lmKCEoaCBpbnN0YW5jZW9mIGkuRGljdCkpe2FkZFBhZ2VFcnJvcihuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpKTticmVha31sZXQgdT1oLmdldFJhdygiVHlwZSIpO2lmKHUgaW5zdGFuY2VvZiBpLlJlZil0cnl7dT1hd2FpdCBsLmZldGNoQXN5bmModSl9Y2F0Y2goZSl7YWRkUGFnZUVycm9yKGUpO2JyZWFrfSgwLGkuaXNOYW1lKSh1LCJQYWdlIil8fCFoLmhhcygiS2lkcyIpP2FkZFBhZ2VEaWN0KGgsYyBpbnN0YW5jZW9mIGkuUmVmP2M6bnVsbCk6YS5wdXNoKHtjdXJyZW50Tm9kZTpoLHBvc0luS2lkczowfSk7ZS5wb3NJbktpZHMrK31yZXR1cm4gY31nZXRQYWdlSW5kZXgoZSl7Y29uc3QgdD10aGlzLnBhZ2VJbmRleENhY2hlLmdldChlKTtpZih2b2lkIDAhPT10KXJldHVybiBQcm9taXNlLnJlc29sdmUodCk7Y29uc3QgYT10aGlzLnhyZWY7bGV0IHI9MDtjb25zdCBuZXh0PXQ9PmZ1bmN0aW9uIHBhZ2VzQmVmb3JlUmVmKHQpe2xldCByLHM9MDtyZXR1cm4gYS5mZXRjaEFzeW5jKHQpLnRoZW4oKGZ1bmN0aW9uKGEpe2lmKCgwLGkuaXNSZWZzRXF1YWwpKHQsZSkmJiEoMCxpLmlzRGljdCkoYSwiUGFnZSIpJiYhKGEgaW5zdGFuY2VvZiBpLkRpY3QmJiFhLmhhcygiVHlwZSIpJiZhLmhhcygiQ29udGVudHMiKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlRoZSByZWZlcmVuY2UgZG9lcyBub3QgcG9pbnQgdG8gYSAvUGFnZSBkaWN0aW9uYXJ5LiIpO2lmKCFhKXJldHVybiBudWxsO2lmKCEoYSBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cj1hLmdldFJhdygiUGFyZW50Iik7cmV0dXJuIGEuZ2V0QXN5bmMoIlBhcmVudCIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlBhcmVudCBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtyZXR1cm4gZS5nZXRBc3luYygiS2lkcyIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2NvbnN0IG89W107bGV0IGM9ITE7Zm9yKGNvbnN0IHIgb2YgZSl7aWYoIShyIGluc3RhbmNlb2YgaS5SZWYpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJLaWQgbXVzdCBiZSBhIHJlZmVyZW5jZS4iKTtpZigoMCxpLmlzUmVmc0VxdWFsKShyLHQpKXtjPSEwO2JyZWFrfW8ucHVzaChhLmZldGNoQXN5bmMocikudGhlbigoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiS2lkIG5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7ZS5oYXMoIkNvdW50Iik/cys9ZS5nZXQoIkNvdW50Iik6cysrfSkpKX1pZighYyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy4iKTtyZXR1cm4gUHJvbWlzZS5hbGwobykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm5bcyxyXX0pKX0pKX0odCkudGhlbigodD0+e2lmKCF0KXt0aGlzLnBhZ2VJbmRleENhY2hlLnB1dChlLHIpO3JldHVybiByfWNvbnN0W2Esbl09dDtyKz1hO3JldHVybiBuZXh0KG4pfSkpO3JldHVybiBuZXh0KGUpfWdldCBiYXNlVXJsKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiVVJJIik7aWYoZSBpbnN0YW5jZW9mIGkuRGljdCl7Y29uc3QgdD1lLmdldCgiQmFzZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Y29uc3QgZT0oMCxuLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKHQsbnVsbCx7dHJ5Q29udmVydEVuY29kaW5nOiEwfSk7aWYoZSlyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYmFzZVVybCIsZS5ocmVmKX19cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImJhc2VVcmwiLHRoaXMucGRmTWFuYWdlci5kb2NCYXNlVXJsKX1zdGF0aWMgcGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6ZSxyZXN1bHRPYmo6dCxkb2NCYXNlVXJsOmE9bnVsbCxkb2NBdHRhY2htZW50czpzPW51bGx9KXtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXsoMCxuLndhcm4pKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBgZGVzdERpY3RgIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3JldHVybn1sZXQgYyxsLGg9ZS5nZXQoIkEiKTtpZighKGggaW5zdGFuY2VvZiBpLkRpY3QpKWlmKGUuaGFzKCJEZXN0IikpaD1lLmdldCgiRGVzdCIpO2Vsc2V7aD1lLmdldCgiQUEiKTtoIGluc3RhbmNlb2YgaS5EaWN0JiYoaC5oYXMoIkQiKT9oPWguZ2V0KCJEIik6aC5oYXMoIlUiKSYmKGg9aC5nZXQoIlUiKSkpfWlmKGggaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IGU9aC5nZXQoIlMiKTtpZighKGUgaW5zdGFuY2VvZiBpLk5hbWUpKXsoMCxuLndhcm4pKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBJbnZhbGlkIHR5cGUgaW4gQWN0aW9uIGRpY3Rpb25hcnkuIik7cmV0dXJufWNvbnN0IGE9ZS5uYW1lO3N3aXRjaChhKXtjYXNlIlJlc2V0Rm9ybSI6Y29uc3QgZT1oLmdldCgiRmxhZ3MiKSx1PTA9PSgxJigibnVtYmVyIj09dHlwZW9mIGU/ZTowKSksZD1bXSxmPVtdO2Zvcihjb25zdCBlIG9mIGguZ2V0KCJGaWVsZHMiKXx8W10pZSBpbnN0YW5jZW9mIGkuUmVmP2YucHVzaChlLnRvU3RyaW5nKCkpOiJzdHJpbmciPT10eXBlb2YgZSYmZC5wdXNoKCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUpKTt0LnJlc2V0Rm9ybT17ZmllbGRzOmQscmVmczpmLGluY2x1ZGU6dX07YnJlYWs7Y2FzZSJVUkkiOmM9aC5nZXQoIlVSSSIpO2MgaW5zdGFuY2VvZiBpLk5hbWUmJihjPSIvIitjLm5hbWUpO2JyZWFrO2Nhc2UiR29UbyI6bD1oLmdldCgiRCIpO2JyZWFrO2Nhc2UiTGF1bmNoIjpjYXNlIkdvVG9SIjpjb25zdCBnPWguZ2V0KCJGIik7ZyBpbnN0YW5jZW9mIGkuRGljdD9jPWcuZ2V0KCJGIil8fG51bGw6InN0cmluZyI9PXR5cGVvZiBnJiYoYz1nKTtsZXQgcD1oLmdldCgiRCIpO2lmKHApe3AgaW5zdGFuY2VvZiBpLk5hbWUmJihwPXAubmFtZSk7aWYoInN0cmluZyI9PXR5cGVvZiBjKXtjb25zdCBlPWMuc3BsaXQoIiMiKVswXTsic3RyaW5nIj09dHlwZW9mIHA/Yz1lKyIjIitwOkFycmF5LmlzQXJyYXkocCkmJihjPWUrIiMiK0pTT04uc3RyaW5naWZ5KHApKX19Y29uc3QgbT1oLmdldCgiTmV3V2luZG93Iik7ImJvb2xlYW4iPT10eXBlb2YgbSYmKHQubmV3V2luZG93PW0pO2JyZWFrO2Nhc2UiR29Ub0UiOmNvbnN0IGI9aC5nZXQoIlQiKTtsZXQgeTtpZihzJiZiIGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBlPWIuZ2V0KCJSIiksdD1iLmdldCgiTiIpOygwLGkuaXNOYW1lKShlLCJDIikmJiJzdHJpbmciPT10eXBlb2YgdCYmKHk9c1soMCxuLnN0cmluZ1RvUERGU3RyaW5nKSh0KV0pfXk/dC5hdHRhY2htZW50PXk6KDAsbi53YXJuKSgncGFyc2VEZXN0RGljdGlvbmFyeSAtIHVuaW1wbGVtZW50ZWQgIkdvVG9FIiBhY3Rpb24uJyk7YnJlYWs7Y2FzZSJOYW1lZCI6Y29uc3Qgdz1oLmdldCgiTiIpO3cgaW5zdGFuY2VvZiBpLk5hbWUmJih0LmFjdGlvbj13Lm5hbWUpO2JyZWFrO2Nhc2UiU2V0T0NHU3RhdGUiOmNvbnN0IFM9aC5nZXQoIlN0YXRlIikseD1oLmdldCgiUHJlc2VydmVSQiIpO2lmKCFBcnJheS5pc0FycmF5KFMpfHwwPT09Uy5sZW5ndGgpYnJlYWs7Y29uc3QgQz1bXTtmb3IoY29uc3QgZSBvZiBTKWlmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJPTiI6Y2FzZSJPRkYiOmNhc2UiVG9nZ2xlIjpDLnB1c2goZS5uYW1lKX1lbHNlIGUgaW5zdGFuY2VvZiBpLlJlZiYmQy5wdXNoKGUudG9TdHJpbmcoKSk7aWYoQy5sZW5ndGghPT1TLmxlbmd0aClicmVhazt0LnNldE9DR1N0YXRlPXtzdGF0ZTpDLHByZXNlcnZlUkI6ImJvb2xlYW4iIT10eXBlb2YgeHx8eH07YnJlYWs7Y2FzZSJKYXZhU2NyaXB0Ijpjb25zdCBrPWguZ2V0KCJKUyIpO2xldCB2O2sgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0/dj1rLmdldFN0cmluZygpOiJzdHJpbmciPT10eXBlb2YgayYmKHY9ayk7Y29uc3QgRj12JiYoMCxyLnJlY292ZXJKc1VSTCkoKDAsbi5zdHJpbmdUb1BERlN0cmluZykodikpO2lmKEYpe2M9Ri51cmw7dC5uZXdXaW5kb3c9Ri5uZXdXaW5kb3c7YnJlYWt9ZGVmYXVsdDppZigiSmF2YVNjcmlwdCI9PT1hfHwiU3VibWl0Rm9ybSI9PT1hKWJyZWFrOygwLG4ud2FybikoYHBhcnNlRGVzdERpY3Rpb25hcnkgLSB1bnN1cHBvcnRlZCBhY3Rpb246ICIke2F9Ii5gKX19ZWxzZSBlLmhhcygiRGVzdCIpJiYobD1lLmdldCgiRGVzdCIpKTtpZigic3RyaW5nIj09dHlwZW9mIGMpe2NvbnN0IGU9KDAsbi5jcmVhdGVWYWxpZEFic29sdXRlVXJsKShjLGEse2FkZERlZmF1bHRQcm90b2NvbDohMCx0cnlDb252ZXJ0RW5jb2Rpbmc6ITB9KTtlJiYodC51cmw9ZS5ocmVmKTt0LnVuc2FmZVVybD1jfWlmKGwpe2wgaW5zdGFuY2VvZiBpLk5hbWUmJihsPWwubmFtZSk7InN0cmluZyI9PXR5cGVvZiBsP3QuZGVzdD0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShsKTpBcnJheS5pc0FycmF5KGwpJiYodC5kZXN0PWwpfX19dC5DYXRhbG9nPUNhdGFsb2d9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5OdW1iZXJUcmVlPXQuTmFtZVRyZWU9dm9pZCAwO3ZhciByPWEoNCksbj1hKDIpO2NsYXNzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuY29uc3RydWN0b3I9PT1OYW1lT3JOdW1iZXJUcmVlJiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgTmFtZU9yTnVtYmVyVHJlZS4iKTt0aGlzLnJvb3Q9ZTt0aGlzLnhyZWY9dDt0aGlzLl90eXBlPWF9Z2V0QWxsKCl7Y29uc3QgZT1uZXcgTWFwO2lmKCF0aGlzLnJvb3QpcmV0dXJuIGU7Y29uc3QgdD10aGlzLnhyZWYsYT1uZXcgci5SZWZTZXQ7YS5wdXQodGhpcy5yb290KTtjb25zdCBpPVt0aGlzLnJvb3RdO2Zvcig7aS5sZW5ndGg+MDspe2NvbnN0IHM9dC5mZXRjaElmUmVmKGkuc2hpZnQoKSk7aWYoIShzIGluc3RhbmNlb2Ygci5EaWN0KSljb250aW51ZTtpZihzLmhhcygiS2lkcyIpKXtjb25zdCBlPXMuZ2V0KCJLaWRzIik7aWYoIUFycmF5LmlzQXJyYXkoZSkpY29udGludWU7Zm9yKGNvbnN0IHQgb2YgZSl7aWYoYS5oYXModCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYER1cGxpY2F0ZSBlbnRyeSBpbiAiJHt0aGlzLl90eXBlfSIgdHJlZS5gKTtpLnB1c2godCk7YS5wdXQodCl9Y29udGludWV9Y29uc3Qgbz1zLmdldCh0aGlzLl90eXBlKTtpZihBcnJheS5pc0FycmF5KG8pKWZvcihsZXQgYT0wLHI9by5sZW5ndGg7YTxyO2ErPTIpZS5zZXQodC5mZXRjaElmUmVmKG9bYV0pLHQuZmV0Y2hJZlJlZihvW2ErMV0pKX1yZXR1cm4gZX1nZXQoZSl7aWYoIXRoaXMucm9vdClyZXR1cm4gbnVsbDtjb25zdCB0PXRoaXMueHJlZjtsZXQgYT10LmZldGNoSWZSZWYodGhpcy5yb290KSxyPTA7Zm9yKDthLmhhcygiS2lkcyIpOyl7aWYoKytyPjEwKXsoMCxuLndhcm4pKGBTZWFyY2ggZGVwdGggbGltaXQgcmVhY2hlZCBmb3IgIiR7dGhpcy5fdHlwZX0iIHRyZWUuYCk7cmV0dXJuIG51bGx9Y29uc3QgaT1hLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiBudWxsO2xldCBzPTAsbz1pLmxlbmd0aC0xO2Zvcig7czw9bzspe2NvbnN0IHI9cytvPj4xLG49dC5mZXRjaElmUmVmKGlbcl0pLGM9bi5nZXQoIkxpbWl0cyIpO2lmKGU8dC5mZXRjaElmUmVmKGNbMF0pKW89ci0xO2Vsc2V7aWYoIShlPnQuZmV0Y2hJZlJlZihjWzFdKSkpe2E9bjticmVha31zPXIrMX19aWYocz5vKXJldHVybiBudWxsfWNvbnN0IGk9YS5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShpKSl7bGV0IGE9MCxyPWkubGVuZ3RoLTI7Zm9yKDthPD1yOyl7Y29uc3Qgbj1hK3I+PjEscz1uKygxJm4pLG89dC5mZXRjaElmUmVmKGlbc10pO2lmKGU8bylyPXMtMjtlbHNle2lmKCEoZT5vKSlyZXR1cm4gdC5mZXRjaElmUmVmKGlbcysxXSk7YT1zKzJ9fX1yZXR1cm4gbnVsbH19dC5OYW1lVHJlZT1jbGFzcyBOYW1lVHJlZSBleHRlbmRzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsIk5hbWVzIil9fTt0Lk51bWJlclRyZWU9Y2xhc3MgTnVtYmVyVHJlZSBleHRlbmRzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsIk51bXMiKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuY2xlYXJHbG9iYWxDYWNoZXM9ZnVuY3Rpb24gY2xlYXJHbG9iYWxDYWNoZXMoKXsoMCxyLmNsZWFyUGF0dGVybkNhY2hlcykoKTsoMCxuLmNsZWFyUHJpbWl0aXZlQ2FjaGVzKSgpOygwLGkuY2xlYXJVbmljb2RlQ2FjaGVzKSgpfTt2YXIgcj1hKDUwKSxuPWEoNCksaT1hKDQwKX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkZpbGVTcGVjPXZvaWQgMDt2YXIgcj1hKDIpLG49YSg1KSxpPWEoNCk7ZnVuY3Rpb24gcGlja1BsYXRmb3JtSXRlbShlKXtyZXR1cm4gZS5oYXMoIlVGIik/ZS5nZXQoIlVGIik6ZS5oYXMoIkYiKT9lLmdldCgiRiIpOmUuaGFzKCJVbml4Iik/ZS5nZXQoIlVuaXgiKTplLmhhcygiTWFjIik/ZS5nZXQoIk1hYyIpOmUuaGFzKCJET1MiKT9lLmdldCgiRE9TIik6bnVsbH10LkZpbGVTcGVjPWNsYXNzIEZpbGVTcGVje2NvbnN0cnVjdG9yKGUsdCl7aWYoZSBpbnN0YW5jZW9mIGkuRGljdCl7dGhpcy54cmVmPXQ7dGhpcy5yb290PWU7ZS5oYXMoIkZTIikmJih0aGlzLmZzPWUuZ2V0KCJGUyIpKTt0aGlzLmRlc2NyaXB0aW9uPWUuaGFzKCJEZXNjIik/KDAsci5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIkRlc2MiKSk6IiI7ZS5oYXMoIlJGIikmJigwLHIud2FybikoIlJlbGF0ZWQgZmlsZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCIpO3RoaXMuY29udGVudEF2YWlsYWJsZT0hMDtpZighZS5oYXMoIkVGIikpe3RoaXMuY29udGVudEF2YWlsYWJsZT0hMTsoMCxyLndhcm4pKCJOb24tZW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCIpfX19Z2V0IGZpbGVuYW1lKCl7aWYoIXRoaXMuX2ZpbGVuYW1lJiZ0aGlzLnJvb3Qpe2NvbnN0IGU9cGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3QpfHwidW5uYW1lZCI7dGhpcy5fZmlsZW5hbWU9KDAsci5zdHJpbmdUb1BERlN0cmluZykoZSkucmVwbGFjZUFsbCgiXFxcXCIsIlxcIikucmVwbGFjZUFsbCgiXFwvIiwiLyIpLnJlcGxhY2VBbGwoIlxcIiwiLyIpfXJldHVybiB0aGlzLl9maWxlbmFtZX1nZXQgY29udGVudCgpe2lmKCF0aGlzLmNvbnRlbnRBdmFpbGFibGUpcmV0dXJuIG51bGw7IXRoaXMuY29udGVudFJlZiYmdGhpcy5yb290JiYodGhpcy5jb250ZW50UmVmPXBpY2tQbGF0Zm9ybUl0ZW0odGhpcy5yb290LmdldCgiRUYiKSkpO2xldCBlPW51bGw7aWYodGhpcy5jb250ZW50UmVmKXtjb25zdCB0PXRoaXMueHJlZi5mZXRjaElmUmVmKHRoaXMuY29udGVudFJlZik7dCBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbT9lPXQuZ2V0Qnl0ZXMoKTooMCxyLndhcm4pKCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gcG9pbnRzIHRvIG5vbi1leGlzdGluZy9pbnZhbGlkIGNvbnRlbnQiKX1lbHNlKDAsci53YXJuKSgiRW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGhhdmUgYSBjb250ZW50Iik7cmV0dXJuIGV9Z2V0IHNlcmlhbGl6YWJsZSgpe3JldHVybntmaWxlbmFtZTp0aGlzLmZpbGVuYW1lLGNvbnRlbnQ6dGhpcy5jb250ZW50fX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuTWV0YWRhdGFQYXJzZXI9dm9pZCAwO3ZhciByPWEoNzEpO3QuTWV0YWRhdGFQYXJzZXI9Y2xhc3MgTWV0YWRhdGFQYXJzZXJ7Y29uc3RydWN0b3IoZSl7ZT10aGlzLl9yZXBhaXIoZSk7Y29uc3QgdD1uZXcgci5TaW1wbGVYTUxQYXJzZXIoe2xvd2VyQ2FzZU5hbWU6ITB9KS5wYXJzZUZyb21TdHJpbmcoZSk7dGhpcy5fbWV0YWRhdGFNYXA9bmV3IE1hcDt0aGlzLl9kYXRhPWU7dCYmdGhpcy5fcGFyc2UodCl9X3JlcGFpcihlKXtyZXR1cm4gZS5yZXBsYWNlKC9eW148XSsvLCIiKS5yZXBsYWNlQWxsKC8+XFwzNzZcXDM3NyhbXjxdKykvZywoZnVuY3Rpb24oZSx0KXtjb25zdCBhPXQucmVwbGFjZUFsbCgvXFwoWzAtM10pKFswLTddKShbMC03XSkvZywoZnVuY3Rpb24oZSx0LGEscil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjQqdCs4KmErMSpyKX0pKS5yZXBsYWNlQWxsKC8mKGFtcHxhcG9zfGd0fGx0fHF1b3QpOy9nLChmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UiYXBvcyI6cmV0dXJuIiciO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImx0IjpyZXR1cm4iPCI7Y2FzZSJxdW90IjpyZXR1cm4nIid9dGhyb3cgbmV3IEVycm9yKGBfcmVwYWlyOiAke3R9IGlzbid0IGRlZmluZWQuYCl9KSkscj1bIj4iXTtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDtlKz0yKXtjb25zdCB0PTI1NiphLmNoYXJDb2RlQXQoZSkrYS5jaGFyQ29kZUF0KGUrMSk7dD49MzImJnQ8MTI3JiY2MCE9PXQmJjYyIT09dCYmMzghPT10P3IucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKTpyLnB1c2goIiYjeCIrKDY1NTM2K3QpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSkrIjsiKX1yZXR1cm4gci5qb2luKCIiKX0pKX1fZ2V0U2VxdWVuY2UoZSl7Y29uc3QgdD1lLm5vZGVOYW1lO3JldHVybiJyZGY6YmFnIiE9PXQmJiJyZGY6c2VxIiE9PXQmJiJyZGY6YWx0IiE9PXQ/bnVsbDplLmNoaWxkTm9kZXMuZmlsdGVyKChlPT4icmRmOmxpIj09PWUubm9kZU5hbWUpKX1fcGFyc2VBcnJheShlKXtpZighZS5oYXNDaGlsZE5vZGVzKCkpcmV0dXJuO2NvbnN0W3RdPWUuY2hpbGROb2RlcyxhPXRoaXMuX2dldFNlcXVlbmNlKHQpfHxbXTt0aGlzLl9tZXRhZGF0YU1hcC5zZXQoZS5ub2RlTmFtZSxhLm1hcCgoZT0+ZS50ZXh0Q29udGVudC50cmltKCkpKSl9X3BhcnNlKGUpe2xldCB0PWUuZG9jdW1lbnRFbGVtZW50O2lmKCJyZGY6cmRmIiE9PXQubm9kZU5hbWUpe3Q9dC5maXJzdENoaWxkO2Zvcig7dCYmInJkZjpyZGYiIT09dC5ub2RlTmFtZTspdD10Lm5leHRTaWJsaW5nfWlmKHQmJiJyZGY6cmRmIj09PXQubm9kZU5hbWUmJnQuaGFzQ2hpbGROb2RlcygpKWZvcihjb25zdCBlIG9mIHQuY2hpbGROb2RlcylpZigicmRmOmRlc2NyaXB0aW9uIj09PWUubm9kZU5hbWUpZm9yKGNvbnN0IHQgb2YgZS5jaGlsZE5vZGVzKXtjb25zdCBlPXQubm9kZU5hbWU7c3dpdGNoKGUpe2Nhc2UiI3RleHQiOmNvbnRpbnVlO2Nhc2UiZGM6Y3JlYXRvciI6Y2FzZSJkYzpzdWJqZWN0Ijp0aGlzLl9wYXJzZUFycmF5KHQpO2NvbnRpbnVlfXRoaXMuX21ldGFkYXRhTWFwLnNldChlLHQudGV4dENvbnRlbnQudHJpbSgpKX19Z2V0IHNlcmlhbGl6YWJsZSgpe3JldHVybntwYXJzZWREYXRhOnRoaXMuX21ldGFkYXRhTWFwLHJhd0RhdGE6dGhpcy5fZGF0YX19fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhNTFBhcnNlckVycm9yQ29kZT10LlhNTFBhcnNlckJhc2U9dC5TaW1wbGVYTUxQYXJzZXI9dC5TaW1wbGVET01Ob2RlPXZvaWQgMDt2YXIgcj1hKDMpO2NvbnN0IG49e05vRXJyb3I6MCxFbmRPZkRvY3VtZW50Oi0xLFVudGVybWluYXRlZENkYXQ6LTIsVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb246LTMsVW50ZXJtaW5hdGVkRG9jdHlwZURlY2xhcmF0aW9uOi00LFVudGVybWluYXRlZENvbW1lbnQ6LTUsTWFsZm9ybWVkRWxlbWVudDotNixPdXRPZk1lbW9yeTotNyxVbnRlcm1pbmF0ZWRBdHRyaWJ1dGVWYWx1ZTotOCxVbnRlcm1pbmF0ZWRFbGVtZW50Oi05LEVsZW1lbnROZXZlckJlZ3VuOi0xMH07dC5YTUxQYXJzZXJFcnJvckNvZGU9bjtmdW5jdGlvbiBpc1doaXRlc3BhY2UoZSx0KXtjb25zdCBhPWVbdF07cmV0dXJuIiAiPT09YXx8IlxuIj09PWF8fCJcciI9PT1hfHwiXHQiPT09YX1jbGFzcyBYTUxQYXJzZXJCYXNle19yZXNvbHZlRW50aXRpZXMoZSl7cmV0dXJuIGUucmVwbGFjZUFsbCgvJihbXjtdKyk7L2csKChlLHQpPT57aWYoIiN4Ij09PXQuc3Vic3RyaW5nKDAsMikpcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KHQuc3Vic3RyaW5nKDIpLDE2KSk7aWYoIiMiPT09dC5zdWJzdHJpbmcoMCwxKSlyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQodC5zdWJzdHJpbmcoMSksMTApKTtzd2l0Y2godCl7Y2FzZSJsdCI6cmV0dXJuIjwiO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UicXVvdCI6cmV0dXJuJyInO2Nhc2UiYXBvcyI6cmV0dXJuIicifXJldHVybiB0aGlzLm9uUmVzb2x2ZUVudGl0eSh0KX0pKX1fcGFyc2VDb250ZW50KGUsdCl7Y29uc3QgYT1bXTtsZXQgcj10O2Z1bmN0aW9uIHNraXBXcygpe2Zvcig7cjxlLmxlbmd0aCYmaXNXaGl0ZXNwYWNlKGUscik7KSsrcn1mb3IoO3I8ZS5sZW5ndGgmJiFpc1doaXRlc3BhY2UoZSxyKSYmIj4iIT09ZVtyXSYmIi8iIT09ZVtyXTspKytyO2NvbnN0IG49ZS5zdWJzdHJpbmcodCxyKTtza2lwV3MoKTtmb3IoO3I8ZS5sZW5ndGgmJiI+IiE9PWVbcl0mJiIvIiE9PWVbcl0mJiI/IiE9PWVbcl07KXtza2lwV3MoKTtsZXQgdD0iIixuPSIiO2Zvcig7cjxlLmxlbmd0aCYmIWlzV2hpdGVzcGFjZShlLHIpJiYiPSIhPT1lW3JdOyl7dCs9ZVtyXTsrK3J9c2tpcFdzKCk7aWYoIj0iIT09ZVtyXSlyZXR1cm4gbnVsbDsrK3I7c2tpcFdzKCk7Y29uc3QgaT1lW3JdO2lmKCciJyE9PWkmJiInIiE9PWkpcmV0dXJuIG51bGw7Y29uc3Qgcz1lLmluZGV4T2YoaSwrK3IpO2lmKHM8MClyZXR1cm4gbnVsbDtuPWUuc3Vic3RyaW5nKHIscyk7YS5wdXNoKHtuYW1lOnQsdmFsdWU6dGhpcy5fcmVzb2x2ZUVudGl0aWVzKG4pfSk7cj1zKzE7c2tpcFdzKCl9cmV0dXJue25hbWU6bixhdHRyaWJ1dGVzOmEscGFyc2VkOnItdH19X3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGUsdCl7bGV0IGE9dDtmb3IoO2E8ZS5sZW5ndGgmJiFpc1doaXRlc3BhY2UoZSxhKSYmIj4iIT09ZVthXSYmIj8iIT09ZVthXSYmIi8iIT09ZVthXTspKythO2NvbnN0IHI9ZS5zdWJzdHJpbmcodCxhKTshZnVuY3Rpb24gc2tpcFdzKCl7Zm9yKDthPGUubGVuZ3RoJiZpc1doaXRlc3BhY2UoZSxhKTspKythfSgpO2NvbnN0IG49YTtmb3IoO2E8ZS5sZW5ndGgmJigiPyIhPT1lW2FdfHwiPiIhPT1lW2ErMV0pOykrK2E7cmV0dXJue25hbWU6cix2YWx1ZTplLnN1YnN0cmluZyhuLGEpLHBhcnNlZDphLXR9fXBhcnNlWG1sKGUpe2xldCB0PTA7Zm9yKDt0PGUubGVuZ3RoOyl7bGV0IGE9dDtpZigiPCI9PT1lW3RdKXsrK2E7bGV0IHQ7c3dpdGNoKGVbYV0pe2Nhc2UiLyI6KythO3Q9ZS5pbmRleE9mKCI+IixhKTtpZih0PDApe3RoaXMub25FcnJvcihuLlVudGVybWluYXRlZEVsZW1lbnQpO3JldHVybn10aGlzLm9uRW5kRWxlbWVudChlLnN1YnN0cmluZyhhLHQpKTthPXQrMTticmVhaztjYXNlIj8iOisrYTtjb25zdCByPXRoaXMuX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGUsYSk7aWYoIj8+IiE9PWUuc3Vic3RyaW5nKGErci5wYXJzZWQsYStyLnBhcnNlZCsyKSl7dGhpcy5vbkVycm9yKG4uVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb24pO3JldHVybn10aGlzLm9uUGkoci5uYW1lLHIudmFsdWUpO2ErPXIucGFyc2VkKzI7YnJlYWs7Y2FzZSIhIjppZigiLS0iPT09ZS5zdWJzdHJpbmcoYSsxLGErMykpe3Q9ZS5pbmRleE9mKCItLVx4M2UiLGErMyk7aWYodDwwKXt0aGlzLm9uRXJyb3Iobi5VbnRlcm1pbmF0ZWRDb21tZW50KTtyZXR1cm59dGhpcy5vbkNvbW1lbnQoZS5zdWJzdHJpbmcoYSszLHQpKTthPXQrM31lbHNlIGlmKCJbQ0RBVEFbIj09PWUuc3Vic3RyaW5nKGErMSxhKzgpKXt0PWUuaW5kZXhPZigiXV0+IixhKzgpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKG4uVW50ZXJtaW5hdGVkQ2RhdCk7cmV0dXJufXRoaXMub25DZGF0YShlLnN1YnN0cmluZyhhKzgsdCkpO2E9dCszfWVsc2V7aWYoIkRPQ1RZUEUiIT09ZS5zdWJzdHJpbmcoYSsxLGErOCkpe3RoaXMub25FcnJvcihuLk1hbGZvcm1lZEVsZW1lbnQpO3JldHVybn17Y29uc3Qgcj1lLmluZGV4T2YoIlsiLGErOCk7bGV0IGk9ITE7dD1lLmluZGV4T2YoIj4iLGErOCk7aWYodDwwKXt0aGlzLm9uRXJyb3Iobi5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO3JldHVybn1pZihyPjAmJnQ+cil7dD1lLmluZGV4T2YoIl0+IixhKzgpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKG4uVW50ZXJtaW5hdGVkRG9jdHlwZURlY2xhcmF0aW9uKTtyZXR1cm59aT0hMH1jb25zdCBzPWUuc3Vic3RyaW5nKGErOCx0KyhpPzE6MCkpO3RoaXMub25Eb2N0eXBlKHMpO2E9dCsoaT8yOjEpfX1icmVhaztkZWZhdWx0OmNvbnN0IGk9dGhpcy5fcGFyc2VDb250ZW50KGUsYSk7aWYobnVsbD09PWkpe3RoaXMub25FcnJvcihuLk1hbGZvcm1lZEVsZW1lbnQpO3JldHVybn1sZXQgcz0hMTtpZigiLz4iPT09ZS5zdWJzdHJpbmcoYStpLnBhcnNlZCxhK2kucGFyc2VkKzIpKXM9ITA7ZWxzZSBpZigiPiIhPT1lLnN1YnN0cmluZyhhK2kucGFyc2VkLGEraS5wYXJzZWQrMSkpe3RoaXMub25FcnJvcihuLlVudGVybWluYXRlZEVsZW1lbnQpO3JldHVybn10aGlzLm9uQmVnaW5FbGVtZW50KGkubmFtZSxpLmF0dHJpYnV0ZXMscyk7YSs9aS5wYXJzZWQrKHM/MjoxKX19ZWxzZXtmb3IoO2E8ZS5sZW5ndGgmJiI8IiE9PWVbYV07KWErKztjb25zdCByPWUuc3Vic3RyaW5nKHQsYSk7dGhpcy5vblRleHQodGhpcy5fcmVzb2x2ZUVudGl0aWVzKHIpKX10PWF9fW9uUmVzb2x2ZUVudGl0eShlKXtyZXR1cm5gJiR7ZX07YH1vblBpKGUsdCl7fW9uQ29tbWVudChlKXt9b25DZGF0YShlKXt9b25Eb2N0eXBlKGUpe31vblRleHQoZSl7fW9uQmVnaW5FbGVtZW50KGUsdCxhKXt9b25FbmRFbGVtZW50KGUpe31vbkVycm9yKGUpe319dC5YTUxQYXJzZXJCYXNlPVhNTFBhcnNlckJhc2U7Y2xhc3MgU2ltcGxlRE9NTm9kZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMubm9kZU5hbWU9ZTt0aGlzLm5vZGVWYWx1ZT10O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwYXJlbnROb2RlIix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlcz8uWzBdfWdldCBuZXh0U2libGluZygpe2NvbnN0IGU9dGhpcy5wYXJlbnROb2RlLmNoaWxkTm9kZXM7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9ZS5pbmRleE9mKHRoaXMpO3JldHVybi0xIT09dD9lW3QrMV06dm9pZCAwfWdldCB0ZXh0Q29udGVudCgpe3JldHVybiB0aGlzLmNoaWxkTm9kZXM/dGhpcy5jaGlsZE5vZGVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KSkuam9pbigiIik6dGhpcy5ub2RlVmFsdWV8fCIifWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN8fFtdfWhhc0NoaWxkTm9kZXMoKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzPy5sZW5ndGg+MH1zZWFyY2hOb2RlKGUsdCl7aWYodD49ZS5sZW5ndGgpcmV0dXJuIHRoaXM7Y29uc3QgYT1lW3RdO2lmKGEubmFtZS5zdGFydHNXaXRoKCIjIikmJnQ8ZS5sZW5ndGgtMSlyZXR1cm4gdGhpcy5zZWFyY2hOb2RlKGUsdCsxKTtjb25zdCByPVtdO2xldCBuPXRoaXM7Zm9yKDs7KXtpZihhLm5hbWU9PT1uLm5vZGVOYW1lKXtpZigwIT09YS5wb3Mpe2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gbnVsbDt7Y29uc3RbaV09ci5wb3AoKTtsZXQgcz0wO2Zvcihjb25zdCByIG9mIGkuY2hpbGROb2RlcylpZihhLm5hbWU9PT1yLm5vZGVOYW1lKXtpZihzPT09YS5wb3MpcmV0dXJuIHIuc2VhcmNoTm9kZShlLHQrMSk7cysrfXJldHVybiBuLnNlYXJjaE5vZGUoZSx0KzEpfX17Y29uc3QgYT1uLnNlYXJjaE5vZGUoZSx0KzEpO2lmKG51bGwhPT1hKXJldHVybiBhfX1pZihuLmNoaWxkTm9kZXM/Lmxlbmd0aD4wKXtyLnB1c2goW24sMF0pO249bi5jaGlsZE5vZGVzWzBdfWVsc2V7aWYoMD09PXIubGVuZ3RoKXJldHVybiBudWxsO2Zvcig7MCE9PXIubGVuZ3RoOyl7Y29uc3RbZSx0XT1yLnBvcCgpLGE9dCsxO2lmKGE8ZS5jaGlsZE5vZGVzLmxlbmd0aCl7ci5wdXNoKFtlLGFdKTtuPWUuY2hpbGROb2Rlc1thXTticmVha319aWYoMD09PXIubGVuZ3RoKXJldHVybiBudWxsfX19ZHVtcChlKXtpZigiI3RleHQiIT09dGhpcy5ub2RlTmFtZSl7ZS5wdXNoKGA8JHt0aGlzLm5vZGVOYW1lfWApO2lmKHRoaXMuYXR0cmlidXRlcylmb3IoY29uc3QgdCBvZiB0aGlzLmF0dHJpYnV0ZXMpZS5wdXNoKGAgJHt0Lm5hbWV9PSIkeygwLHIuZW5jb2RlVG9YbWxTdHJpbmcpKHQudmFsdWUpfSJgKTtpZih0aGlzLmhhc0NoaWxkTm9kZXMoKSl7ZS5wdXNoKCI+Iik7Zm9yKGNvbnN0IHQgb2YgdGhpcy5jaGlsZE5vZGVzKXQuZHVtcChlKTtlLnB1c2goYDwvJHt0aGlzLm5vZGVOYW1lfT5gKX1lbHNlIHRoaXMubm9kZVZhbHVlP2UucHVzaChgPiR7KDAsci5lbmNvZGVUb1htbFN0cmluZykodGhpcy5ub2RlVmFsdWUpfTwvJHt0aGlzLm5vZGVOYW1lfT5gKTplLnB1c2goIi8+Iil9ZWxzZSBlLnB1c2goKDAsci5lbmNvZGVUb1htbFN0cmluZykodGhpcy5ub2RlVmFsdWUpKX19dC5TaW1wbGVET01Ob2RlPVNpbXBsZURPTU5vZGU7dC5TaW1wbGVYTUxQYXJzZXI9Y2xhc3MgU2ltcGxlWE1MUGFyc2VyIGV4dGVuZHMgWE1MUGFyc2VyQmFzZXtjb25zdHJ1Y3Rvcih7aGFzQXR0cmlidXRlczplPSExLGxvd2VyQ2FzZU5hbWU6dD0hMX0pe3N1cGVyKCk7dGhpcy5fY3VycmVudEZyYWdtZW50PW51bGw7dGhpcy5fc3RhY2s9bnVsbDt0aGlzLl9lcnJvckNvZGU9bi5Ob0Vycm9yO3RoaXMuX2hhc0F0dHJpYnV0ZXM9ZTt0aGlzLl9sb3dlckNhc2VOYW1lPXR9cGFyc2VGcm9tU3RyaW5nKGUpe3RoaXMuX2N1cnJlbnRGcmFnbWVudD1bXTt0aGlzLl9zdGFjaz1bXTt0aGlzLl9lcnJvckNvZGU9bi5Ob0Vycm9yO3RoaXMucGFyc2VYbWwoZSk7aWYodGhpcy5fZXJyb3JDb2RlIT09bi5Ob0Vycm9yKXJldHVybjtjb25zdFt0XT10aGlzLl9jdXJyZW50RnJhZ21lbnQ7cmV0dXJuIHQ/e2RvY3VtZW50RWxlbWVudDp0fTp2b2lkIDB9b25UZXh0KGUpe2lmKGZ1bmN0aW9uIGlzV2hpdGVzcGFjZVN0cmluZyhlKXtmb3IobGV0IHQ9MCxhPWUubGVuZ3RoO3Q8YTt0KyspaWYoIWlzV2hpdGVzcGFjZShlLHQpKXJldHVybiExO3JldHVybiEwfShlKSlyZXR1cm47Y29uc3QgdD1uZXcgU2ltcGxlRE9NTm9kZSgiI3RleHQiLGUpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHQpfW9uQ2RhdGEoZSl7Y29uc3QgdD1uZXcgU2ltcGxlRE9NTm9kZSgiI3RleHQiLGUpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHQpfW9uQmVnaW5FbGVtZW50KGUsdCxhKXt0aGlzLl9sb3dlckNhc2VOYW1lJiYoZT1lLnRvTG93ZXJDYXNlKCkpO2NvbnN0IHI9bmV3IFNpbXBsZURPTU5vZGUoZSk7ci5jaGlsZE5vZGVzPVtdO3RoaXMuX2hhc0F0dHJpYnV0ZXMmJihyLmF0dHJpYnV0ZXM9dCk7dGhpcy5fY3VycmVudEZyYWdtZW50LnB1c2gocik7aWYoIWEpe3RoaXMuX3N0YWNrLnB1c2godGhpcy5fY3VycmVudEZyYWdtZW50KTt0aGlzLl9jdXJyZW50RnJhZ21lbnQ9ci5jaGlsZE5vZGVzfX1vbkVuZEVsZW1lbnQoZSl7dGhpcy5fY3VycmVudEZyYWdtZW50PXRoaXMuX3N0YWNrLnBvcCgpfHxbXTtjb25zdCB0PXRoaXMuX2N1cnJlbnRGcmFnbWVudC5hdCgtMSk7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKGNvbnN0IGUgb2YgdC5jaGlsZE5vZGVzKWUucGFyZW50Tm9kZT10O3JldHVybiB0fW9uRXJyb3IoZSl7dGhpcy5fZXJyb3JDb2RlPWV9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlN0cnVjdFRyZWVSb290PXQuU3RydWN0VHJlZVBhZ2U9dm9pZCAwO3ZhciByPWEoMiksbj1hKDQpLGk9YSg2Nykscz1hKDczKTtjb25zdCBvPTEsYz0yLGw9MyxoPTQsdT01O2NsYXNzIFN0cnVjdFRyZWVSb290e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5kaWN0PWU7dGhpcy5yZWY9dCBpbnN0YW5jZW9mIG4uUmVmP3Q6bnVsbDt0aGlzLnJvbGVNYXA9bmV3IE1hcDt0aGlzLnN0cnVjdFBhcmVudElkcz1udWxsfWluaXQoKXt0aGlzLnJlYWRSb2xlTWFwKCl9I0MoZSx0LGEpe2lmKCEoZSBpbnN0YW5jZW9mIG4uUmVmKXx8dDwwKXJldHVybjt0aGlzLnN0cnVjdFBhcmVudElkc3x8PW5ldyBuLlJlZlNldENhY2hlO2xldCByPXRoaXMuc3RydWN0UGFyZW50SWRzLmdldChlKTtpZighcil7cj1bXTt0aGlzLnN0cnVjdFBhcmVudElkcy5wdXQoZSxyKX1yLnB1c2goW3QsYV0pfWFkZEFubm90YXRpb25JZFRvUGFnZShlLHQpe3RoaXMuI0MoZSx0LGgpfXJlYWRSb2xlTWFwKCl7Y29uc3QgZT10aGlzLmRpY3QuZ2V0KCJSb2xlTWFwIik7ZSBpbnN0YW5jZW9mIG4uRGljdCYmZS5mb3JFYWNoKCgoZSx0KT0+e3QgaW5zdGFuY2VvZiBuLk5hbWUmJnRoaXMucm9sZU1hcC5zZXQoZSx0Lm5hbWUpfSkpfXN0YXRpYyBhc3luYyBjYW5DcmVhdGVTdHJ1Y3R1cmVUcmVlKHtjYXRhbG9nUmVmOmUscGRmTWFuYWdlcjp0LG5ld0Fubm90YXRpb25zQnlQYWdlOmF9KXtpZighKGUgaW5zdGFuY2VvZiBuLlJlZikpeygwLHIud2FybikoIkNhbm5vdCBzYXZlIHRoZSBzdHJ1Y3QgdHJlZTogbm8gY2F0YWxvZyByZWZlcmVuY2UuIik7cmV0dXJuITF9bGV0IGk9MCxzPSEwO2Zvcihjb25zdFtlLG9db2YgYSl7Y29uc3R7cmVmOmF9PWF3YWl0IHQuZ2V0UGFnZShlKTtpZighKGEgaW5zdGFuY2VvZiBuLlJlZikpeygwLHIud2FybikoYENhbm5vdCBzYXZlIHRoZSBzdHJ1Y3QgdHJlZTogcGFnZSAke2V9IGhhcyBubyByZWYuYCk7cz0hMDticmVha31mb3IoY29uc3QgZSBvZiBvKWlmKGUuYWNjZXNzaWJpbGl0eURhdGE/LnR5cGUpe2UucGFyZW50VHJlZUlkPWkrKztzPSExfX1pZihzKXtmb3IoY29uc3QgZSBvZiBhLnZhbHVlcygpKWZvcihjb25zdCB0IG9mIGUpZGVsZXRlIHQucGFyZW50VHJlZUlkO3JldHVybiExfXJldHVybiEwfXN0YXRpYyBhc3luYyBjcmVhdGVTdHJ1Y3R1cmVUcmVlKHtuZXdBbm5vdGF0aW9uc0J5UGFnZTplLHhyZWY6dCxjYXRhbG9nUmVmOmEscGRmTWFuYWdlcjpyLG5ld1JlZnM6aX0pe2NvbnN0IG89ci5jYXRhbG9nLmNsb25lRGljdCgpLGM9dC5nZXROZXdUZW1wb3JhcnlSZWYoKTtvLnNldCgiU3RydWN0VHJlZVJvb3QiLGMpO2NvbnN0IGw9W107YXdhaXQoMCxzLndyaXRlT2JqZWN0KShhLG8sbCx0KTtpLnB1c2goe3JlZjphLGRhdGE6bC5qb2luKCIiKX0pO2NvbnN0IGg9bmV3IG4uRGljdCh0KTtoLnNldCgiVHlwZSIsbi5OYW1lLmdldCgiU3RydWN0VHJlZVJvb3QiKSk7Y29uc3QgdT10LmdldE5ld1RlbXBvcmFyeVJlZigpO2guc2V0KCJQYXJlbnRUcmVlIix1KTtjb25zdCBkPVtdO2guc2V0KCJLIixkKTtjb25zdCBmPW5ldyBuLkRpY3QodCksZz1bXTtmLnNldCgiTnVtcyIsZyk7Y29uc3QgcD1hd2FpdCB0aGlzLiNrKHtuZXdBbm5vdGF0aW9uc0J5UGFnZTplLHN0cnVjdFRyZWVSb290UmVmOmMsa2lkczpkLG51bXM6Zyx4cmVmOnQscGRmTWFuYWdlcjpyLG5ld1JlZnM6aSxidWZmZXI6bH0pO2guc2V0KCJQYXJlbnRUcmVlTmV4dEtleSIscCk7bC5sZW5ndGg9MDthd2FpdCgwLHMud3JpdGVPYmplY3QpKHUsZixsLHQpO2kucHVzaCh7cmVmOnUsZGF0YTpsLmpvaW4oIiIpfSk7bC5sZW5ndGg9MDthd2FpdCgwLHMud3JpdGVPYmplY3QpKGMsaCxsLHQpO2kucHVzaCh7cmVmOmMsZGF0YTpsLmpvaW4oIiIpfSl9YXN5bmMgY2FuVXBkYXRlU3RydWN0VHJlZSh7cGRmTWFuYWdlcjplLG5ld0Fubm90YXRpb25zQnlQYWdlOnR9KXtpZighdGhpcy5yZWYpeygwLHIud2FybikoIkNhbm5vdCB1cGRhdGUgdGhlIHN0cnVjdCB0cmVlOiBubyByb290IHJlZmVyZW5jZS4iKTtyZXR1cm4hMX1sZXQgYT10aGlzLmRpY3QuZ2V0KCJQYXJlbnRUcmVlTmV4dEtleSIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpfHxhPDApeygwLHIud2FybikoIkNhbm5vdCB1cGRhdGUgdGhlIHN0cnVjdCB0cmVlOiBpbnZhbGlkIG5leHQga2V5LiIpO3JldHVybiExfWNvbnN0IGk9dGhpcy5kaWN0LmdldCgiUGFyZW50VHJlZSIpO2lmKCEoaSBpbnN0YW5jZW9mIG4uRGljdCkpeygwLHIud2FybikoIkNhbm5vdCB1cGRhdGUgdGhlIHN0cnVjdCB0cmVlOiBQYXJlbnRUcmVlIGlzbid0IGEgZGljdC4iKTtyZXR1cm4hMX1jb25zdCBzPWkuZ2V0KCJOdW1zIik7aWYoIUFycmF5LmlzQXJyYXkocykpeygwLHIud2FybikoIkNhbm5vdCB1cGRhdGUgdGhlIHN0cnVjdCB0cmVlOiBudW1zIGlzbid0IGFuIGFycmF5LiIpO3JldHVybiExfWNvbnN0e251bVBhZ2VzOm99PWUuY2F0YWxvZztmb3IoY29uc3QgYSBvZiB0LmtleXMoKSl7Y29uc3R7cGFnZURpY3Q6dCxyZWY6aX09YXdhaXQgZS5nZXRQYWdlKGEpO2lmKCEoaSBpbnN0YW5jZW9mIG4uUmVmKSl7KDAsci53YXJuKShgQ2Fubm90IHNhdmUgdGhlIHN0cnVjdCB0cmVlOiBwYWdlICR7YX0gaGFzIG5vIHJlZi5gKTtyZXR1cm4hMX1jb25zdCBzPXQuZ2V0KCJTdHJ1Y3RQYXJlbnRzIik7aWYoIU51bWJlci5pc0ludGVnZXIocyl8fHM8MHx8cz49byl7KDAsci53YXJuKShgQ2Fubm90IHNhdmUgdGhlIHN0cnVjdCB0cmVlOiBwYWdlICR7YX0gaGFzIG5vIGlkLmApO3JldHVybiExfX1sZXQgYz0hMDtmb3IoY29uc3RbcixuXW9mIHQpe2NvbnN0e3BhZ2VEaWN0OnR9PWF3YWl0IGUuZ2V0UGFnZShyKTtTdHJ1Y3RUcmVlUm9vdC4jdih7ZWxlbWVudHM6bix4cmVmOnRoaXMuZGljdC54cmVmLHBhZ2VEaWN0OnQscGFyZW50VHJlZTppfSk7Zm9yKGNvbnN0IGUgb2YgbilpZihlLmFjY2Vzc2liaWxpdHlEYXRhPy50eXBlKXtlLnBhcmVudFRyZWVJZD1hKys7Yz0hMX19aWYoYyl7Zm9yKGNvbnN0IGUgb2YgdC52YWx1ZXMoKSlmb3IoY29uc3QgdCBvZiBlKXtkZWxldGUgdC5wYXJlbnRUcmVlSWQ7ZGVsZXRlIHQuc3RydWN0VHJlZVBhcmVudH1yZXR1cm4hMX1yZXR1cm4hMH1hc3luYyB1cGRhdGVTdHJ1Y3R1cmVUcmVlKHtuZXdBbm5vdGF0aW9uc0J5UGFnZTplLHBkZk1hbmFnZXI6dCxuZXdSZWZzOmF9KXtjb25zdCByPXRoaXMuZGljdC54cmVmLGk9dGhpcy5kaWN0LmNsb25lKCksbz10aGlzLnJlZjtsZXQgYyxsPWkuZ2V0UmF3KCJQYXJlbnRUcmVlIik7aWYobCBpbnN0YW5jZW9mIG4uUmVmKWM9ci5mZXRjaChsKTtlbHNle2M9bDtsPXIuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7aS5zZXQoIlBhcmVudFRyZWUiLGwpfWM9Yy5jbG9uZSgpO2xldCBoPWMuZ2V0UmF3KCJOdW1zIiksdT1udWxsO2lmKGggaW5zdGFuY2VvZiBuLlJlZil7dT1oO2g9ci5mZXRjaCh1KX1oPWguc2xpY2UoKTt1fHxjLnNldCgiTnVtcyIsaCk7bGV0IGQ9aS5nZXRSYXcoIksiKSxmPW51bGw7aWYoZCBpbnN0YW5jZW9mIG4uUmVmKXtmPWQ7ZD1yLmZldGNoKGYpfWVsc2V7Zj1yLmdldE5ld1RlbXBvcmFyeVJlZigpO2kuc2V0KCJLIixmKX1kPUFycmF5LmlzQXJyYXkoZCk/ZC5zbGljZSgpOltkXTtjb25zdCBnPVtdLHA9YXdhaXQgU3RydWN0VHJlZVJvb3QuI2soe25ld0Fubm90YXRpb25zQnlQYWdlOmUsc3RydWN0VHJlZVJvb3RSZWY6byxraWRzOmQsbnVtczpoLHhyZWY6cixwZGZNYW5hZ2VyOnQsbmV3UmVmczphLGJ1ZmZlcjpnfSk7aS5zZXQoIlBhcmVudFRyZWVOZXh0S2V5IixwKTtnLmxlbmd0aD0wO2F3YWl0KDAscy53cml0ZU9iamVjdCkoZixkLGcscik7YS5wdXNoKHtyZWY6ZixkYXRhOmcuam9pbigiIil9KTtpZih1KXtnLmxlbmd0aD0wO2F3YWl0KDAscy53cml0ZU9iamVjdCkodSxoLGcscik7YS5wdXNoKHtyZWY6dSxkYXRhOmcuam9pbigiIil9KX1nLmxlbmd0aD0wO2F3YWl0KDAscy53cml0ZU9iamVjdCkobCxjLGcscik7YS5wdXNoKHtyZWY6bCxkYXRhOmcuam9pbigiIil9KTtnLmxlbmd0aD0wO2F3YWl0KDAscy53cml0ZU9iamVjdCkobyxpLGcscik7YS5wdXNoKHtyZWY6byxkYXRhOmcuam9pbigiIil9KX1zdGF0aWMgYXN5bmMjayh7bmV3QW5ub3RhdGlvbnNCeVBhZ2U6ZSxzdHJ1Y3RUcmVlUm9vdFJlZjp0LGtpZHM6YSxudW1zOnIseHJlZjppLHBkZk1hbmFnZXI6byxuZXdSZWZzOmMsYnVmZmVyOmx9KXtjb25zdCBoPW4uTmFtZS5nZXQoIk9CSlIiKTtsZXQgdT0tMS8wO2Zvcihjb25zdFtkLGZdb2YgZSl7Y29uc3R7cmVmOmV9PWF3YWl0IG8uZ2V0UGFnZShkKTtmb3IoY29uc3R7YWNjZXNzaWJpbGl0eURhdGE6e3R5cGU6byx0aXRsZTpkLGxhbmc6ZyxhbHQ6cCxleHBhbmRlZDptLGFjdHVhbFRleHQ6Yn0scmVmOnkscGFyZW50VHJlZUlkOncsc3RydWN0VHJlZVBhcmVudDpTfW9mIGYpe3U9TWF0aC5tYXgodSx3KTtjb25zdCBmPWkuZ2V0TmV3VGVtcG9yYXJ5UmVmKCkseD1uZXcgbi5EaWN0KGkpO3guc2V0KCJTIixuLk5hbWUuZ2V0KG8pKTtkJiZ4LnNldCgiVCIsZCk7ZyYmeC5zZXQoIkxhbmciLGcpO3AmJnguc2V0KCJBbHQiLHApO20mJnguc2V0KCJFIixtKTtiJiZ4LnNldCgiQWN0dWFsVGV4dCIsYik7Uz9hd2FpdCB0aGlzLiNGKHtzdHJ1Y3RUcmVlUGFyZW50OlMsdGFnRGljdDp4LG5ld1RhZ1JlZjpmLGZhbGxiYWNrUmVmOnQseHJlZjppLG5ld1JlZnM6YyxidWZmZXI6bH0pOnguc2V0KCJQIix0KTtjb25zdCBDPW5ldyBuLkRpY3QoaSk7eC5zZXQoIksiLEMpO0Muc2V0KCJUeXBlIixoKTtDLnNldCgiUGciLGUpO0Muc2V0KCJPYmoiLHkpO2wubGVuZ3RoPTA7YXdhaXQoMCxzLndyaXRlT2JqZWN0KShmLHgsbCxpKTtjLnB1c2goe3JlZjpmLGRhdGE6bC5qb2luKCIiKX0pO3IucHVzaCh3LGYpO2EucHVzaChmKX19cmV0dXJuIHUrMX1zdGF0aWMjdih7ZWxlbWVudHM6ZSx4cmVmOnQscGFnZURpY3Q6YSxwYXJlbnRUcmVlOnJ9KXtjb25zdCBzPW5ldyBNYXA7Zm9yKGNvbnN0IHQgb2YgZSlpZih0LnN0cnVjdFRyZWVQYXJlbnRJZCl7Y29uc3QgZT1wYXJzZUludCh0LnN0cnVjdFRyZWVQYXJlbnRJZC5zcGxpdCgiX21jIilbMV0sMTApO3Muc2V0KGUsdCl9Y29uc3Qgbz1hLmdldCgiU3RydWN0UGFyZW50cyIpLGM9bmV3IGkuTnVtYmVyVHJlZShyLHQpLmdldChvKTtpZighQXJyYXkuaXNBcnJheShjKSlyZXR1cm47Y29uc3QgdXBkYXRlRWxlbWVudD0oZSxhLHIpPT57Y29uc3QgaT1zLmdldChlKTtpZihpKXtjb25zdCBlPWEuZ2V0UmF3KCJQIikscz10LmZldGNoSWZSZWYoZSk7ZSBpbnN0YW5jZW9mIG4uUmVmJiZzIGluc3RhbmNlb2Ygbi5EaWN0JiYoaS5zdHJ1Y3RUcmVlUGFyZW50PXtyZWY6cixkaWN0OmF9KTtyZXR1cm4hMH1yZXR1cm4hMX07Zm9yKGNvbnN0IGUgb2YgYyl7aWYoIShlIGluc3RhbmNlb2Ygbi5SZWYpKWNvbnRpbnVlO2NvbnN0IGE9dC5mZXRjaChlKSxyPWEuZ2V0KCJLIik7aWYoTnVtYmVyLmlzSW50ZWdlcihyKSl1cGRhdGVFbGVtZW50KHIsYSxlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCBuIG9mIHIpe249dC5mZXRjaElmUmVmKG4pO2lmKE51bWJlci5pc0ludGVnZXIobikmJnVwZGF0ZUVsZW1lbnQobixhLGUpKWJyZWFrfX19c3RhdGljIGFzeW5jI0Yoe3N0cnVjdFRyZWVQYXJlbnQ6e3JlZjplLGRpY3Q6dH0sdGFnRGljdDphLG5ld1RhZ1JlZjppLGZhbGxiYWNrUmVmOm8seHJlZjpjLG5ld1JlZnM6bCxidWZmZXI6aH0pe2NvbnN0IHU9dC5nZXRSYXcoIlAiKTtsZXQgZD1jLmZldGNoSWZSZWYodSk7YS5zZXQoIlAiLHUpO2xldCBmLGc9ITEscD1kLmdldFJhdygiSyIpO2lmKHAgaW5zdGFuY2VvZiBuLlJlZilmPWMuZmV0Y2gocCk7ZWxzZXtmPXA7cD1jLmdldE5ld1RlbXBvcmFyeVJlZigpO2Q9ZC5jbG9uZSgpO2Quc2V0KCJLIixwKTtnPSEwfWlmKEFycmF5LmlzQXJyYXkoZikpe2NvbnN0IHQ9Zi5pbmRleE9mKGUpO2lmKCEodD49MCkpeygwLHIud2FybikoIkNhbm5vdCB1cGRhdGUgdGhlIHN0cnVjdCB0cmVlOiBwYXJlbnQga2lkIG5vdCBmb3VuZC4iKTthLnNldCgiUCIsbyk7cmV0dXJufWY9Zi5zbGljZSgpO2Yuc3BsaWNlKHQrMSwwLGkpfWVsc2UgaWYoZiBpbnN0YW5jZW9mIG4uRGljdCl7Zj1bcCxpXTtwPWMuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7ZC5zZXQoIksiLHApO2c9ITB9aC5sZW5ndGg9MDthd2FpdCgwLHMud3JpdGVPYmplY3QpKHAsZixoLGMpO2wucHVzaCh7cmVmOnAsZGF0YTpoLmpvaW4oIiIpfSk7aWYoZyl7aC5sZW5ndGg9MDthd2FpdCgwLHMud3JpdGVPYmplY3QpKHUsZCxoLGMpO2wucHVzaCh7cmVmOnUsZGF0YTpoLmpvaW4oIiIpfSl9fX10LlN0cnVjdFRyZWVSb290PVN0cnVjdFRyZWVSb290O2NsYXNzIFN0cnVjdEVsZW1lbnROb2Rle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy50cmVlPWU7dGhpcy5kaWN0PXQ7dGhpcy5raWRzPVtdO3RoaXMucGFyc2VLaWRzKCl9Z2V0IHJvbGUoKXtjb25zdCBlPXRoaXMuZGljdC5nZXQoIlMiKSx0PWUgaW5zdGFuY2VvZiBuLk5hbWU/ZS5uYW1lOiIiLHtyb290OmF9PXRoaXMudHJlZTtyZXR1cm4gYS5yb2xlTWFwLmhhcyh0KT9hLnJvbGVNYXAuZ2V0KHQpOnR9cGFyc2VLaWRzKCl7bGV0IGU9bnVsbDtjb25zdCB0PXRoaXMuZGljdC5nZXRSYXcoIlBnIik7dCBpbnN0YW5jZW9mIG4uUmVmJiYoZT10LnRvU3RyaW5nKCkpO2NvbnN0IGE9dGhpcy5kaWN0LmdldCgiSyIpO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGNvbnN0IHQgb2YgYSl7Y29uc3QgYT10aGlzLnBhcnNlS2lkKGUsdCk7YSYmdGhpcy5raWRzLnB1c2goYSl9ZWxzZXtjb25zdCB0PXRoaXMucGFyc2VLaWQoZSxhKTt0JiZ0aGlzLmtpZHMucHVzaCh0KX19cGFyc2VLaWQoZSx0KXtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXJldHVybiB0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6byxtY2lkOnQscGFnZU9iaklkOmV9KTtsZXQgYT1udWxsO3QgaW5zdGFuY2VvZiBuLlJlZj9hPXRoaXMuZGljdC54cmVmLmZldGNoKHQpOnQgaW5zdGFuY2VvZiBuLkRpY3QmJihhPXQpO2lmKCFhKXJldHVybiBudWxsO2NvbnN0IHI9YS5nZXRSYXcoIlBnIik7ciBpbnN0YW5jZW9mIG4uUmVmJiYoZT1yLnRvU3RyaW5nKCkpO2NvbnN0IGk9YS5nZXQoIlR5cGUiKWluc3RhbmNlb2Ygbi5OYW1lP2EuZ2V0KCJUeXBlIikubmFtZTpudWxsO2lmKCJNQ1IiPT09aSl7aWYodGhpcy50cmVlLnBhZ2VEaWN0Lm9iaklkIT09ZSlyZXR1cm4gbnVsbDtjb25zdCB0PWEuZ2V0UmF3KCJTdG0iKTtyZXR1cm4gbmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6YyxyZWZPYmpJZDp0IGluc3RhbmNlb2Ygbi5SZWY/dC50b1N0cmluZygpOm51bGwscGFnZU9iaklkOmUsbWNpZDphLmdldCgiTUNJRCIpfSl9aWYoIk9CSlIiPT09aSl7aWYodGhpcy50cmVlLnBhZ2VEaWN0Lm9iaklkIT09ZSlyZXR1cm4gbnVsbDtjb25zdCB0PWEuZ2V0UmF3KCJPYmoiKTtyZXR1cm4gbmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6bCxyZWZPYmpJZDp0IGluc3RhbmNlb2Ygbi5SZWY/dC50b1N0cmluZygpOm51bGwscGFnZU9iaklkOmV9KX1yZXR1cm4gbmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6dSxkaWN0OmF9KX19Y2xhc3MgU3RydWN0RWxlbWVudHtjb25zdHJ1Y3Rvcih7dHlwZTplLGRpY3Q6dD1udWxsLG1jaWQ6YT1udWxsLHBhZ2VPYmpJZDpyPW51bGwscmVmT2JqSWQ6bj1udWxsfSl7dGhpcy50eXBlPWU7dGhpcy5kaWN0PXQ7dGhpcy5tY2lkPWE7dGhpcy5wYWdlT2JqSWQ9cjt0aGlzLnJlZk9iaklkPW47dGhpcy5wYXJlbnROb2RlPW51bGx9fXQuU3RydWN0VHJlZVBhZ2U9Y2xhc3MgU3RydWN0VHJlZVBhZ2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnJvb3Q9ZTt0aGlzLnJvb3REaWN0PWU/ZS5kaWN0Om51bGw7dGhpcy5wYWdlRGljdD10O3RoaXMubm9kZXM9W119cGFyc2UoZSl7aWYoIXRoaXMucm9vdHx8IXRoaXMucm9vdERpY3QpcmV0dXJuO2NvbnN0IHQ9dGhpcy5yb290RGljdC5nZXQoIlBhcmVudFRyZWUiKTtpZighdClyZXR1cm47Y29uc3QgYT10aGlzLnBhZ2VEaWN0LmdldCgiU3RydWN0UGFyZW50cyIpLHI9ZSBpbnN0YW5jZW9mIG4uUmVmJiZ0aGlzLnJvb3Quc3RydWN0UGFyZW50SWRzPy5nZXQoZSk7aWYoIU51bWJlci5pc0ludGVnZXIoYSkmJiFyKXJldHVybjtjb25zdCBzPW5ldyBNYXAsbz1uZXcgaS5OdW1iZXJUcmVlKHQsdGhpcy5yb290RGljdC54cmVmKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGEpKXtjb25zdCBlPW8uZ2V0KGEpO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGNvbnN0IHQgb2YgZSl0IGluc3RhbmNlb2Ygbi5SZWYmJnRoaXMuYWRkTm9kZSh0aGlzLnJvb3REaWN0LnhyZWYuZmV0Y2godCkscyl9aWYocilmb3IoY29uc3RbZSx0XW9mIHIpe2NvbnN0IGE9by5nZXQoZSk7aWYoYSl7Y29uc3QgZT10aGlzLmFkZE5vZGUodGhpcy5yb290RGljdC54cmVmLmZldGNoSWZSZWYoYSkscyk7MT09PWU/LmtpZHM/Lmxlbmd0aCYmZS5raWRzWzBdLnR5cGU9PT1sJiYoZS5raWRzWzBdLnR5cGU9dCl9fX1hZGROb2RlKGUsdCxhPTApe2lmKGE+NDApeygwLHIud2FybikoIlN0cnVjdFRyZWUgTUFYX0RFUFRIIHJlYWNoZWQuIik7cmV0dXJuIG51bGx9aWYodC5oYXMoZSkpcmV0dXJuIHQuZ2V0KGUpO2NvbnN0IGk9bmV3IFN0cnVjdEVsZW1lbnROb2RlKHRoaXMsZSk7dC5zZXQoZSxpKTtjb25zdCBzPWUuZ2V0KCJQIik7aWYoIXN8fCgwLG4uaXNOYW1lKShzLmdldCgiVHlwZSIpLCJTdHJ1Y3RUcmVlUm9vdCIpKXt0aGlzLmFkZFRvcExldmVsTm9kZShlLGkpfHx0LmRlbGV0ZShlKTtyZXR1cm4gaX1jb25zdCBvPXRoaXMuYWRkTm9kZShzLHQsYSsxKTtpZighbylyZXR1cm4gaTtsZXQgYz0hMTtmb3IoY29uc3QgdCBvZiBvLmtpZHMpaWYodC50eXBlPT09dSYmdC5kaWN0PT09ZSl7dC5wYXJlbnROb2RlPWk7Yz0hMH1jfHx0LmRlbGV0ZShlKTtyZXR1cm4gaX1hZGRUb3BMZXZlbE5vZGUoZSx0KXtjb25zdCBhPXRoaXMucm9vdERpY3QuZ2V0KCJLIik7aWYoIWEpcmV0dXJuITE7aWYoYSBpbnN0YW5jZW9mIG4uRGljdCl7aWYoYS5vYmpJZCE9PWUub2JqSWQpcmV0dXJuITE7dGhpcy5ub2Rlc1swXT10O3JldHVybiEwfWlmKCFBcnJheS5pc0FycmF5KGEpKXJldHVybiEwO2xldCByPSExO2ZvcihsZXQgbj0wO248YS5sZW5ndGg7bisrKXtjb25zdCBpPWFbbl07aWYoaT8udG9TdHJpbmcoKT09PWUub2JqSWQpe3RoaXMubm9kZXNbbl09dDtyPSEwfX1yZXR1cm4gcn1nZXQgc2VyaWFsaXphYmxlKCl7ZnVuY3Rpb24gbm9kZVRvU2VyaWFsaXphYmxlKGUsdCxhPTApe2lmKGE+NDApeygwLHIud2FybikoIlN0cnVjdFRyZWUgdG9vIGRlZXAgdG8gYmUgZnVsbHkgc2VyaWFsaXplZC4iKTtyZXR1cm59Y29uc3Qgbj1PYmplY3QuY3JlYXRlKG51bGwpO24ucm9sZT1lLnJvbGU7bi5jaGlsZHJlbj1bXTt0LmNoaWxkcmVuLnB1c2gobik7Y29uc3QgaT1lLmRpY3QuZ2V0KCJBbHQiKTsic3RyaW5nIj09dHlwZW9mIGkmJihuLmFsdD0oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShpKSk7Y29uc3Qgcz1lLmRpY3QuZ2V0KCJMYW5nIik7InN0cmluZyI9PXR5cGVvZiBzJiYobi5sYW5nPSgwLHIuc3RyaW5nVG9QREZTdHJpbmcpKHMpKTtmb3IoY29uc3QgdCBvZiBlLmtpZHMpe2NvbnN0IGU9dC50eXBlPT09dT90LnBhcmVudE5vZGU6bnVsbDtlP25vZGVUb1NlcmlhbGl6YWJsZShlLG4sYSsxKTp0LnR5cGU9PT1vfHx0LnR5cGU9PT1jP24uY2hpbGRyZW4ucHVzaCh7dHlwZToiY29udGVudCIsaWQ6YHAke3QucGFnZU9iaklkfV9tYyR7dC5tY2lkfWB9KTp0LnR5cGU9PT1sP24uY2hpbGRyZW4ucHVzaCh7dHlwZToib2JqZWN0IixpZDp0LnJlZk9iaklkfSk6dC50eXBlPT09aCYmbi5jaGlsZHJlbi5wdXNoKHt0eXBlOiJhbm5vdGF0aW9uIixpZDpgJHtyLkFubm90YXRpb25QcmVmaXh9JHt0LnJlZk9iaklkfWB9KX19Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpO2UuY2hpbGRyZW49W107ZS5yb2xlPSJSb290Ijtmb3IoY29uc3QgdCBvZiB0aGlzLm5vZGVzKXQmJm5vZGVUb1NlcmlhbGl6YWJsZSh0LGUpO3JldHVybiBlfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5pbmNyZW1lbnRhbFVwZGF0ZT1hc3luYyBmdW5jdGlvbiBpbmNyZW1lbnRhbFVwZGF0ZSh7b3JpZ2luYWxEYXRhOmUseHJlZkluZm86dCxuZXdSZWZzOmEseHJlZjpvPW51bGwsaGFzWGZhOmw9ITEseGZhRGF0YXNldHNSZWY6aD1udWxsLGhhc1hmYURhdGFzZXRzRW50cnk6dT0hMSxuZWVkQXBwZWFyYW5jZXM6ZCxhY3JvRm9ybVJlZjpmPW51bGwsYWNyb0Zvcm06Zz1udWxsLHhmYURhdGE6cD1udWxsfSl7YXdhaXQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWNyb2Zvcm0oe3hyZWY6ZSxhY3JvRm9ybTp0LGFjcm9Gb3JtUmVmOmEsaGFzWGZhOm4saGFzWGZhRGF0YXNldHNFbnRyeTppLHhmYURhdGFzZXRzUmVmOnMsbmVlZEFwcGVhcmFuY2VzOm8sbmV3UmVmczpjfSl7IW58fGl8fHN8fCgwLHIud2FybikoIlhGQSAtIENhbm5vdCBzYXZlIGl0Iik7aWYoIW8mJighbnx8IXN8fGkpKXJldHVybjtjb25zdCBsPXQuY2xvbmUoKTtpZihuJiYhaSl7Y29uc3QgZT10LmdldCgiWEZBIikuc2xpY2UoKTtlLnNwbGljZSgyLDAsImRhdGFzZXRzIik7ZS5zcGxpY2UoMywwLHMpO2wuc2V0KCJYRkEiLGUpfW8mJmwuc2V0KCJOZWVkQXBwZWFyYW5jZXMiLCEwKTtjb25zdCBoPVtdO2F3YWl0IHdyaXRlT2JqZWN0KGEsbCxoLGUpO2MucHVzaCh7cmVmOmEsZGF0YTpoLmpvaW4oIiIpfSl9KHt4cmVmOm8sYWNyb0Zvcm06ZyxhY3JvRm9ybVJlZjpmLGhhc1hmYTpsLGhhc1hmYURhdGFzZXRzRW50cnk6dSx4ZmFEYXRhc2V0c1JlZjpoLG5lZWRBcHBlYXJhbmNlczpkLG5ld1JlZnM6YX0pO2wmJmZ1bmN0aW9uIHVwZGF0ZVhGQSh7eGZhRGF0YTplLHhmYURhdGFzZXRzUmVmOnQsbmV3UmVmczphLHhyZWY6bn0pe2lmKG51bGw9PT1lKXtlPWZ1bmN0aW9uIHdyaXRlWEZBRGF0YUZvckFjcm9mb3JtKGUsdCl7Y29uc3QgYT1uZXcgcy5TaW1wbGVYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KS5wYXJzZUZyb21TdHJpbmcoZSk7Zm9yKGNvbnN0e3hmYTplfW9mIHQpe2lmKCFlKWNvbnRpbnVlO2NvbnN0e3BhdGg6dCx2YWx1ZTpufT1lO2lmKCF0KWNvbnRpbnVlO2NvbnN0IG89KDAsaS5wYXJzZVhGQVBhdGgpKHQpO2xldCBjPWEuZG9jdW1lbnRFbGVtZW50LnNlYXJjaE5vZGUobywwKTshYyYmby5sZW5ndGg+MSYmKGM9YS5kb2N1bWVudEVsZW1lbnQuc2VhcmNoTm9kZShbby5hdCgtMSldLDApKTtjP2MuY2hpbGROb2Rlcz1BcnJheS5pc0FycmF5KG4pP24ubWFwKChlPT5uZXcgcy5TaW1wbGVET01Ob2RlKCJ2YWx1ZSIsZSkpKTpbbmV3IHMuU2ltcGxlRE9NTm9kZSgiI3RleHQiLG4pXTooMCxyLndhcm4pKGBOb2RlIG5vdCBmb3VuZCBmb3IgcGF0aDogJHt0fWApfWNvbnN0IG49W107YS5kb2N1bWVudEVsZW1lbnQuZHVtcChuKTtyZXR1cm4gbi5qb2luKCIiKX0obi5mZXRjaElmUmVmKHQpLmdldFN0cmluZygpLGEpfWNvbnN0IG89bi5lbmNyeXB0O2lmKG8pe2U9by5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odC5udW0sdC5nZW4pLmVuY3J5cHRTdHJpbmcoZSl9Y29uc3QgYz1gJHt0Lm51bX0gJHt0Lmdlbn0gb2JqXG48PCAvVHlwZSAvRW1iZWRkZWRGaWxlIC9MZW5ndGggJHtlLmxlbmd0aH0+Plxuc3RyZWFtXG5gK2UrIlxuZW5kc3RyZWFtXG5lbmRvYmpcbiI7YS5wdXNoKHtyZWY6dCxkYXRhOmN9KX0oe3hmYURhdGE6cCx4ZmFEYXRhc2V0c1JlZjpoLG5ld1JlZnM6YSx4cmVmOm99KTtjb25zdCBtPW5ldyBuLkRpY3QobnVsbCksYj10Lm5ld1JlZjtsZXQgeSx3O2NvbnN0IFM9ZS5hdCgtMSk7aWYoMTA9PT1TfHwxMz09PVMpe3k9W107dz1lLmxlbmd0aH1lbHNle3k9WyJcbiJdO3c9ZS5sZW5ndGgrMX1tLnNldCgiU2l6ZSIsYi5udW0rMSk7bS5zZXQoIlByZXYiLHQuc3RhcnRYUmVmKTttLnNldCgiVHlwZSIsbi5OYW1lLmdldCgiWFJlZiIpKTtudWxsIT09dC5yb290UmVmJiZtLnNldCgiUm9vdCIsdC5yb290UmVmKTtudWxsIT09dC5pbmZvUmVmJiZtLnNldCgiSW5mbyIsdC5pbmZvUmVmKTtudWxsIT09dC5lbmNyeXB0UmVmJiZtLnNldCgiRW5jcnlwdCIsdC5lbmNyeXB0UmVmKTthLnB1c2goe3JlZjpiLGRhdGE6IiJ9KTthPWEuc29ydCgoKGUsdCk9PmUucmVmLm51bS10LnJlZi5udW0pKTtjb25zdCB4PVtbMCwxLDY1NTM1XV0sQz1bMCwxXTtsZXQgaz0wO2Zvcihjb25zdHtyZWY6ZSxkYXRhOnR9b2YgYSl7az1NYXRoLm1heChrLHcpO3gucHVzaChbMSx3LE1hdGgubWluKGUuZ2VuLDY1NTM1KV0pO3crPXQubGVuZ3RoO0MucHVzaChlLm51bSwxKTt5LnB1c2godCl9bS5zZXQoIkluZGV4IixDKTtpZihBcnJheS5pc0FycmF5KHQuZmlsZUlkcykmJnQuZmlsZUlkcy5sZW5ndGg+MCl7Y29uc3QgZT1mdW5jdGlvbiBjb21wdXRlTUQ1KGUsdCl7Y29uc3QgYT1NYXRoLmZsb29yKERhdGUubm93KCkvMWUzKSxuPXQuZmlsZW5hbWV8fCIiLGk9W2EudG9TdHJpbmcoKSxuLGUudG9TdHJpbmcoKV07bGV0IHM9aS5yZWR1Y2UoKChlLHQpPT5lK3QubGVuZ3RoKSwwKTtmb3IoY29uc3QgZSBvZiBPYmplY3QudmFsdWVzKHQuaW5mbykpe2kucHVzaChlKTtzKz1lLmxlbmd0aH1jb25zdCBvPW5ldyBVaW50OEFycmF5KHMpO2xldCBsPTA7Zm9yKGNvbnN0IGUgb2YgaSl7d3JpdGVTdHJpbmcoZSxsLG8pO2wrPWUubGVuZ3RofXJldHVybigwLHIuYnl0ZXNUb1N0cmluZykoKDAsYy5jYWxjdWxhdGVNRDUpKG8pKX0odyx0KTttLnNldCgiSUQiLFt0LmZpbGVJZHNbMF0sZV0pfWNvbnN0IHY9WzEsTWF0aC5jZWlsKE1hdGgubG9nMihrKS84KSwyXSxGPSh2WzBdK3ZbMV0rdlsyXSkqeC5sZW5ndGg7bS5zZXQoIlciLHYpO20uc2V0KCJMZW5ndGgiLEYpO3kucHVzaChgJHtiLm51bX0gJHtiLmdlbn0gb2JqXG5gKTthd2FpdCB3cml0ZURpY3QobSx5LG51bGwpO3kucHVzaCgiIHN0cmVhbVxuIik7Y29uc3QgTz15LnJlZHVjZSgoKGUsdCk9PmUrdC5sZW5ndGgpLDApLFQ9YFxuZW5kc3RyZWFtXG5lbmRvYmpcbnN0YXJ0eHJlZlxuJHt3fVxuJSVFT0ZcbmAsTT1uZXcgVWludDhBcnJheShlLmxlbmd0aCtPK0YrVC5sZW5ndGgpO00uc2V0KGUpO2xldCBEPWUubGVuZ3RoO2Zvcihjb25zdCBlIG9mIHkpe3dyaXRlU3RyaW5nKGUsRCxNKTtEKz1lLmxlbmd0aH1mb3IoY29uc3RbZSx0LGFdb2YgeCl7RD13cml0ZUludChlLHZbMF0sRCxNKTtEPXdyaXRlSW50KHQsdlsxXSxELE0pO0Q9d3JpdGVJbnQoYSx2WzJdLEQsTSl9d3JpdGVTdHJpbmcoVCxELE0pO3JldHVybiBNfTt0LndyaXRlRGljdD13cml0ZURpY3Q7dC53cml0ZU9iamVjdD13cml0ZU9iamVjdDt2YXIgcj1hKDIpLG49YSg0KSxpPWEoMykscz1hKDcxKSxvPWEoNSksYz1hKDc0KTthc3luYyBmdW5jdGlvbiB3cml0ZU9iamVjdChlLHQsYSx7ZW5jcnlwdDpyPW51bGx9KXtjb25zdCBpPXI/LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShlLm51bSxlLmdlbik7YS5wdXNoKGAke2UubnVtfSAke2UuZ2VufSBvYmpcbmApO3QgaW5zdGFuY2VvZiBuLkRpY3Q/YXdhaXQgd3JpdGVEaWN0KHQsYSxpKTp0IGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtP2F3YWl0IHdyaXRlU3RyZWFtKHQsYSxpKTpBcnJheS5pc0FycmF5KHQpJiZhd2FpdCB3cml0ZUFycmF5KHQsYSxpKTthLnB1c2goIlxuZW5kb2JqXG4iKX1hc3luYyBmdW5jdGlvbiB3cml0ZURpY3QoZSx0LGEpe3QucHVzaCgiPDwiKTtmb3IoY29uc3QgciBvZiBlLmdldEtleXMoKSl7dC5wdXNoKGAgLyR7KDAsaS5lc2NhcGVQREZOYW1lKShyKX0gYCk7YXdhaXQgd3JpdGVWYWx1ZShlLmdldFJhdyhyKSx0LGEpfXQucHVzaCgiPj4iKX1hc3luYyBmdW5jdGlvbiB3cml0ZVN0cmVhbShlLHQsYSl7bGV0IGk9ZS5nZXRTdHJpbmcoKTtjb25zdHtkaWN0OnN9PWUsW28sY109YXdhaXQgUHJvbWlzZS5hbGwoW3MuZ2V0QXN5bmMoIkZpbHRlciIpLHMuZ2V0QXN5bmMoIkRlY29kZVBhcm1zIildKSxsPUFycmF5LmlzQXJyYXkobyk/YXdhaXQgcy54cmVmLmZldGNoSWZSZWZBc3luYyhvWzBdKTpvLGg9KDAsbi5pc05hbWUpKGwsIkZsYXRlRGVjb2RlIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBDb21wcmVzc2lvblN0cmVhbSYmKGkubGVuZ3RoPj0yNTZ8fGgpKXRyeXtjb25zdCBlPSgwLHIuc3RyaW5nVG9CeXRlcykoaSksdD1uZXcgQ29tcHJlc3Npb25TdHJlYW0oImRlZmxhdGUiKSxhPXQud3JpdGFibGUuZ2V0V3JpdGVyKCk7YS53cml0ZShlKTthLmNsb3NlKCk7Y29uc3QgbD1hd2FpdCBuZXcgUmVzcG9uc2UodC5yZWFkYWJsZSkuYXJyYXlCdWZmZXIoKTtpPSgwLHIuYnl0ZXNUb1N0cmluZykobmV3IFVpbnQ4QXJyYXkobCkpO2xldCB1LGQ7aWYobyl7aWYoIWgpe3U9QXJyYXkuaXNBcnJheShvKT9bbi5OYW1lLmdldCgiRmxhdGVEZWNvZGUiKSwuLi5vXTpbbi5OYW1lLmdldCgiRmxhdGVEZWNvZGUiKSxvXTtjJiYoZD1BcnJheS5pc0FycmF5KGMpP1tudWxsLC4uLmNdOltudWxsLGNdKX19ZWxzZSB1PW4uTmFtZS5nZXQoIkZsYXRlRGVjb2RlIik7dSYmcy5zZXQoIkZpbHRlciIsdSk7ZCYmcy5zZXQoIkRlY29kZVBhcm1zIixkKX1jYXRjaChlKXsoMCxyLmluZm8pKGB3cml0ZVN0cmVhbSAtIGNhbm5vdCBjb21wcmVzcyBkYXRhOiAiJHtlfSIuYCl9YSYmKGk9YS5lbmNyeXB0U3RyaW5nKGkpKTtzLnNldCgiTGVuZ3RoIixpLmxlbmd0aCk7YXdhaXQgd3JpdGVEaWN0KHMsdCxhKTt0LnB1c2goIiBzdHJlYW1cbiIsaSwiXG5lbmRzdHJlYW0iKX1hc3luYyBmdW5jdGlvbiB3cml0ZUFycmF5KGUsdCxhKXt0LnB1c2goIlsiKTtsZXQgcj0hMDtmb3IoY29uc3QgbiBvZiBlKXtyP3I9ITE6dC5wdXNoKCIgIik7YXdhaXQgd3JpdGVWYWx1ZShuLHQsYSl9dC5wdXNoKCJdIil9YXN5bmMgZnVuY3Rpb24gd3JpdGVWYWx1ZShlLHQsYSl7aWYoZSBpbnN0YW5jZW9mIG4uTmFtZSl0LnB1c2goYC8keygwLGkuZXNjYXBlUERGTmFtZSkoZS5uYW1lKX1gKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBuLlJlZil0LnB1c2goYCR7ZS5udW19ICR7ZS5nZW59IFJgKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpYXdhaXQgd3JpdGVBcnJheShlLHQsYSk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUpe2EmJihlPWEuZW5jcnlwdFN0cmluZyhlKSk7dC5wdXNoKGAoJHsoMCxpLmVzY2FwZVN0cmluZykoZSl9KWApfWVsc2UibnVtYmVyIj09dHlwZW9mIGU/dC5wdXNoKCgwLGkubnVtYmVyVG9TdHJpbmcpKGUpKToiYm9vbGVhbiI9PXR5cGVvZiBlP3QucHVzaChlLnRvU3RyaW5nKCkpOmUgaW5zdGFuY2VvZiBuLkRpY3Q/YXdhaXQgd3JpdGVEaWN0KGUsdCxhKTplIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtP2F3YWl0IHdyaXRlU3RyZWFtKGUsdCxhKTpudWxsPT09ZT90LnB1c2goIm51bGwiKTooMCxyLndhcm4pKGBVbmhhbmRsZWQgdmFsdWUgaW4gd3JpdGVyOiAke3R5cGVvZiBlfSwgcGxlYXNlIGZpbGUgYSBidWcuYCl9ZnVuY3Rpb24gd3JpdGVJbnQoZSx0LGEscil7Zm9yKGxldCBuPXQrYS0xO24+YS0xO24tLSl7cltuXT0yNTUmZTtlPj49OH1yZXR1cm4gYSt0fWZ1bmN0aW9uIHdyaXRlU3RyaW5nKGUsdCxhKXtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspYVt0K3JdPTI1NSZlLmNoYXJDb2RlQXQocil9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuY2FsY3VsYXRlU0hBMjU2PXQuY2FsY3VsYXRlTUQ1PXQuUERGMjA9dC5QREYxNz10LkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk9dC5BUkNGb3VyQ2lwaGVyPXQuQUVTMjU2Q2lwaGVyPXQuQUVTMTI4Q2lwaGVyPXZvaWQgMDt0LmNhbGN1bGF0ZVNIQTM4ND1jYWxjdWxhdGVTSEEzODQ7dC5jYWxjdWxhdGVTSEE1MTI9dm9pZCAwO3ZhciByPWEoMiksbj1hKDQpLGk9YSg3NSk7Y2xhc3MgQVJDRm91ckNpcGhlcntjb25zdHJ1Y3RvcihlKXt0aGlzLmE9MDt0aGlzLmI9MDtjb25zdCB0PW5ldyBVaW50OEFycmF5KDI1NiksYT1lLmxlbmd0aDtmb3IobGV0IGU9MDtlPDI1NjsrK2UpdFtlXT1lO2ZvcihsZXQgcj0wLG49MDtyPDI1NjsrK3Ipe2NvbnN0IGk9dFtyXTtuPW4raStlW3IlYV0mMjU1O3Rbcl09dFtuXTt0W25dPWl9dGhpcy5zPXR9ZW5jcnlwdEJsb2NrKGUpe2xldCB0PXRoaXMuYSxhPXRoaXMuYjtjb25zdCByPXRoaXMucyxuPWUubGVuZ3RoLGk9bmV3IFVpbnQ4QXJyYXkobik7Zm9yKGxldCBzPTA7czxuOysrcyl7dD10KzEmMjU1O2NvbnN0IG49clt0XTthPWErbiYyNTU7Y29uc3Qgbz1yW2FdO3JbdF09bztyW2FdPW47aVtzXT1lW3NdXnJbbitvJjI1NV19dGhpcy5hPXQ7dGhpcy5iPWE7cmV0dXJuIGl9ZGVjcnlwdEJsb2NrKGUpe3JldHVybiB0aGlzLmVuY3J5cHRCbG9jayhlKX1lbmNyeXB0KGUpe3JldHVybiB0aGlzLmVuY3J5cHRCbG9jayhlKX19dC5BUkNGb3VyQ2lwaGVyPUFSQ0ZvdXJDaXBoZXI7Y29uc3Qgcz1mdW5jdGlvbiBjYWxjdWxhdGVNRDVDbG9zdXJlKCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShbNywxMiwxNywyMiw3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNywxMiwxNywyMiw1LDksMTQsMjAsNSw5LDE0LDIwLDUsOSwxNCwyMCw1LDksMTQsMjAsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw2LDEwLDE1LDIxLDYsMTAsMTUsMjEsNiwxMCwxNSwyMSw2LDEwLDE1LDIxXSksdD1uZXcgSW50MzJBcnJheShbLTY4MDg3NjkzNiwtMzg5NTY0NTg2LDYwNjEwNTgxOSwtMTA0NDUyNTMzMCwtMTc2NDE4ODk3LDEyMDAwODA0MjYsLTE0NzMyMzEzNDEsLTQ1NzA1OTgzLDE3NzAwMzU0MTYsLTE5NTg0MTQ0MTcsLTQyMDYzLC0xOTkwNDA0MTYyLDE4MDQ2MDM2ODIsLTQwMzQxMTAxLC0xNTAyMDAyMjkwLDEyMzY1MzUzMjksLTE2NTc5NjUxMCwtMTA2OTUwMTYzMiw2NDM3MTc3MTMsLTM3Mzg5NzMwMiwtNzAxNTU4NjkxLDM4MDE2MDgzLC02NjA0NzgzMzUsLTQwNTUzNzg0OCw1Njg0NDY0MzgsLTEwMTk4MDM2OTAsLTE4NzM2Mzk2MSwxMTYzNTMxNTAxLC0xNDQ0NjgxNDY3LC01MTQwMzc4NCwxNzM1MzI4NDczLC0xOTI2NjA3NzM0LC0zNzg1NTgsLTIwMjI1NzQ0NjMsMTgzOTAzMDU2MiwtMzUzMDk1NTYsLTE1MzA5OTIwNjAsMTI3Mjg5MzM1MywtMTU1NDk3NjMyLC0xMDk0NzMwNjQwLDY4MTI3OTE3NCwtMzU4NTM3MjIyLC03MjI1MjE5NzksNzYwMjkxODksLTY0MDM2NDQ4NywtNDIxODE1ODM1LDUzMDc0MjUyMCwtOTk1MzM4NjUxLC0xOTg2MzA4NDQsMTEyNjg5MTQxNSwtMTQxNjM1NDkwNSwtNTc0MzQwNTUsMTcwMDQ4NTU3MSwtMTg5NDk4NjYwNiwtMTA1MTUyMywtMjA1NDkyMjc5OSwxODczMzEzMzU5LC0zMDYxMTc0NCwtMTU2MDE5ODM4MCwxMzA5MTUxNjQ5LC0xNDU1MjMwNzAsLTExMjAyMTAzNzksNzE4Nzg3MjU5LC0zNDM0ODU1NTFdKTtyZXR1cm4gZnVuY3Rpb24gaGFzaChhLHIsbil7bGV0IGk9MTczMjU4NDE5MyxzPS0yNzE3MzM4Nzksbz0tMTczMjU4NDE5NCxjPTI3MTczMzg3ODtjb25zdCBsPW4rNzImLTY0LGg9bmV3IFVpbnQ4QXJyYXkobCk7bGV0IHUsZDtmb3IodT0wO3U8bjsrK3UpaFt1XT1hW3IrK107aFt1KytdPTEyODtjb25zdCBmPWwtODtmb3IoO3U8ZjspaFt1KytdPTA7aFt1KytdPW48PDMmMjU1O2hbdSsrXT1uPj41JjI1NTtoW3UrK109bj4+MTMmMjU1O2hbdSsrXT1uPj4yMSYyNTU7aFt1KytdPW4+Pj4yOSYyNTU7aFt1KytdPTA7aFt1KytdPTA7aFt1KytdPTA7Y29uc3QgZz1uZXcgSW50MzJBcnJheSgxNik7Zm9yKHU9MDt1PGw7KXtmb3IoZD0wO2Q8MTY7KytkLHUrPTQpZ1tkXT1oW3VdfGhbdSsxXTw8OHxoW3UrMl08PDE2fGhbdSszXTw8MjQ7bGV0IGEscixuPWksbD1zLGY9byxwPWM7Zm9yKGQ9MDtkPDY0OysrZCl7aWYoZDwxNil7YT1sJmZ8fmwmcDtyPWR9ZWxzZSBpZihkPDMyKXthPXAmbHx+cCZmO3I9NSpkKzEmMTV9ZWxzZSBpZihkPDQ4KXthPWxeZl5wO3I9MypkKzUmMTV9ZWxzZXthPWZeKGx8fnApO3I9NypkJjE1fWNvbnN0IGk9cCxzPW4rYSt0W2RdK2dbcl18MCxvPWVbZF07cD1mO2Y9bDtsPWwrKHM8PG98cz4+PjMyLW8pfDA7bj1pfWk9aStufDA7cz1zK2x8MDtvPW8rZnwwO2M9YytwfDB9cmV0dXJuIG5ldyBVaW50OEFycmF5KFsyNTUmaSxpPj44JjI1NSxpPj4xNiYyNTUsaT4+PjI0JjI1NSwyNTUmcyxzPj44JjI1NSxzPj4xNiYyNTUscz4+PjI0JjI1NSwyNTUmbyxvPj44JjI1NSxvPj4xNiYyNTUsbz4+PjI0JjI1NSwyNTUmYyxjPj44JjI1NSxjPj4xNiYyNTUsYz4+PjI0JjI1NV0pfX0oKTt0LmNhbGN1bGF0ZU1ENT1zO2NsYXNzIFdvcmQ2NHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuaGlnaD0wfGU7dGhpcy5sb3c9MHx0fWFuZChlKXt0aGlzLmhpZ2gmPWUuaGlnaDt0aGlzLmxvdyY9ZS5sb3d9eG9yKGUpe3RoaXMuaGlnaF49ZS5oaWdoO3RoaXMubG93Xj1lLmxvd31vcihlKXt0aGlzLmhpZ2h8PWUuaGlnaDt0aGlzLmxvd3w9ZS5sb3d9c2hpZnRSaWdodChlKXtpZihlPj0zMil7dGhpcy5sb3c9dGhpcy5oaWdoPj4+ZS0zMnwwO3RoaXMuaGlnaD0wfWVsc2V7dGhpcy5sb3c9dGhpcy5sb3c+Pj5lfHRoaXMuaGlnaDw8MzItZTt0aGlzLmhpZ2g9dGhpcy5oaWdoPj4+ZXwwfX1zaGlmdExlZnQoZSl7aWYoZT49MzIpe3RoaXMuaGlnaD10aGlzLmxvdzw8ZS0zMjt0aGlzLmxvdz0wfWVsc2V7dGhpcy5oaWdoPXRoaXMuaGlnaDw8ZXx0aGlzLmxvdz4+PjMyLWU7dGhpcy5sb3c8PD1lfX1yb3RhdGVSaWdodChlKXtsZXQgdCxhO2lmKDMyJmUpe2E9dGhpcy5sb3c7dD10aGlzLmhpZ2h9ZWxzZXt0PXRoaXMubG93O2E9dGhpcy5oaWdofWUmPTMxO3RoaXMubG93PXQ+Pj5lfGE8PDMyLWU7dGhpcy5oaWdoPWE+Pj5lfHQ8PDMyLWV9bm90KCl7dGhpcy5oaWdoPX50aGlzLmhpZ2g7dGhpcy5sb3c9fnRoaXMubG93fWFkZChlKXtjb25zdCB0PSh0aGlzLmxvdz4+PjApKyhlLmxvdz4+PjApO2xldCBhPSh0aGlzLmhpZ2g+Pj4wKSsoZS5oaWdoPj4+MCk7dD40Mjk0OTY3Mjk1JiYoYSs9MSk7dGhpcy5sb3c9MHx0O3RoaXMuaGlnaD0wfGF9Y29weVRvKGUsdCl7ZVt0XT10aGlzLmhpZ2g+Pj4yNCYyNTU7ZVt0KzFdPXRoaXMuaGlnaD4+MTYmMjU1O2VbdCsyXT10aGlzLmhpZ2g+PjgmMjU1O2VbdCszXT0yNTUmdGhpcy5oaWdoO2VbdCs0XT10aGlzLmxvdz4+PjI0JjI1NTtlW3QrNV09dGhpcy5sb3c+PjE2JjI1NTtlW3QrNl09dGhpcy5sb3c+PjgmMjU1O2VbdCs3XT0yNTUmdGhpcy5sb3d9YXNzaWduKGUpe3RoaXMuaGlnaD1lLmhpZ2g7dGhpcy5sb3c9ZS5sb3d9fWNvbnN0IG89ZnVuY3Rpb24gY2FsY3VsYXRlU0hBMjU2Q2xvc3VyZSgpe2Z1bmN0aW9uIHJvdHIoZSx0KXtyZXR1cm4gZT4+PnR8ZTw8MzItdH1mdW5jdGlvbiBjaChlLHQsYSl7cmV0dXJuIGUmdF5+ZSZhfWZ1bmN0aW9uIG1haihlLHQsYSl7cmV0dXJuIGUmdF5lJmFedCZhfWZ1bmN0aW9uIHNpZ21hKGUpe3JldHVybiByb3RyKGUsMilecm90cihlLDEzKV5yb3RyKGUsMjIpfWZ1bmN0aW9uIHNpZ21hUHJpbWUoZSl7cmV0dXJuIHJvdHIoZSw2KV5yb3RyKGUsMTEpXnJvdHIoZSwyNSl9ZnVuY3Rpb24gbGl0dGxlU2lnbWEoZSl7cmV0dXJuIHJvdHIoZSw3KV5yb3RyKGUsMTgpXmU+Pj4zfWNvbnN0IGU9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07cmV0dXJuIGZ1bmN0aW9uIGhhc2godCxhLHIpe2xldCBuPTE3NzkwMzM3MDMsaT0zMTQ0MTM0Mjc3LHM9MTAxMzkwNDI0MixvPTI3NzM0ODA3NjIsYz0xMzU5ODkzMTE5LGw9MjYwMDgyMjkyNCxoPTUyODczNDYzNSx1PTE1NDE0NTkyMjU7Y29uc3QgZD02NCpNYXRoLmNlaWwoKHIrOSkvNjQpLGY9bmV3IFVpbnQ4QXJyYXkoZCk7bGV0IGcscDtmb3IoZz0wO2c8cjsrK2cpZltnXT10W2ErK107ZltnKytdPTEyODtjb25zdCBtPWQtODtmb3IoO2c8bTspZltnKytdPTA7ZltnKytdPTA7ZltnKytdPTA7ZltnKytdPTA7ZltnKytdPXI+Pj4yOSYyNTU7ZltnKytdPXI+PjIxJjI1NTtmW2crK109cj4+MTMmMjU1O2ZbZysrXT1yPj41JjI1NTtmW2crK109cjw8MyYyNTU7Y29uc3QgYj1uZXcgVWludDMyQXJyYXkoNjQpO2ZvcihnPTA7ZzxkOyl7Zm9yKHA9MDtwPDE2OysrcCl7YltwXT1mW2ddPDwyNHxmW2crMV08PDE2fGZbZysyXTw8OHxmW2crM107Zys9NH1mb3IocD0xNjtwPDY0OysrcCliW3BdPShyb3RyKHk9YltwLTJdLDE3KV5yb3RyKHksMTkpXnk+Pj4xMCkrYltwLTddK2xpdHRsZVNpZ21hKGJbcC0xNV0pK2JbcC0xNl18MDtsZXQgdCxhLHI9bixkPWksbT1zLHc9byxTPWMseD1sLEM9aCxrPXU7Zm9yKHA9MDtwPDY0OysrcCl7dD1rK3NpZ21hUHJpbWUoUykrY2goUyx4LEMpK2VbcF0rYltwXTthPXNpZ21hKHIpK21haihyLGQsbSk7az1DO0M9eDt4PVM7Uz13K3R8MDt3PW07bT1kO2Q9cjtyPXQrYXwwfW49bityfDA7aT1pK2R8MDtzPXMrbXwwO289byt3fDA7Yz1jK1N8MDtsPWwreHwwO2g9aCtDfDA7dT11K2t8MH12YXIgeTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW24+PjI0JjI1NSxuPj4xNiYyNTUsbj4+OCYyNTUsMjU1Jm4saT4+MjQmMjU1LGk+PjE2JjI1NSxpPj44JjI1NSwyNTUmaSxzPj4yNCYyNTUscz4+MTYmMjU1LHM+PjgmMjU1LDI1NSZzLG8+PjI0JjI1NSxvPj4xNiYyNTUsbz4+OCYyNTUsMjU1Jm8sYz4+MjQmMjU1LGM+PjE2JjI1NSxjPj44JjI1NSwyNTUmYyxsPj4yNCYyNTUsbD4+MTYmMjU1LGw+PjgmMjU1LDI1NSZsLGg+PjI0JjI1NSxoPj4xNiYyNTUsaD4+OCYyNTUsMjU1JmgsdT4+MjQmMjU1LHU+PjE2JjI1NSx1Pj44JjI1NSwyNTUmdV0pfX0oKTt0LmNhbGN1bGF0ZVNIQTI1Nj1vO2NvbnN0IGM9ZnVuY3Rpb24gY2FsY3VsYXRlU0hBNTEyQ2xvc3VyZSgpe2Z1bmN0aW9uIGNoKGUsdCxhLHIsbil7ZS5hc3NpZ24odCk7ZS5hbmQoYSk7bi5hc3NpZ24odCk7bi5ub3QoKTtuLmFuZChyKTtlLnhvcihuKX1mdW5jdGlvbiBtYWooZSx0LGEscixuKXtlLmFzc2lnbih0KTtlLmFuZChhKTtuLmFzc2lnbih0KTtuLmFuZChyKTtlLnhvcihuKTtuLmFzc2lnbihhKTtuLmFuZChyKTtlLnhvcihuKX1mdW5jdGlvbiBzaWdtYShlLHQsYSl7ZS5hc3NpZ24odCk7ZS5yb3RhdGVSaWdodCgyOCk7YS5hc3NpZ24odCk7YS5yb3RhdGVSaWdodCgzNCk7ZS54b3IoYSk7YS5hc3NpZ24odCk7YS5yb3RhdGVSaWdodCgzOSk7ZS54b3IoYSl9ZnVuY3Rpb24gc2lnbWFQcmltZShlLHQsYSl7ZS5hc3NpZ24odCk7ZS5yb3RhdGVSaWdodCgxNCk7YS5hc3NpZ24odCk7YS5yb3RhdGVSaWdodCgxOCk7ZS54b3IoYSk7YS5hc3NpZ24odCk7YS5yb3RhdGVSaWdodCg0MSk7ZS54b3IoYSl9ZnVuY3Rpb24gbGl0dGxlU2lnbWEoZSx0LGEpe2UuYXNzaWduKHQpO2Uucm90YXRlUmlnaHQoMSk7YS5hc3NpZ24odCk7YS5yb3RhdGVSaWdodCg4KTtlLnhvcihhKTthLmFzc2lnbih0KTthLnNoaWZ0UmlnaHQoNyk7ZS54b3IoYSl9ZnVuY3Rpb24gbGl0dGxlU2lnbWFQcmltZShlLHQsYSl7ZS5hc3NpZ24odCk7ZS5yb3RhdGVSaWdodCgxOSk7YS5hc3NpZ24odCk7YS5yb3RhdGVSaWdodCg2MSk7ZS54b3IoYSk7YS5hc3NpZ24odCk7YS5zaGlmdFJpZ2h0KDYpO2UueG9yKGEpfWNvbnN0IGU9W25ldyBXb3JkNjQoMTExNjM1MjQwOCwzNjA5NzY3NDU4KSxuZXcgV29yZDY0KDE4OTk0NDc0NDEsNjAyODkxNzI1KSxuZXcgV29yZDY0KDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSksbmV3IFdvcmQ2NCgzOTIxMDA5NTczLDIxNzMyOTU1NDgpLG5ldyBXb3JkNjQoOTYxOTg3MTYzLDQwODE2Mjg0NzIpLG5ldyBXb3JkNjQoMTUwODk3MDk5MywzMDUzODM0MjY1KSxuZXcgV29yZDY0KDI0NTM2MzU3NDgsMjkzNzY3MTU3OSksbmV3IFdvcmQ2NCgyODcwNzYzMjIxLDM2NjQ2MDk1NjApLG5ldyBXb3JkNjQoMzYyNDM4MTA4MCwyNzM0ODgzMzk0KSxuZXcgV29yZDY0KDMxMDU5ODQwMSwxMTY0OTk2NTQyKSxuZXcgV29yZDY0KDYwNzIyNTI3OCwxMzIzNjEwNzY0KSxuZXcgV29yZDY0KDE0MjY4ODE5ODcsMzU5MDMwNDk5NCksbmV3IFdvcmQ2NCgxOTI1MDc4Mzg4LDQwNjgxODIzODMpLG5ldyBXb3JkNjQoMjE2MjA3ODIwNiw5OTEzMzYxMTMpLG5ldyBXb3JkNjQoMjYxNDg4ODEwMyw2MzM4MDMzMTcpLG5ldyBXb3JkNjQoMzI0ODIyMjU4MCwzNDc5Nzc0ODY4KSxuZXcgV29yZDY0KDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCksbmV3IFdvcmQ2NCg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksbmV3IFdvcmQ2NCgyNjQzNDcwNzgsMjM0MTI2Mjc3MyksbmV3IFdvcmQ2NCg2MDQ4MDc2MjgsMjAwNzgwMDkzMyksbmV3IFdvcmQ2NCg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksbmV3IFdvcmQ2NCgxMjQ5MTUwMTIyLDE4NTY0MzEyMzUpLG5ldyBXb3JkNjQoMTU1NTA4MTY5MiwzMTc1MjE4MTMyKSxuZXcgV29yZDY0KDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksbmV3IFdvcmQ2NCgyNTU0MjIwODgyLDM5OTk3MTkzMzkpLG5ldyBXb3JkNjQoMjgyMTgzNDM0OSw3NjY3ODQwMTYpLG5ldyBXb3JkNjQoMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxuZXcgV29yZDY0KDMyMTAzMTM2NzEsMzIwMzMzNzk1NiksbmV3IFdvcmQ2NCgzMzM2NTcxODkxLDEwMzQ0NTcwMjYpLG5ldyBXb3JkNjQoMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxuZXcgV29yZDY0KDExMzkyNjk5MywzNzU4MzI2MzgzKSxuZXcgV29yZDY0KDMzODI0MTg5NSwxNjg3MTc5MzYpLG5ldyBXb3JkNjQoNjY2MzA3MjA1LDExODgxNzk5NjQpLG5ldyBXb3JkNjQoNzczNTI5OTEyLDE1NDYwNDU3MzQpLG5ldyBXb3JkNjQoMTI5NDc1NzM3MiwxNTIyODA1NDg1KSxuZXcgV29yZDY0KDEzOTYxODIyOTEsMjY0MzgzMzgyMyksbmV3IFdvcmQ2NCgxNjk1MTgzNzAwLDIzNDM1MjczOTApLG5ldyBXb3JkNjQoMTk4NjY2MTA1MSwxMDE0NDc3NDgwKSxuZXcgV29yZDY0KDIxNzcwMjYzNTAsMTIwNjc1OTE0MiksbmV3IFdvcmQ2NCgyNDU2OTU2MDM3LDM0NDA3NzYyNyksbmV3IFdvcmQ2NCgyNzMwNDg1OTIxLDEyOTA4NjM0NjApLG5ldyBXb3JkNjQoMjgyMDMwMjQxMSwzMTU4NDU0MjczKSxuZXcgV29yZDY0KDMyNTk3MzA4MDAsMzUwNTk1MjY1NyksbmV3IFdvcmQ2NCgzMzQ1NzY0NzcxLDEwNjIxNzAwOCksbmV3IFdvcmQ2NCgzNTE2MDY1ODE3LDM2MDYwMDgzNDQpLG5ldyBXb3JkNjQoMzYwMDM1MjgwNCwxNDMyNzI1Nzc2KSxuZXcgV29yZDY0KDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCksbmV3IFdvcmQ2NCgyNzU0MjMzNDQsODUxMTY5NzIwKSxuZXcgV29yZDY0KDQzMDIyNzczNCwzMTAwODIzNzUyKSxuZXcgV29yZDY0KDUwNjk0ODYxNiwxMzYzMjU4MTk1KSxuZXcgV29yZDY0KDY1OTA2MDU1NiwzNzUwNjg1NTkzKSxuZXcgV29yZDY0KDg4Mzk5Nzg3NywzNzg1MDUwMjgwKSxuZXcgV29yZDY0KDk1ODEzOTU3MSwzMzE4MzA3NDI3KSxuZXcgV29yZDY0KDEzMjI4MjIyMTgsMzgxMjcyMzQwMyksbmV3IFdvcmQ2NCgxNTM3MDAyMDYzLDIwMDMwMzQ5OTUpLG5ldyBXb3JkNjQoMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5KSxuZXcgV29yZDY0KDE5NTU1NjIyMjIsMTU3NTk5MDAxMiksbmV3IFdvcmQ2NCgyMDI0MTA0ODE1LDExMjU1OTI5MjgpLG5ldyBXb3JkNjQoMjIyNzczMDQ1MiwyNzE2OTA0MzA2KSxuZXcgV29yZDY0KDIzNjE4NTI0MjQsNDQyNzc2MDQ0KSxuZXcgV29yZDY0KDI0Mjg0MzY0NzQsNTkzNjk4MzQ0KSxuZXcgV29yZDY0KDI3NTY3MzQxODcsMzczMzExMDI0OSksbmV3IFdvcmQ2NCgzMjA0MDMxNDc5LDI5OTkzNTE1NzMpLG5ldyBXb3JkNjQoMzMyOTMyNTI5OCwzODE1OTIwNDI3KSxuZXcgV29yZDY0KDMzOTE1Njk2MTQsMzkyODM4MzkwMCksbmV3IFdvcmQ2NCgzNTE1MjY3MjcxLDU2NjI4MDcxMSksbmV3IFdvcmQ2NCgzOTQwMTg3NjA2LDM0NTQwNjk1MzQpLG5ldyBXb3JkNjQoNDExODYzMDI3MSw0MDAwMjM5OTkyKSxuZXcgV29yZDY0KDExNjQxODQ3NCwxOTE0MTM4NTU0KSxuZXcgV29yZDY0KDE3NDI5MjQyMSwyNzMxMDU1MjcwKSxuZXcgV29yZDY0KDI4OTM4MDM1NiwzMjAzOTkzMDA2KSxuZXcgV29yZDY0KDQ2MDM5MzI2OSwzMjA2MjAzMTUpLG5ldyBXb3JkNjQoNjg1NDcxNzMzLDU4NzQ5NjgzNiksbmV3IFdvcmQ2NCg4NTIxNDI5NzEsMTA4Njc5Mjg1MSksbmV3IFdvcmQ2NCgxMDE3MDM2Mjk4LDM2NTU0MzEwMCksbmV3IFdvcmQ2NCgxMTI2MDAwNTgwLDI2MTgyOTc2NzYpLG5ldyBXb3JkNjQoMTI4ODAzMzQ3MCwzNDA5ODU1MTU4KSxuZXcgV29yZDY0KDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksbmV3IFdvcmQ2NCgxNjA3MTY3OTE1LDk4NzE2NzQ2OCksbmV3IFdvcmQ2NCgxODE2NDAyMzE2LDEyNDYxODk1OTEpXTtyZXR1cm4gZnVuY3Rpb24gaGFzaCh0LGEscixuPSExKXtsZXQgaSxzLG8sYyxsLGgsdSxkO2lmKG4pe2k9bmV3IFdvcmQ2NCgzNDE4MDcwMzY1LDMyMzgzNzEwMzIpO3M9bmV3IFdvcmQ2NCgxNjU0MjcwMjUwLDkxNDE1MDY2Myk7bz1uZXcgV29yZDY0KDI0Mzg1MjkzNzAsODEyNzAyOTk5KTtjPW5ldyBXb3JkNjQoMzU1NDYyMzYwLDQxNDQ5MTI2OTcpO2w9bmV3IFdvcmQ2NCgxNzMxNDA1NDE1LDQyOTA3NzU4NTcpO2g9bmV3IFdvcmQ2NCgyMzk0MTgwMjMxLDE3NTA2MDMwMjUpO3U9bmV3IFdvcmQ2NCgzNjc1MDA4NTI1LDE2OTQwNzY4MzkpO2Q9bmV3IFdvcmQ2NCgxMjAzMDYyODEzLDMyMDQwNzU0MjgpfWVsc2V7aT1uZXcgV29yZDY0KDE3NzkwMzM3MDMsNDA4OTIzNTcyMCk7cz1uZXcgV29yZDY0KDMxNDQxMzQyNzcsMjIyNzg3MzU5NSk7bz1uZXcgV29yZDY0KDEwMTM5MDQyNDIsNDI3MTE3NTcyMyk7Yz1uZXcgV29yZDY0KDI3NzM0ODA3NjIsMTU5NTc1MDEyOSk7bD1uZXcgV29yZDY0KDEzNTk4OTMxMTksMjkxNzU2NTEzNyk7aD1uZXcgV29yZDY0KDI2MDA4MjI5MjQsNzI1NTExMTk5KTt1PW5ldyBXb3JkNjQoNTI4NzM0NjM1LDQyMTUzODk1NDcpO2Q9bmV3IFdvcmQ2NCgxNTQxNDU5MjI1LDMyNzAzMzIwOSl9Y29uc3QgZj0xMjgqTWF0aC5jZWlsKChyKzE3KS8xMjgpLGc9bmV3IFVpbnQ4QXJyYXkoZik7bGV0IHAsbTtmb3IocD0wO3A8cjsrK3ApZ1twXT10W2ErK107Z1twKytdPTEyODtjb25zdCBiPWYtMTY7Zm9yKDtwPGI7KWdbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT1yPj4+MjkmMjU1O2dbcCsrXT1yPj4yMSYyNTU7Z1twKytdPXI+PjEzJjI1NTtnW3ArK109cj4+NSYyNTU7Z1twKytdPXI8PDMmMjU1O2NvbnN0IHk9bmV3IEFycmF5KDgwKTtmb3IocD0wO3A8ODA7cCsrKXlbcF09bmV3IFdvcmQ2NCgwLDApO2xldCB3PW5ldyBXb3JkNjQoMCwwKSxTPW5ldyBXb3JkNjQoMCwwKSx4PW5ldyBXb3JkNjQoMCwwKSxDPW5ldyBXb3JkNjQoMCwwKSxrPW5ldyBXb3JkNjQoMCwwKSx2PW5ldyBXb3JkNjQoMCwwKSxGPW5ldyBXb3JkNjQoMCwwKSxPPW5ldyBXb3JkNjQoMCwwKTtjb25zdCBUPW5ldyBXb3JkNjQoMCwwKSxNPW5ldyBXb3JkNjQoMCwwKSxEPW5ldyBXb3JkNjQoMCwwKSxFPW5ldyBXb3JkNjQoMCwwKTtsZXQgTixSO2ZvcihwPTA7cDxmOyl7Zm9yKG09MDttPDE2OysrbSl7eVttXS5oaWdoPWdbcF08PDI0fGdbcCsxXTw8MTZ8Z1twKzJdPDw4fGdbcCszXTt5W21dLmxvdz1nW3ArNF08PDI0fGdbcCs1XTw8MTZ8Z1twKzZdPDw4fGdbcCs3XTtwKz04fWZvcihtPTE2O208ODA7KyttKXtOPXlbbV07bGl0dGxlU2lnbWFQcmltZShOLHlbbS0yXSxFKTtOLmFkZCh5W20tN10pO2xpdHRsZVNpZ21hKEQseVttLTE1XSxFKTtOLmFkZChEKTtOLmFkZCh5W20tMTZdKX13LmFzc2lnbihpKTtTLmFzc2lnbihzKTt4LmFzc2lnbihvKTtDLmFzc2lnbihjKTtrLmFzc2lnbihsKTt2LmFzc2lnbihoKTtGLmFzc2lnbih1KTtPLmFzc2lnbihkKTtmb3IobT0wO208ODA7KyttKXtULmFzc2lnbihPKTtzaWdtYVByaW1lKEQsayxFKTtULmFkZChEKTtjaChELGssdixGLEUpO1QuYWRkKEQpO1QuYWRkKGVbbV0pO1QuYWRkKHlbbV0pO3NpZ21hKE0sdyxFKTttYWooRCx3LFMseCxFKTtNLmFkZChEKTtOPU87Tz1GO0Y9djt2PWs7Qy5hZGQoVCk7az1DO0M9eDt4PVM7Uz13O04uYXNzaWduKFQpO04uYWRkKE0pO3c9Tn1pLmFkZCh3KTtzLmFkZChTKTtvLmFkZCh4KTtjLmFkZChDKTtsLmFkZChrKTtoLmFkZCh2KTt1LmFkZChGKTtkLmFkZChPKX1pZihuKXtSPW5ldyBVaW50OEFycmF5KDQ4KTtpLmNvcHlUbyhSLDApO3MuY29weVRvKFIsOCk7by5jb3B5VG8oUiwxNik7Yy5jb3B5VG8oUiwyNCk7bC5jb3B5VG8oUiwzMik7aC5jb3B5VG8oUiw0MCl9ZWxzZXtSPW5ldyBVaW50OEFycmF5KDY0KTtpLmNvcHlUbyhSLDApO3MuY29weVRvKFIsOCk7by5jb3B5VG8oUiwxNik7Yy5jb3B5VG8oUiwyNCk7bC5jb3B5VG8oUiwzMik7aC5jb3B5VG8oUiw0MCk7dS5jb3B5VG8oUiw0OCk7ZC5jb3B5VG8oUiw1Nil9cmV0dXJuIFJ9fSgpO3QuY2FsY3VsYXRlU0hBNTEyPWM7ZnVuY3Rpb24gY2FsY3VsYXRlU0hBMzg0KGUsdCxhKXtyZXR1cm4gYyhlLHQsYSwhMCl9Y2xhc3MgTnVsbENpcGhlcntkZWNyeXB0QmxvY2soZSl7cmV0dXJuIGV9ZW5jcnlwdChlKXtyZXR1cm4gZX19Y2xhc3MgQUVTQmFzZUNpcGhlcntjb25zdHJ1Y3Rvcigpe3RoaXMuY29uc3RydWN0b3I9PT1BRVNCYXNlQ2lwaGVyJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQUVTQmFzZUNpcGhlci4iKTt0aGlzLl9zPW5ldyBVaW50OEFycmF5KFs5OSwxMjQsMTE5LDEyMywyNDIsMTA3LDExMSwxOTcsNDgsMSwxMDMsNDMsMjU0LDIxNSwxNzEsMTE4LDIwMiwxMzAsMjAxLDEyNSwyNTAsODksNzEsMjQwLDE3MywyMTIsMTYyLDE3NSwxNTYsMTY0LDExNCwxOTIsMTgzLDI1MywxNDcsMzgsNTQsNjMsMjQ3LDIwNCw1MiwxNjUsMjI5LDI0MSwxMTMsMjE2LDQ5LDIxLDQsMTk5LDM1LDE5NSwyNCwxNTAsNSwxNTQsNywxOCwxMjgsMjI2LDIzNSwzOSwxNzgsMTE3LDksMTMxLDQ0LDI2LDI3LDExMCw5MCwxNjAsODIsNTksMjE0LDE3OSw0MSwyMjcsNDcsMTMyLDgzLDIwOSwwLDIzNywzMiwyNTIsMTc3LDkxLDEwNiwyMDMsMTkwLDU3LDc0LDc2LDg4LDIwNywyMDgsMjM5LDE3MCwyNTEsNjcsNzcsNTEsMTMzLDY5LDI0OSwyLDEyNyw4MCw2MCwxNTksMTY4LDgxLDE2Myw2NCwxNDMsMTQ2LDE1Nyw1NiwyNDUsMTg4LDE4MiwyMTgsMzMsMTYsMjU1LDI0MywyMTAsMjA1LDEyLDE5LDIzNiw5NSwxNTEsNjgsMjMsMTk2LDE2NywxMjYsNjEsMTAwLDkzLDI1LDExNSw5NiwxMjksNzksMjIwLDM0LDQyLDE0NCwxMzYsNzAsMjM4LDE4NCwyMCwyMjIsOTQsMTEsMjE5LDIyNCw1MCw1OCwxMCw3Myw2LDM2LDkyLDE5NCwyMTEsMTcyLDk4LDE0NSwxNDksMjI4LDEyMSwyMzEsMjAwLDU1LDEwOSwxNDEsMjEzLDc4LDE2OSwxMDgsODYsMjQ0LDIzNCwxMDEsMTIyLDE3NCw4LDE4NiwxMjAsMzcsNDYsMjgsMTY2LDE4MCwxOTgsMjMyLDIyMSwxMTYsMzEsNzUsMTg5LDEzOSwxMzgsMTEyLDYyLDE4MSwxMDIsNzIsMywyNDYsMTQsOTcsNTMsODcsMTg1LDEzNCwxOTMsMjksMTU4LDIyNSwyNDgsMTUyLDE3LDEwNSwyMTcsMTQyLDE0OCwxNTUsMzAsMTM1LDIzMywyMDYsODUsNDAsMjIzLDE0MCwxNjEsMTM3LDEzLDE5MSwyMzAsNjYsMTA0LDY1LDE1Myw0NSwxNSwxNzYsODQsMTg3LDIyXSk7dGhpcy5faW52X3M9bmV3IFVpbnQ4QXJyYXkoWzgyLDksMTA2LDIxMyw0OCw1NCwxNjUsNTYsMTkxLDY0LDE2MywxNTgsMTI5LDI0MywyMTUsMjUxLDEyNCwyMjcsNTcsMTMwLDE1NSw0NywyNTUsMTM1LDUyLDE0Miw2Nyw2OCwxOTYsMjIyLDIzMywyMDMsODQsMTIzLDE0OCw1MCwxNjYsMTk0LDM1LDYxLDIzOCw3NiwxNDksMTEsNjYsMjUwLDE5NSw3OCw4LDQ2LDE2MSwxMDIsNDAsMjE3LDM2LDE3OCwxMTgsOTEsMTYyLDczLDEwOSwxMzksMjA5LDM3LDExNCwyNDgsMjQ2LDEwMCwxMzQsMTA0LDE1MiwyMiwyMTIsMTY0LDkyLDIwNCw5MywxMDEsMTgyLDE0NiwxMDgsMTEyLDcyLDgwLDI1MywyMzcsMTg1LDIxOCw5NCwyMSw3MCw4NywxNjcsMTQxLDE1NywxMzIsMTQ0LDIxNiwxNzEsMCwxNDAsMTg4LDIxMSwxMCwyNDcsMjI4LDg4LDUsMTg0LDE3OSw2OSw2LDIwOCw0NCwzMCwxNDMsMjAyLDYzLDE1LDIsMTkzLDE3NSwxODksMywxLDE5LDEzOCwxMDcsNTgsMTQ1LDE3LDY1LDc5LDEwMywyMjAsMjM0LDE1MSwyNDIsMjA3LDIwNiwyNDAsMTgwLDIzMCwxMTUsMTUwLDE3MiwxMTYsMzQsMjMxLDE3Myw1MywxMzMsMjI2LDI0OSw1NSwyMzIsMjgsMTE3LDIyMywxMTAsNzEsMjQxLDI2LDExMywyOSw0MSwxOTcsMTM3LDExMSwxODMsOTgsMTQsMTcwLDI0LDE5MCwyNywyNTIsODYsNjIsNzUsMTk4LDIxMCwxMjEsMzIsMTU0LDIxOSwxOTIsMjU0LDEyMCwyMDUsOTAsMjQ0LDMxLDIyMSwxNjgsNTEsMTM2LDcsMTk5LDQ5LDE3NywxOCwxNiw4OSwzOSwxMjgsMjM2LDk1LDk2LDgxLDEyNywxNjksMjUsMTgxLDc0LDEzLDQ1LDIyOSwxMjIsMTU5LDE0NywyMDEsMTU2LDIzOSwxNjAsMjI0LDU5LDc3LDE3NCw0MiwyNDUsMTc2LDIwMCwyMzUsMTg3LDYwLDEzMSw4MywxNTMsOTcsMjMsNDMsNCwxMjYsMTg2LDExOSwyMTQsMzgsMjI1LDEwNSwyMCw5OSw4NSwzMywxMiwxMjVdKTt0aGlzLl9taXg9bmV3IFVpbnQzMkFycmF5KFswLDIzNTQ3NDE4Nyw0NzA5NDgzNzQsMzAzNzY1Mjc3LDk0MTg5Njc0OCw5MDg5MzM0MTUsNjA3NTMwNTU0LDcwODc4MDg0OSwxODgzNzkzNDk2LDIxMTgyMTQ5OTUsMTgxNzg2NjgzMCwxNjQ5NjM5MjM3LDEyMTUwNjExMDgsMTE4MTA0NTExOSwxNDE3NTYxNjk4LDE1MTc3Njc1MjksMzc2NzU4Njk5Miw0MDAzMDYxMTc5LDQyMzY0Mjk5OTAsNDA2OTI0Njg5MywzNjM1NzMzNjYwLDM2MDI3NzAzMjcsMzI5OTI3ODQ3NCwzNDAwNTI4NzY5LDI0MzAxMjIyMTYsMjY2NDU0MzcxNSwyMzYyMDkwMjM4LDIxOTM4NjI2NDUsMjgzNTEyMzM5NiwyODAxMTA3NDA3LDMwMzU1MzUwNTgsMzEzNTc0MDg4OSwzNjc4MTI0OTIzLDM1NzY4NzA1MTIsMzM0MTM5NDI4NSwzMzc0MzYxNzAyLDM4MTA0OTYzNDMsMzk3NzY3NTM1Niw0Mjc5MDgwMjU3LDQwNDM2MTAxODYsMjg3NjQ5NDYyNywyNzc2MjkyOTA0LDMwNzY2MzkwMjksMzExMDY1MDk0MiwyNDcyMDExNTM1LDI2NDAyNDMyMDQsMjQwMzcyODY2NSwyMTY5MzAzMDU4LDEwMDEwODk5OTUsODk5ODM1NTg0LDY2NjQ2NDczMyw2OTk0MzIxNTAsNTk3Mjc4NDcsMjI2OTA2ODYwLDUzMDQwMDc1MywyOTQ5MzA2ODIsMTI3MzE2ODc4NywxMTcyOTY3MDY0LDE0NzU0MTg1MDEsMTUwOTQzMDQxNCwxOTQyNDM1Nzc1LDIxMTA2Njc0NDQsMTg3NjI0MTgzMywxNjQxODE2MjI2LDI5MTAyMTk3NjYsMjc0MzAzNDEwOSwyOTc2MTUxNTIwLDMyMTE2MjMxNDcsMjUwNTIwMjEzOCwyNjA2NDUzOTY5LDIzMDI2OTAyNTIsMjI2OTcyODQ1NSwzNzExODI5NDIyLDM1NDM1OTkyNjksMzI0MDg5NDM5MiwzNDc1MzEzMzMxLDM4NDM2OTkwNzQsMzk0MzkwNjQ0MSw0MTc4MDYyMjI4LDQxNDQwNDc3NzUsMTMwNjk2NzM2NiwxMTM5NzgxNzA5LDEzNzQ5ODgxMTIsMTYxMDQ1OTczOSwxOTc1NjgzNDM0LDIwNzY5MzUyNjUsMTc3NTI3NjkyNCwxNzQyMzE1MTI3LDEwMzQ4Njc5OTgsODY2NjM3ODQ1LDU2NjAyMTg5Niw4MDA0NDA4MzUsOTI5ODc2OTgsMTkzMTk1MDY1LDQyOTQ1NjE2NCwzOTU0NDE3MTEsMTk4NDgxMjY4NSwyMDE3Nzc4NTY2LDE3ODQ2NjMxOTUsMTY4MzQwNzI0OCwxMzE1NTYyMTQ1LDEwODAwOTQ2MzQsMTM4Mzg1NjMxMSwxNTUxMDM3ODg0LDEwMTAzOTgyOSwxMzUwNTAyMDYsNDM3NzU3MTIzLDMzNzU1Mzg2NCwxMDQyMzg1NjU3LDgwNzk2MjYxMCw1NzM4MDQ3ODMsNzQyMDM5MDEyLDI1MzEwNjc0NTMsMjU2NDAzMzMzNCwyMzI4ODI4OTcxLDIyMjc1NzMwMjQsMjkzNTU2Njg2NSwyNzAwMDk5MzU0LDMwMDE3NTU2NTUsMzE2ODkzNzIyOCwzODY4NTUyODA1LDM5MDI1NjMxODIsNDIwMzE4MTE3MSw0MTAyOTc3OTEyLDM3MzYxNjQ5MzcsMzUwMTc0MTg5MCwzMjY1NDc4NzUxLDM0MzM3MTI5ODAsMTEwNjA0MTU5MSwxMzQwNDYzMTAwLDE1NzY5NzY2MDksMTQwODc0OTAzNCwyMDQzMjExNDgzLDIwMDkxOTU0NzIsMTcwODg0ODMzMywxODA5MDU0MTUwLDgzMjg3NzIzMSwxMDY4MzUxMzk2LDc2Njk0NTQ2NSw1OTk3NjIzNTQsMTU5NDE3OTg3LDEyNjQ1NDY2NCwzNjE5Mjk4NzcsNDYzMTgwMTkwLDI3MDkyNjA4NzEsMjk0MzY4MjM4MCwzMTc4MTA2OTYxLDMwMDk4NzkzODYsMjU3MjY5NzE5NSwyNTM4NjgxMTg0LDIyMzYyMjg3MzMsMjMzNjQzNDU1MCwzNTA5ODcxMTM1LDM3NDUzNDUzMDAsMzQ0MTg1MDM3NywzMjc0NjY3MjY2LDM5MTAxNjE5NzEsMzg3NzE5ODY0OCw0MTEwNTY4NDg1LDQyMTE4MTg3OTgsMjU5NzgwNjQ3NiwyNDk3NjA0NzQzLDIyNjEwODkxNzgsMjI5NTEwMTA3MywyNzMzODU2MTYwLDI5MDIwODc4NTEsMzIwMjQzNzA0NiwyOTY4MDExNDUzLDM5MzYyOTEyODQsMzgzNTAzNjg5NSw0MTM2NDQwNzcwLDQxNjk0MDgyMDEsMzUzNTQ4NjQ1NiwzNzAyNjY1NDU5LDM0NjcxOTIzMDIsMzIzMTcyMjIxMywyMDUxNTE4NzgwLDE5NTEzMTcwNDcsMTcxNjg5MDQxMCwxNzUwOTAyMzA1LDExMTM4MTgzODQsMTI4MjA1MDA3NSwxNTg0NTA0NTgyLDEzNTAwNzg5ODksMTY4ODEwODUyLDY3NTU2NDYzLDM3MTA0OTMzMCw0MDQwMTY3NjEsODQxNzM5NTkyLDEwMDg5MTg1OTUsNzc1NTUwODE0LDU0MDA4MDcyNSwzOTY5NTYyMzY5LDM4MDEzMzIyMzQsNDAzNTQ4OTA0Nyw0MjY5OTA3OTk2LDM1NjkyNTUyMTMsMzY2OTQ2MjU2NiwzMzY2NzU0NjE5LDMzMzI3NDAxNDQsMjYzMTA2NTQzMywyNDYzODc5NzYyLDIxNjAxMTcwNzEsMjM5NTU4ODY3NiwyNzY3NjQ1NTU3LDI4Njg4OTc0MDYsMzEwMjAxMTc0NywzMDY5MDQ5OTYwLDIwMjAwODQ5NywzMzc3ODM2MiwyNzAwNDA0ODcsNTA0NDU5NDM2LDg3NTQ1MTI5Myw5NzU2NTg2NDYsNjc1MDM5NjI3LDY0MTAyNTE1MiwyMDg0NzA0MjMzLDE5MTc1MTg1NjIsMTYxNTg2MTI0NywxODUxMzMyODUyLDExNDc1NTA2NjEsMTI0ODgwMjUxMCwxNDg0MDA1ODQzLDE0NTEwNDQwNTYsOTMzMzAxMzcwLDk2NzMxMTcyOSw3MzMxNTY5NzIsNjMyOTUzNzAzLDI2MDM4ODk1MCwyNTk2NTkxNywzMjg2NzE4MDgsNDk2OTA2MDU5LDEyMDY0Nzc4NTgsMTIzOTQ0Mzc1MywxNTQzMjA4NTAwLDE0NDE5NTI1NzUsMjE0NDE2MTgwNiwxOTA4Njk0Mjc3LDE2NzU1Nzc4ODAsMTg0Mjc1OTQ0MywzNjEwMzY5MjI2LDM2NDQzNzk1ODUsMzQwODExOTUxNiwzMzA3OTE2MjQ3LDQwMTExOTA1MDIsMzc3Njc2NzQ2OSw0MDc3Mzg0NDMyLDQyNDU2MTg2ODMsMjgwOTc3MTE1NCwyODQyNzM3MDQ5LDMxNDQzOTY0MjAsMzA0MzE0MDQ5NSwyNjczNzA1MTUwLDI0MzgyMzc2MjEsMjIwMzAzMjIzMiwyMzcwMjEzNzk1XSk7dGhpcy5fbWl4Q29sPW5ldyBVaW50OEFycmF5KDI1Nik7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKXRoaXMuX21peENvbFtlXT1lPDEyOD9lPDwxOmU8PDFeMjc7dGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTYpO3RoaXMuYnVmZmVyUG9zaXRpb249MH1fZXhwYW5kS2V5KGUpeygwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgY2FsbCBgX2V4cGFuZEtleWAgb24gdGhlIGJhc2UgY2xhc3MiKX1fZGVjcnlwdChlLHQpe2xldCBhLHIsbjtjb25zdCBpPW5ldyBVaW50OEFycmF5KDE2KTtpLnNldChlKTtmb3IobGV0IGU9MCxhPXRoaXMuX2tleVNpemU7ZTwxNjsrK2UsKythKWlbZV1ePXRbYV07Zm9yKGxldCBlPXRoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbi0xO2U+PTE7LS1lKXthPWlbMTNdO2lbMTNdPWlbOV07aVs5XT1pWzVdO2lbNV09aVsxXTtpWzFdPWE7YT1pWzE0XTtyPWlbMTBdO2lbMTRdPWlbNl07aVsxMF09aVsyXTtpWzZdPWE7aVsyXT1yO2E9aVsxNV07cj1pWzExXTtuPWlbN107aVsxNV09aVszXTtpWzExXT1hO2lbN109cjtpWzNdPW47Zm9yKGxldCBlPTA7ZTwxNjsrK2UpaVtlXT10aGlzLl9pbnZfc1tpW2VdXTtmb3IobGV0IGE9MCxyPTE2KmU7YTwxNjsrK2EsKytyKWlbYV1ePXRbcl07Zm9yKGxldCBlPTA7ZTwxNjtlKz00KXtjb25zdCB0PXRoaXMuX21peFtpW2VdXSxyPXRoaXMuX21peFtpW2UrMV1dLG49dGhpcy5fbWl4W2lbZSsyXV0scz10aGlzLl9taXhbaVtlKzNdXTthPXRecj4+Pjhecjw8MjRebj4+PjE2Xm48PDE2XnM+Pj4yNF5zPDw4O2lbZV09YT4+PjI0JjI1NTtpW2UrMV09YT4+MTYmMjU1O2lbZSsyXT1hPj44JjI1NTtpW2UrM109MjU1JmF9fWE9aVsxM107aVsxM109aVs5XTtpWzldPWlbNV07aVs1XT1pWzFdO2lbMV09YTthPWlbMTRdO3I9aVsxMF07aVsxNF09aVs2XTtpWzEwXT1pWzJdO2lbNl09YTtpWzJdPXI7YT1pWzE1XTtyPWlbMTFdO249aVs3XTtpWzE1XT1pWzNdO2lbMTFdPWE7aVs3XT1yO2lbM109bjtmb3IobGV0IGU9MDtlPDE2OysrZSl7aVtlXT10aGlzLl9pbnZfc1tpW2VdXTtpW2VdXj10W2VdfXJldHVybiBpfV9lbmNyeXB0KGUsdCl7Y29uc3QgYT10aGlzLl9zO2xldCByLG4saTtjb25zdCBzPW5ldyBVaW50OEFycmF5KDE2KTtzLnNldChlKTtmb3IobGV0IGU9MDtlPDE2OysrZSlzW2VdXj10W2VdO2ZvcihsZXQgZT0xO2U8dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uO2UrKyl7Zm9yKGxldCBlPTA7ZTwxNjsrK2Upc1tlXT1hW3NbZV1dO2k9c1sxXTtzWzFdPXNbNV07c1s1XT1zWzldO3NbOV09c1sxM107c1sxM109aTtpPXNbMl07bj1zWzZdO3NbMl09c1sxMF07c1s2XT1zWzE0XTtzWzEwXT1pO3NbMTRdPW47aT1zWzNdO249c1s3XTtyPXNbMTFdO3NbM109c1sxNV07c1s3XT1pO3NbMTFdPW47c1sxNV09cjtmb3IobGV0IGU9MDtlPDE2O2UrPTQpe2NvbnN0IHQ9c1tlKzBdLGE9c1tlKzFdLG49c1tlKzJdLGk9c1tlKzNdO3I9dF5hXm5eaTtzW2UrMF1ePXJedGhpcy5fbWl4Q29sW3ReYV07c1tlKzFdXj1yXnRoaXMuX21peENvbFthXm5dO3NbZSsyXV49cl50aGlzLl9taXhDb2xbbl5pXTtzW2UrM11ePXJedGhpcy5fbWl4Q29sW2ledF19Zm9yKGxldCBhPTAscj0xNiplO2E8MTY7KythLCsrcilzW2FdXj10W3JdfWZvcihsZXQgZT0wO2U8MTY7KytlKXNbZV09YVtzW2VdXTtpPXNbMV07c1sxXT1zWzVdO3NbNV09c1s5XTtzWzldPXNbMTNdO3NbMTNdPWk7aT1zWzJdO249c1s2XTtzWzJdPXNbMTBdO3NbNl09c1sxNF07c1sxMF09aTtzWzE0XT1uO2k9c1szXTtuPXNbN107cj1zWzExXTtzWzNdPXNbMTVdO3NbN109aTtzWzExXT1uO3NbMTVdPXI7Zm9yKGxldCBlPTAsYT10aGlzLl9rZXlTaXplO2U8MTY7KytlLCsrYSlzW2VdXj10W2FdO3JldHVybiBzfV9kZWNyeXB0QmxvY2syKGUsdCl7Y29uc3QgYT1lLmxlbmd0aDtsZXQgcj10aGlzLmJ1ZmZlcixuPXRoaXMuYnVmZmVyUG9zaXRpb247Y29uc3QgaT1bXTtsZXQgcz10aGlzLml2O2ZvcihsZXQgdD0wO3Q8YTsrK3Qpe3Jbbl09ZVt0XTsrK247aWYobjwxNiljb250aW51ZTtjb25zdCBhPXRoaXMuX2RlY3J5cHQocix0aGlzLl9rZXkpO2ZvcihsZXQgZT0wO2U8MTY7KytlKWFbZV1ePXNbZV07cz1yO2kucHVzaChhKTtyPW5ldyBVaW50OEFycmF5KDE2KTtuPTB9dGhpcy5idWZmZXI9cjt0aGlzLmJ1ZmZlckxlbmd0aD1uO3RoaXMuaXY9cztpZigwPT09aS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2xldCBvPTE2KmkubGVuZ3RoO2lmKHQpe2NvbnN0IGU9aS5hdCgtMSk7bGV0IHQ9ZVsxNV07aWYodDw9MTYpe2ZvcihsZXQgYT0xNSxyPTE2LXQ7YT49cjstLWEpaWYoZVthXSE9PXQpe3Q9MDticmVha31vLT10O2lbaS5sZW5ndGgtMV09ZS5zdWJhcnJheSgwLDE2LXQpfX1jb25zdCBjPW5ldyBVaW50OEFycmF5KG8pO2ZvcihsZXQgZT0wLHQ9MCxhPWkubGVuZ3RoO2U8YTsrK2UsdCs9MTYpYy5zZXQoaVtlXSx0KTtyZXR1cm4gY31kZWNyeXB0QmxvY2soZSx0LGE9bnVsbCl7Y29uc3Qgcj1lLmxlbmd0aCxuPXRoaXMuYnVmZmVyO2xldCBpPXRoaXMuYnVmZmVyUG9zaXRpb247aWYoYSl0aGlzLml2PWE7ZWxzZXtmb3IobGV0IHQ9MDtpPDE2JiZ0PHI7Kyt0LCsraSluW2ldPWVbdF07aWYoaTwxNil7dGhpcy5idWZmZXJMZW5ndGg9aTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCl9dGhpcy5pdj1uO2U9ZS5zdWJhcnJheSgxNil9dGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTYpO3RoaXMuYnVmZmVyTGVuZ3RoPTA7dGhpcy5kZWNyeXB0QmxvY2s9dGhpcy5fZGVjcnlwdEJsb2NrMjtyZXR1cm4gdGhpcy5kZWNyeXB0QmxvY2soZSx0KX1lbmNyeXB0KGUsdCl7Y29uc3QgYT1lLmxlbmd0aDtsZXQgcj10aGlzLmJ1ZmZlcixuPXRoaXMuYnVmZmVyUG9zaXRpb247Y29uc3QgaT1bXTt0fHwodD1uZXcgVWludDhBcnJheSgxNikpO2ZvcihsZXQgcz0wO3M8YTsrK3Mpe3Jbbl09ZVtzXTsrK247aWYobjwxNiljb250aW51ZTtmb3IobGV0IGU9MDtlPDE2OysrZSlyW2VdXj10W2VdO2NvbnN0IGE9dGhpcy5fZW5jcnlwdChyLHRoaXMuX2tleSk7dD1hO2kucHVzaChhKTtyPW5ldyBVaW50OEFycmF5KDE2KTtuPTB9dGhpcy5idWZmZXI9cjt0aGlzLmJ1ZmZlckxlbmd0aD1uO3RoaXMuaXY9dDtpZigwPT09aS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2NvbnN0IHM9MTYqaS5sZW5ndGgsbz1uZXcgVWludDhBcnJheShzKTtmb3IobGV0IGU9MCx0PTAsYT1pLmxlbmd0aDtlPGE7KytlLHQrPTE2KW8uc2V0KGlbZV0sdCk7cmV0dXJuIG99fWNsYXNzIEFFUzEyOENpcGhlciBleHRlbmRzIEFFU0Jhc2VDaXBoZXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKTt0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb249MTA7dGhpcy5fa2V5U2l6ZT0xNjA7dGhpcy5fcmNvbj1uZXcgVWludDhBcnJheShbMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MV0pO3RoaXMuX2tleT10aGlzLl9leHBhbmRLZXkoZSl9X2V4cGFuZEtleShlKXtjb25zdCB0PXRoaXMuX3MsYT10aGlzLl9yY29uLHI9bmV3IFVpbnQ4QXJyYXkoMTc2KTtyLnNldChlKTtmb3IobGV0IGU9MTYsbj0xO2U8MTc2Oysrbil7bGV0IGk9cltlLTNdLHM9cltlLTJdLG89cltlLTFdLGM9cltlLTRdO2k9dFtpXTtzPXRbc107bz10W29dO2M9dFtjXTtpXj1hW25dO2ZvcihsZXQgdD0wO3Q8NDsrK3Qpe3JbZV09aV49cltlLTE2XTtlKys7cltlXT1zXj1yW2UtMTZdO2UrKztyW2VdPW9ePXJbZS0xNl07ZSsrO3JbZV09Y149cltlLTE2XTtlKyt9fXJldHVybiByfX10LkFFUzEyOENpcGhlcj1BRVMxMjhDaXBoZXI7Y2xhc3MgQUVTMjU2Q2lwaGVyIGV4dGVuZHMgQUVTQmFzZUNpcGhlcntjb25zdHJ1Y3RvcihlKXtzdXBlcigpO3RoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbj0xNDt0aGlzLl9rZXlTaXplPTIyNDt0aGlzLl9rZXk9dGhpcy5fZXhwYW5kS2V5KGUpfV9leHBhbmRLZXkoZSl7Y29uc3QgdD10aGlzLl9zLGE9bmV3IFVpbnQ4QXJyYXkoMjQwKTthLnNldChlKTtsZXQgcixuLGkscyxvPTE7Zm9yKGxldCBlPTMyLGM9MTtlPDI0MDsrK2Mpe2lmKGUlMzI9PTE2KXtyPXRbcl07bj10W25dO2k9dFtpXTtzPXRbc119ZWxzZSBpZihlJTMyPT0wKXtyPWFbZS0zXTtuPWFbZS0yXTtpPWFbZS0xXTtzPWFbZS00XTtyPXRbcl07bj10W25dO2k9dFtpXTtzPXRbc107cl49bzsobzw8PTEpPj0yNTYmJihvPTI1NSYoMjdebykpfWZvcihsZXQgdD0wO3Q8NDsrK3Qpe2FbZV09cl49YVtlLTMyXTtlKys7YVtlXT1uXj1hW2UtMzJdO2UrKzthW2VdPWlePWFbZS0zMl07ZSsrO2FbZV09c149YVtlLTMyXTtlKyt9fXJldHVybiBhfX10LkFFUzI1NkNpcGhlcj1BRVMyNTZDaXBoZXI7Y2xhc3MgUERGMTd7Y2hlY2tPd25lclBhc3N3b3JkKGUsdCxhLG4pe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO2kuc2V0KGUsMCk7aS5zZXQodCxlLmxlbmd0aCk7aS5zZXQoYSxlLmxlbmd0aCt0Lmxlbmd0aCk7Y29uc3Qgcz1vKGksMCxpLmxlbmd0aCk7cmV0dXJuKDAsci5pc0FycmF5RXF1YWwpKHMsbil9Y2hlY2tVc2VyUGFzc3dvcmQoZSx0LGEpe2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrOCk7bi5zZXQoZSwwKTtuLnNldCh0LGUubGVuZ3RoKTtjb25zdCBpPW8obiwwLG4ubGVuZ3RoKTtyZXR1cm4oMCxyLmlzQXJyYXlFcXVhbCkoaSxhKX1nZXRPd25lcktleShlLHQsYSxyKXtjb25zdCBuPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTtuLnNldChlLDApO24uc2V0KHQsZS5sZW5ndGgpO24uc2V0KGEsZS5sZW5ndGgrdC5sZW5ndGgpO2NvbnN0IGk9byhuLDAsbi5sZW5ndGgpO3JldHVybiBuZXcgQUVTMjU2Q2lwaGVyKGkpLmRlY3J5cHRCbG9jayhyLCExLG5ldyBVaW50OEFycmF5KDE2KSl9Z2V0VXNlcktleShlLHQsYSl7Y29uc3Qgcj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtyLnNldChlLDApO3Iuc2V0KHQsZS5sZW5ndGgpO2NvbnN0IG49byhyLDAsci5sZW5ndGgpO3JldHVybiBuZXcgQUVTMjU2Q2lwaGVyKG4pLmRlY3J5cHRCbG9jayhhLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fXQuUERGMTc9UERGMTc7Y2xhc3MgUERGMjB7X2hhc2goZSx0LGEpe2xldCByPW8odCwwLHQubGVuZ3RoKS5zdWJhcnJheSgwLDMyKSxuPVswXSxpPTA7Zm9yKDtpPDY0fHxuLmF0KC0xKT5pLTMyOyl7Y29uc3QgdD1lLmxlbmd0aCtyLmxlbmd0aCthLmxlbmd0aCxzPW5ldyBVaW50OEFycmF5KHQpO2xldCBsPTA7cy5zZXQoZSxsKTtsKz1lLmxlbmd0aDtzLnNldChyLGwpO2wrPXIubGVuZ3RoO3Muc2V0KGEsbCk7Y29uc3QgaD1uZXcgVWludDhBcnJheSg2NCp0KTtmb3IobGV0IGU9MCxhPTA7ZTw2NDtlKyssYSs9dCloLnNldChzLGEpO249bmV3IEFFUzEyOENpcGhlcihyLnN1YmFycmF5KDAsMTYpKS5lbmNyeXB0KGgsci5zdWJhcnJheSgxNiwzMikpO2NvbnN0IHU9bi5zbGljZSgwLDE2KS5yZWR1Y2UoKChlLHQpPT5lK3QpLDApJTM7MD09PXU/cj1vKG4sMCxuLmxlbmd0aCk6MT09PXU/cj1jYWxjdWxhdGVTSEEzODQobiwwLG4ubGVuZ3RoKToyPT09dSYmKHI9YyhuLDAsbi5sZW5ndGgpKTtpKyt9cmV0dXJuIHIuc3ViYXJyYXkoMCwzMil9Y2hlY2tPd25lclBhc3N3b3JkKGUsdCxhLG4pe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO2kuc2V0KGUsMCk7aS5zZXQodCxlLmxlbmd0aCk7aS5zZXQoYSxlLmxlbmd0aCt0Lmxlbmd0aCk7Y29uc3Qgcz10aGlzLl9oYXNoKGUsaSxhKTtyZXR1cm4oMCxyLmlzQXJyYXlFcXVhbCkocyxuKX1jaGVja1VzZXJQYXNzd29yZChlLHQsYSl7Y29uc3Qgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtuLnNldChlLDApO24uc2V0KHQsZS5sZW5ndGgpO2NvbnN0IGk9dGhpcy5faGFzaChlLG4sW10pO3JldHVybigwLHIuaXNBcnJheUVxdWFsKShpLGEpfWdldE93bmVyS2V5KGUsdCxhLHIpe2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO24uc2V0KGUsMCk7bi5zZXQodCxlLmxlbmd0aCk7bi5zZXQoYSxlLmxlbmd0aCt0Lmxlbmd0aCk7Y29uc3QgaT10aGlzLl9oYXNoKGUsbixhKTtyZXR1cm4gbmV3IEFFUzI1NkNpcGhlcihpKS5kZWNyeXB0QmxvY2sociwhMSxuZXcgVWludDhBcnJheSgxNikpfWdldFVzZXJLZXkoZSx0LGEpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrOCk7ci5zZXQoZSwwKTtyLnNldCh0LGUubGVuZ3RoKTtjb25zdCBuPXRoaXMuX2hhc2goZSxyLFtdKTtyZXR1cm4gbmV3IEFFUzI1NkNpcGhlcihuKS5kZWNyeXB0QmxvY2soYSwhMSxuZXcgVWludDhBcnJheSgxNikpfX10LlBERjIwPVBERjIwO2NsYXNzIENpcGhlclRyYW5zZm9ybXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3I9ZTt0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yPXR9Y3JlYXRlU3RyZWFtKGUsdCl7Y29uc3QgYT1uZXcgdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IGkuRGVjcnlwdFN0cmVhbShlLHQsKGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybURlY3J5cHRTdHJlYW0oZSx0KXtyZXR1cm4gYS5kZWNyeXB0QmxvY2soZSx0KX0pKX1kZWNyeXB0U3RyaW5nKGUpe2NvbnN0IHQ9bmV3IHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3I7bGV0IGE9KDAsci5zdHJpbmdUb0J5dGVzKShlKTthPXQuZGVjcnlwdEJsb2NrKGEsITApO3JldHVybigwLHIuYnl0ZXNUb1N0cmluZykoYSl9ZW5jcnlwdFN0cmluZyhlKXtjb25zdCB0PW5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yO2lmKHQgaW5zdGFuY2VvZiBBRVNCYXNlQ2lwaGVyKXtjb25zdCBhPTE2LWUubGVuZ3RoJTE2O2UrPVN0cmluZy5mcm9tQ2hhckNvZGUoYSkucmVwZWF0KGEpO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoMTYpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgY3J5cHRvKWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobik7ZWxzZSBmb3IobGV0IGU9MDtlPDE2O2UrKyluW2VdPU1hdGguZmxvb3IoMjU2Kk1hdGgucmFuZG9tKCkpO2xldCBpPSgwLHIuc3RyaW5nVG9CeXRlcykoZSk7aT10LmVuY3J5cHQoaSxuKTtjb25zdCBzPW5ldyBVaW50OEFycmF5KDE2K2kubGVuZ3RoKTtzLnNldChuKTtzLnNldChpLDE2KTtyZXR1cm4oMCxyLmJ5dGVzVG9TdHJpbmcpKHMpfWxldCBhPSgwLHIuc3RyaW5nVG9CeXRlcykoZSk7YT10LmVuY3J5cHQoYSk7cmV0dXJuKDAsci5ieXRlc1RvU3RyaW5nKShhKX19Y2xhc3MgQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeXtzdGF0aWMjTz1uZXcgVWludDhBcnJheShbNDAsMTkxLDc4LDk0LDc4LDExNywxMzgsNjUsMTAwLDAsNzgsODYsMjU1LDI1MCwxLDgsNDYsNDYsMCwxODIsMjA4LDEwNCw2MiwxMjgsNDcsMTIsMTY5LDI1NCwxMDAsODMsMTA1LDEyMl0pOyNJKGUsdCxhLHIsbixpLHMsbyxjLGwsaCx1KXtpZih0KXtjb25zdCBlPU1hdGgubWluKDEyNyx0Lmxlbmd0aCk7dD10LnN1YmFycmF5KDAsZSl9ZWxzZSB0PVtdO2NvbnN0IGQ9Nj09PWU/bmV3IFBERjIwOm5ldyBQREYxNztyZXR1cm4gZC5jaGVja1VzZXJQYXNzd29yZCh0LG8scyk/ZC5nZXRVc2VyS2V5KHQsYyxoKTp0Lmxlbmd0aCYmZC5jaGVja093bmVyUGFzc3dvcmQodCxyLGksYSk/ZC5nZXRPd25lcktleSh0LG4saSxsKTpudWxsfSNUKGUsdCxhLHIsbixpLG8sYyl7Y29uc3QgbD00MCthLmxlbmd0aCtlLmxlbmd0aCxoPW5ldyBVaW50OEFycmF5KGwpO2xldCB1LGQsZj0wO2lmKHQpe2Q9TWF0aC5taW4oMzIsdC5sZW5ndGgpO2Zvcig7ZjxkOysrZiloW2ZdPXRbZl19dT0wO2Zvcig7ZjwzMjspaFtmKytdPUNpcGhlclRyYW5zZm9ybUZhY3RvcnkuI09bdSsrXTtmb3IodT0wLGQ9YS5sZW5ndGg7dTxkOysrdSloW2YrK109YVt1XTtoW2YrK109MjU1Jm47aFtmKytdPW4+PjgmMjU1O2hbZisrXT1uPj4xNiYyNTU7aFtmKytdPW4+Pj4yNCYyNTU7Zm9yKHU9MCxkPWUubGVuZ3RoO3U8ZDsrK3UpaFtmKytdPWVbdV07aWYoaT49NCYmIWMpe2hbZisrXT0yNTU7aFtmKytdPTI1NTtoW2YrK109MjU1O2hbZisrXT0yNTV9bGV0IGc9cyhoLDAsZik7Y29uc3QgcD1vPj4zO2lmKGk+PTMpZm9yKHU9MDt1PDUwOysrdSlnPXMoZywwLHApO2NvbnN0IG09Zy5zdWJhcnJheSgwLHApO2xldCBiLHk7aWYoaT49Myl7Zm9yKGY9MDtmPDMyOysrZiloW2ZdPUNpcGhlclRyYW5zZm9ybUZhY3RvcnkuI09bZl07Zm9yKHU9MCxkPWUubGVuZ3RoO3U8ZDsrK3UpaFtmKytdPWVbdV07Yj1uZXcgQVJDRm91ckNpcGhlcihtKTt5PWIuZW5jcnlwdEJsb2NrKHMoaCwwLGYpKTtkPW0ubGVuZ3RoO2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoZCk7Zm9yKHU9MTt1PD0xOTsrK3Upe2ZvcihsZXQgZT0wO2U8ZDsrK2UpdFtlXT1tW2VdXnU7Yj1uZXcgQVJDRm91ckNpcGhlcih0KTt5PWIuZW5jcnlwdEJsb2NrKHkpfWZvcih1PTAsZD15Lmxlbmd0aDt1PGQ7Kyt1KWlmKHJbdV0hPT15W3VdKXJldHVybiBudWxsfWVsc2V7Yj1uZXcgQVJDRm91ckNpcGhlcihtKTt5PWIuZW5jcnlwdEJsb2NrKENpcGhlclRyYW5zZm9ybUZhY3RvcnkuI08pO2Zvcih1PTAsZD15Lmxlbmd0aDt1PGQ7Kyt1KWlmKHJbdV0hPT15W3VdKXJldHVybiBudWxsfXJldHVybiBtfSNNKGUsdCxhLHIpe2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoMzIpO2xldCBpPTA7Y29uc3Qgbz1NYXRoLm1pbigzMixlLmxlbmd0aCk7Zm9yKDtpPG87KytpKW5baV09ZVtpXTtsZXQgYz0wO2Zvcig7aTwzMjspbltpKytdPUNpcGhlclRyYW5zZm9ybUZhY3RvcnkuI09bYysrXTtsZXQgbD1zKG4sMCxpKTtjb25zdCBoPXI+PjM7aWYoYT49Mylmb3IoYz0wO2M8NTA7KytjKWw9cyhsLDAsbC5sZW5ndGgpO2xldCB1LGQ7aWYoYT49Myl7ZD10O2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoaCk7Zm9yKGM9MTk7Yz49MDtjLS0pe2ZvcihsZXQgdD0wO3Q8aDsrK3QpZVt0XT1sW3RdXmM7dT1uZXcgQVJDRm91ckNpcGhlcihlKTtkPXUuZW5jcnlwdEJsb2NrKGQpfX1lbHNle3U9bmV3IEFSQ0ZvdXJDaXBoZXIobC5zdWJhcnJheSgwLGgpKTtkPXUuZW5jcnlwdEJsb2NrKHQpfXJldHVybiBkfSNQKGUsdCxhLHI9ITEpe2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoYS5sZW5ndGgrOSksaT1hLmxlbmd0aDtsZXQgbztmb3Iobz0wO288aTsrK28pbltvXT1hW29dO25bbysrXT0yNTUmZTtuW28rK109ZT4+OCYyNTU7bltvKytdPWU+PjE2JjI1NTtuW28rK109MjU1JnQ7bltvKytdPXQ+PjgmMjU1O2lmKHIpe25bbysrXT0xMTU7bltvKytdPTY1O25bbysrXT0xMDg7bltvKytdPTg0fXJldHVybiBzKG4sMCxvKS5zdWJhcnJheSgwLE1hdGgubWluKGEubGVuZ3RoKzUsMTYpKX0jRChlLHQsYSxpLHMpe2lmKCEodCBpbnN0YW5jZW9mIG4uTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgY3J5cHQgZmlsdGVyIG5hbWUuIik7Y29uc3Qgbz10aGlzLGM9ZS5nZXQodC5uYW1lKSxsPWM/LmdldCgiQ0ZNIik7aWYoIWx8fCJOb25lIj09PWwubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE51bGxDaXBoZXJ9O2lmKCJWMiI9PT1sLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBUkNGb3VyQ2lwaGVyKG8uI1AoYSxpLHMsITEpKX07aWYoIkFFU1YyIj09PWwubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFFUzEyOENpcGhlcihvLiNQKGEsaSxzLCEwKSl9O2lmKCJBRVNWMyI9PT1sLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIocyl9O3Rocm93IG5ldyByLkZvcm1hdEVycm9yKCJVbmtub3duIGNyeXB0byBtZXRob2QiKX1jb25zdHJ1Y3RvcihlLHQsYSl7Y29uc3QgaT1lLmdldCgiRmlsdGVyIik7aWYoISgwLG4uaXNOYW1lKShpLCJTdGFuZGFyZCIpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kIik7dGhpcy5maWx0ZXJOYW1lPWkubmFtZTt0aGlzLmRpY3Q9ZTtjb25zdCBzPWUuZ2V0KCJWIik7aWYoIU51bWJlci5pc0ludGVnZXIocyl8fDEhPT1zJiYyIT09cyYmNCE9PXMmJjUhPT1zKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ1bnN1cHBvcnRlZCBlbmNyeXB0aW9uIGFsZ29yaXRobSIpO3RoaXMuYWxnb3JpdGhtPXM7bGV0IG89ZS5nZXQoIkxlbmd0aCIpO2lmKCFvKWlmKHM8PTMpbz00MDtlbHNle2NvbnN0IHQ9ZS5nZXQoIkNGIiksYT1lLmdldCgiU3RtRiIpO2lmKHQgaW5zdGFuY2VvZiBuLkRpY3QmJmEgaW5zdGFuY2VvZiBuLk5hbWUpe3Quc3VwcHJlc3NFbmNyeXB0aW9uPSEwO2NvbnN0IGU9dC5nZXQoYS5uYW1lKTtvPWU/LmdldCgiTGVuZ3RoIil8fDEyODtvPDQwJiYobzw8PTMpfX1pZighTnVtYmVyLmlzSW50ZWdlcihvKXx8bzw0MHx8byU4IT0wKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGgiKTtjb25zdCBjPSgwLHIuc3RyaW5nVG9CeXRlcykoZS5nZXQoIk8iKSksbD0oMCxyLnN0cmluZ1RvQnl0ZXMpKGUuZ2V0KCJVIikpLGg9Yy5zdWJhcnJheSgwLDMyKSx1PWwuc3ViYXJyYXkoMCwzMiksZD1lLmdldCgiUCIpLGY9ZS5nZXQoIlIiKSxnPSg0PT09c3x8NT09PXMpJiYhMSE9PWUuZ2V0KCJFbmNyeXB0TWV0YWRhdGEiKTt0aGlzLmVuY3J5cHRNZXRhZGF0YT1nO2NvbnN0IHA9KDAsci5zdHJpbmdUb0J5dGVzKSh0KTtsZXQgbSxiO2lmKGEpe2lmKDY9PT1mKXRyeXthPSgwLHIudXRmOFN0cmluZ1RvU3RyaW5nKShhKX1jYXRjaHsoMCxyLndhcm4pKCJDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5OiBVbmFibGUgdG8gY29udmVydCBVVEY4IGVuY29kZWQgcGFzc3dvcmQuIil9bT0oMCxyLnN0cmluZ1RvQnl0ZXMpKGEpfWlmKDUhPT1zKWI9dGhpcy4jVChwLG0saCx1LGQsZixvLGcpO2Vsc2V7Y29uc3QgdD1jLnN1YmFycmF5KDMyLDQwKSxhPWMuc3ViYXJyYXkoNDAsNDgpLG49bC5zdWJhcnJheSgwLDQ4KSxpPWwuc3ViYXJyYXkoMzIsNDApLHM9bC5zdWJhcnJheSg0MCw0OCksbz0oMCxyLnN0cmluZ1RvQnl0ZXMpKGUuZ2V0KCJPRSIpKSxkPSgwLHIuc3RyaW5nVG9CeXRlcykoZS5nZXQoIlVFIikpLGc9KDAsci5zdHJpbmdUb0J5dGVzKShlLmdldCgiUGVybXMiKSk7Yj10aGlzLiNJKGYsbSxoLHQsYSxuLHUsaSxzLG8sZCxnKX1pZighYiYmIWEpdGhyb3cgbmV3IHIuUGFzc3dvcmRFeGNlcHRpb24oIk5vIHBhc3N3b3JkIGdpdmVuIixyLlBhc3N3b3JkUmVzcG9uc2VzLk5FRURfUEFTU1dPUkQpO2lmKCFiJiZhKXtjb25zdCBlPXRoaXMuI00obSxoLGYsbyk7Yj10aGlzLiNUKHAsZSxoLHUsZCxmLG8sZyl9aWYoIWIpdGhyb3cgbmV3IHIuUGFzc3dvcmRFeGNlcHRpb24oIkluY29ycmVjdCBQYXNzd29yZCIsci5QYXNzd29yZFJlc3BvbnNlcy5JTkNPUlJFQ1RfUEFTU1dPUkQpO3RoaXMuZW5jcnlwdGlvbktleT1iO2lmKHM+PTQpe2NvbnN0IHQ9ZS5nZXQoIkNGIik7dCBpbnN0YW5jZW9mIG4uRGljdCYmKHQuc3VwcHJlc3NFbmNyeXB0aW9uPSEwKTt0aGlzLmNmPXQ7dGhpcy5zdG1mPWUuZ2V0KCJTdG1GIil8fG4uTmFtZS5nZXQoIklkZW50aXR5Iik7dGhpcy5zdHJmPWUuZ2V0KCJTdHJGIil8fG4uTmFtZS5nZXQoIklkZW50aXR5Iik7dGhpcy5lZmY9ZS5nZXQoIkVGRiIpfHx0aGlzLnN0bWZ9fWNyZWF0ZUNpcGhlclRyYW5zZm9ybShlLHQpe2lmKDQ9PT10aGlzLmFsZ29yaXRobXx8NT09PXRoaXMuYWxnb3JpdGhtKXJldHVybiBuZXcgQ2lwaGVyVHJhbnNmb3JtKHRoaXMuI0QodGhpcy5jZix0aGlzLnN0cmYsZSx0LHRoaXMuZW5jcnlwdGlvbktleSksdGhpcy4jRCh0aGlzLmNmLHRoaXMuc3RtZixlLHQsdGhpcy5lbmNyeXB0aW9uS2V5KSk7Y29uc3QgYT10aGlzLiNQKGUsdCx0aGlzLmVuY3J5cHRpb25LZXksITEpLGNpcGhlckNvbnN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBUkNGb3VyQ2lwaGVyKGEpfTtyZXR1cm4gbmV3IENpcGhlclRyYW5zZm9ybShjaXBoZXJDb25zdHJ1Y3RvcixjaXBoZXJDb25zdHJ1Y3Rvcil9fXQuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeT1DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRGVjcnlwdFN0cmVhbT12b2lkIDA7dmFyIHI9YSgxOCk7Y2xhc3MgRGVjcnlwdFN0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5kZWNyeXB0PWE7dGhpcy5uZXh0Q2h1bms9bnVsbDt0aGlzLmluaXRpYWxpemVkPSExfXJlYWRCbG9jaygpe2xldCBlO2lmKHRoaXMuaW5pdGlhbGl6ZWQpZT10aGlzLm5leHRDaHVuaztlbHNle2U9dGhpcy5zdHIuZ2V0Qnl0ZXMoNTEyKTt0aGlzLmluaXRpYWxpemVkPSEwfWlmKCFlfHwwPT09ZS5sZW5ndGgpe3RoaXMuZW9mPSEwO3JldHVybn10aGlzLm5leHRDaHVuaz10aGlzLnN0ci5nZXRCeXRlcyg1MTIpO2NvbnN0IHQ9dGhpcy5uZXh0Q2h1bms/Lmxlbmd0aD4wO2U9KDAsdGhpcy5kZWNyeXB0KShlLCF0KTtjb25zdCBhPXRoaXMuYnVmZmVyTGVuZ3RoLHI9YStlLmxlbmd0aDt0aGlzLmVuc3VyZUJ1ZmZlcihyKS5zZXQoZSxhKTt0aGlzLmJ1ZmZlckxlbmd0aD1yfX10LkRlY3J5cHRTdHJlYW09RGVjcnlwdFN0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk9iamVjdExvYWRlcj12b2lkIDA7dmFyIHI9YSg0KSxuPWEoNSksaT1hKDMpLHM9YSgyKTtmdW5jdGlvbiBhZGRDaGlsZHJlbihlLHQpe2lmKGUgaW5zdGFuY2VvZiByLkRpY3QpZT1lLmdldFJhd1ZhbHVlcygpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbSllPWUuZGljdC5nZXRSYXdWYWx1ZXMoKTtlbHNlIGlmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybjtmb3IoY29uc3QgaSBvZiBlKSgoYT1pKWluc3RhbmNlb2Ygci5SZWZ8fGEgaW5zdGFuY2VvZiByLkRpY3R8fGEgaW5zdGFuY2VvZiBuLkJhc2VTdHJlYW18fEFycmF5LmlzQXJyYXkoYSkpJiZ0LnB1c2goaSk7dmFyIGF9dC5PYmplY3RMb2FkZXI9Y2xhc3MgT2JqZWN0TG9hZGVye2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmRpY3Q9ZTt0aGlzLmtleXM9dDt0aGlzLnhyZWY9YTt0aGlzLnJlZlNldD1udWxsfWFzeW5jIGxvYWQoKXtpZih0aGlzLnhyZWYuc3RyZWFtLmlzRGF0YUxvYWRlZClyZXR1cm47Y29uc3R7a2V5czplLGRpY3Q6dH09dGhpczt0aGlzLnJlZlNldD1uZXcgci5SZWZTZXQ7Y29uc3QgYT1bXTtmb3IoY29uc3QgciBvZiBlKXtjb25zdCBlPXQuZ2V0UmF3KHIpO3ZvaWQgMCE9PWUmJmEucHVzaChlKX1yZXR1cm4gdGhpcy5fd2FsayhhKX1hc3luYyBfd2FsayhlKXtjb25zdCB0PVtdLGE9W107Zm9yKDtlLmxlbmd0aDspe2xldCBvPWUucG9wKCk7aWYobyBpbnN0YW5jZW9mIHIuUmVmKXtpZih0aGlzLnJlZlNldC5oYXMobykpY29udGludWU7dHJ5e3RoaXMucmVmU2V0LnB1dChvKTtvPXRoaXMueHJlZi5mZXRjaChvKX1jYXRjaChlKXtpZighKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSl7KDAscy53YXJuKShgT2JqZWN0TG9hZGVyLl93YWxrIC0gcmVxdWVzdGluZyBhbGwgZGF0YTogIiR7ZX0iLmApO3RoaXMucmVmU2V0PW51bGw7Y29uc3R7bWFuYWdlcjp0fT10aGlzLnhyZWYuc3RyZWFtO3JldHVybiB0LnJlcXVlc3RBbGxDaHVua3MoKX10LnB1c2gobyk7YS5wdXNoKHtiZWdpbjplLmJlZ2luLGVuZDplLmVuZH0pfX1pZihvIGluc3RhbmNlb2Ygbi5CYXNlU3RyZWFtKXtjb25zdCBlPW8uZ2V0QmFzZVN0cmVhbXMoKTtpZihlKXtsZXQgcj0hMTtmb3IoY29uc3QgdCBvZiBlKWlmKCF0LmlzRGF0YUxvYWRlZCl7cj0hMDthLnB1c2goe2JlZ2luOnQuc3RhcnQsZW5kOnQuZW5kfSl9ciYmdC5wdXNoKG8pfX1hZGRDaGlsZHJlbihvLGUpfWlmKGEubGVuZ3RoKXthd2FpdCB0aGlzLnhyZWYuc3RyZWFtLm1hbmFnZXIucmVxdWVzdFJhbmdlcyhhKTtmb3IoY29uc3QgZSBvZiB0KWUgaW5zdGFuY2VvZiByLlJlZiYmdGhpcy5yZWZTZXQucmVtb3ZlKGUpO3JldHVybiB0aGlzLl93YWxrKHQpfXRoaXMucmVmU2V0PW51bGx9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhGQUZhY3Rvcnk9dm9pZCAwO3ZhciByPWEoNzgpLG49YSg3OSksaT1hKDg5KSxzPWEoODUpLG89YSg4NCksYz1hKDIpLGw9YSg5MCksaD1hKDEwMCk7Y2xhc3MgWEZBRmFjdG9yeXtjb25zdHJ1Y3RvcihlKXt0cnl7dGhpcy5yb290PShuZXcgbC5YRkFQYXJzZXIpLnBhcnNlKFhGQUZhY3RvcnkuX2NyZWF0ZURvY3VtZW50KGUpKTtjb25zdCB0PW5ldyBuLkJpbmRlcih0aGlzLnJvb3QpO3RoaXMuZm9ybT10LmJpbmQoKTt0aGlzLmRhdGFIYW5kbGVyPW5ldyBpLkRhdGFIYW5kbGVyKHRoaXMucm9vdCx0LmdldERhdGEoKSk7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLnRlbXBsYXRlPXRoaXMuZm9ybX1jYXRjaChlKXsoMCxjLndhcm4pKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBhbmQgYmluZGluZzogJHtlfWApfX1pc1ZhbGlkKCl7cmV0dXJuIHRoaXMucm9vdCYmdGhpcy5mb3JtfV9jcmVhdGVQYWdlc0hlbHBlcigpe2NvbnN0IGU9dGhpcy5mb3JtW3IuJHRvUGFnZXNdKCk7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxhKT0+e2NvbnN0IG5leHRJdGVyYXRpb249KCk9Pnt0cnl7Y29uc3QgYT1lLm5leHQoKTthLmRvbmU/dChhLnZhbHVlKTpzZXRUaW1lb3V0KG5leHRJdGVyYXRpb24sMCl9Y2F0Y2goZSl7YShlKX19O3NldFRpbWVvdXQobmV4dEl0ZXJhdGlvbiwwKX0pKX1hc3luYyBfY3JlYXRlUGFnZXMoKXt0cnl7dGhpcy5wYWdlcz1hd2FpdCB0aGlzLl9jcmVhdGVQYWdlc0hlbHBlcigpO3RoaXMuZGltcz10aGlzLnBhZ2VzLmNoaWxkcmVuLm1hcCgoZT0+e2NvbnN0e3dpZHRoOnQsaGVpZ2h0OmF9PWUuYXR0cmlidXRlcy5zdHlsZTtyZXR1cm5bMCwwLHBhcnNlSW50KHQpLHBhcnNlSW50KGEpXX0pKX1jYXRjaChlKXsoMCxjLndhcm4pKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbGF5b3V0OiAke2V9YCl9fWdldEJvdW5kaW5nQm94KGUpe3JldHVybiB0aGlzLmRpbXNbZV19YXN5bmMgZ2V0TnVtUGFnZXMoKXt0aGlzLnBhZ2VzfHxhd2FpdCB0aGlzLl9jcmVhdGVQYWdlcygpO3JldHVybiB0aGlzLmRpbXMubGVuZ3RofXNldEltYWdlcyhlKXt0aGlzLmZvcm1bci4kZ2xvYmFsRGF0YV0uaW1hZ2VzPWV9c2V0Rm9udHMoZSl7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXI9bmV3IHMuRm9udEZpbmRlcihlKTtjb25zdCB0PVtdO2ZvcihsZXQgZSBvZiB0aGlzLmZvcm1bci4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcyl7ZT0oMCxvLnN0cmlwUXVvdGVzKShlKTt0aGlzLmZvcm1bci4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5maW5kKGUpfHx0LnB1c2goZSl9cmV0dXJuIHQubGVuZ3RoPjA/dDpudWxsfWFwcGVuZEZvbnRzKGUsdCl7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIuYWRkKGUsdCl9YXN5bmMgZ2V0UGFnZXMoKXt0aGlzLnBhZ2VzfHxhd2FpdCB0aGlzLl9jcmVhdGVQYWdlcygpO2NvbnN0IGU9dGhpcy5wYWdlczt0aGlzLnBhZ2VzPW51bGw7cmV0dXJuIGV9c2VyaWFsaXplRGF0YShlKXtyZXR1cm4gdGhpcy5kYXRhSGFuZGxlci5zZXJpYWxpemUoZSl9c3RhdGljIF9jcmVhdGVEb2N1bWVudChlKXtyZXR1cm4gZVsiL3hkcDp4ZHAiXT9PYmplY3QudmFsdWVzKGUpLmpvaW4oIiIpOmVbInhkcDp4ZHAiXX1zdGF0aWMgZ2V0UmljaFRleHRBc0h0bWwoZSl7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7bGV0IHQ9bmV3IGwuWEZBUGFyc2VyKGguWGh0bWxOYW1lc3BhY2UsITApLnBhcnNlKGUpO2lmKCFbImJvZHkiLCJ4aHRtbCJdLmluY2x1ZGVzKHRbci4kbm9kZU5hbWVdKSl7Y29uc3QgZT1oLlhodG1sTmFtZXNwYWNlLmJvZHkoe30pO2Vbci4kYXBwZW5kQ2hpbGRdKHQpO3Q9ZX1jb25zdCBhPXRbci4kdG9IVE1MXSgpO2lmKCFhLnN1Y2Nlc3MpcmV0dXJuIG51bGw7Y29uc3R7aHRtbDpufT1hLHthdHRyaWJ1dGVzOml9PW47aWYoaSl7aS5jbGFzcyYmKGkuY2xhc3M9aS5jbGFzcy5maWx0ZXIoKGU9PiFlLnN0YXJ0c1dpdGgoInhmYSIpKSkpO2kuZGlyPSJhdXRvIn1yZXR1cm57aHRtbDpuLHN0cjp0W3IuJHRleHRdKCl9fWNhdGNoKGUpeygwLGMud2FybikoYFhGQSAtIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBwYXJzaW5nIG9mIHJpY2ggdGV4dDogJHtlfWApfXJldHVybiBudWxsfX10LlhGQUZhY3Rvcnk9WEZBRmFjdG9yeX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC4kdWlkPXQuJHRvU3R5bGU9dC4kdG9TdHJpbmc9dC4kdG9QYWdlcz10LiR0b0hUTUw9dC4kdGV4dD10LiR0YWJJbmRleD10LiRzZXRWYWx1ZT10LiRzZXRTZXRBdHRyaWJ1dGVzPXQuJHNldElkPXQuJHNlYXJjaE5vZGU9dC4kcm9vdD10LiRyZXNvbHZlUHJvdG90eXBlcz10LiRyZW1vdmVDaGlsZD10LiRwdXNoUGFyYT10LiRwdXNoR2x5cGhzPXQuJHBvcFBhcmE9dC4kb25UZXh0PXQuJG9uQ2hpbGRDaGVjaz10LiRvbkNoaWxkPXQuJG5zQXR0cmlidXRlcz10LiRub2RlTmFtZT10LiRuYW1lc3BhY2VJZD10LiRsYXN0QXR0cmlidXRlPXQuJGlzVXNhYmxlPXQuJGlzVHJhbnNwYXJlbnQ9dC4kaXNUaGVyZU1vcmVXaWR0aD10LiRpc1NwbGl0dGFibGU9dC4kaXNOc0Fnbm9zdGljPXQuJGlzRGVzY2VuZGVudD10LiRpc0RhdGFWYWx1ZT10LiRpc0NEQVRBWG1sPXQuJGlzQmluZGFibGU9dC4kaW5zZXJ0QXQ9dC4kaW5kZXhPZj10LiRpZHM9dC4kaGFzU2V0dGFibGVWYWx1ZT10LiRnbG9iYWxEYXRhPXQuJGdldFRlbXBsYXRlUm9vdD10LiRnZXRTdWJmb3JtUGFyZW50PXQuJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0PXQuJGdldFBhcmVudD10LiRnZXROZXh0UGFnZT10LiRnZXRFeHRyYT10LiRnZXREYXRhVmFsdWU9dC4kZ2V0Q29udGFpbmVkQ2hpbGRyZW49dC4kZ2V0Q2hpbGRyZW5CeU5hbWVJdD10LiRnZXRDaGlsZHJlbkJ5TmFtZT10LiRnZXRDaGlsZHJlbkJ5Q2xhc3M9dC4kZ2V0Q2hpbGRyZW49dC4kZ2V0QXZhaWxhYmxlU3BhY2U9dC4kZ2V0QXR0cmlidXRlcz10LiRnZXRBdHRyaWJ1dGVJdD10LiRmbHVzaEhUTUw9dC4kZmluYWxpemU9dC4kZXh0cmE9dC4kZHVtcD10LiRkYXRhPXQuJGNvbnRlbnQ9dC4kY29uc3VtZWQ9dC4kY2xvbmU9dC4kY2xlYW51cD10LiRjbGVhblBhZ2U9dC4kY2xlYW49dC4kY2hpbGRyZW5Ub0hUTUw9dC4kYXBwZW5kQ2hpbGQ9dC4kYWRkSFRNTD10LiRhY2NlcHRXaGl0ZXNwYWNlPXZvaWQgMDtjb25zdCBhPVN5bWJvbCgpO3QuJGFjY2VwdFdoaXRlc3BhY2U9YTtjb25zdCByPVN5bWJvbCgpO3QuJGFkZEhUTUw9cjtjb25zdCBuPVN5bWJvbCgpO3QuJGFwcGVuZENoaWxkPW47Y29uc3QgaT1TeW1ib2woKTt0LiRjaGlsZHJlblRvSFRNTD1pO2NvbnN0IHM9U3ltYm9sKCk7dC4kY2xlYW49cztjb25zdCBvPVN5bWJvbCgpO3QuJGNsZWFuUGFnZT1vO2NvbnN0IGM9U3ltYm9sKCk7dC4kY2xlYW51cD1jO2NvbnN0IGw9U3ltYm9sKCk7dC4kY2xvbmU9bDtjb25zdCBoPVN5bWJvbCgpO3QuJGNvbnN1bWVkPWg7Y29uc3QgdT1TeW1ib2woImNvbnRlbnQiKTt0LiRjb250ZW50PXU7Y29uc3QgZD1TeW1ib2woImRhdGEiKTt0LiRkYXRhPWQ7Y29uc3QgZj1TeW1ib2woKTt0LiRkdW1wPWY7Y29uc3QgZz1TeW1ib2woImV4dHJhIik7dC4kZXh0cmE9Zztjb25zdCBwPVN5bWJvbCgpO3QuJGZpbmFsaXplPXA7Y29uc3QgbT1TeW1ib2woKTt0LiRmbHVzaEhUTUw9bTtjb25zdCBiPVN5bWJvbCgpO3QuJGdldEF0dHJpYnV0ZUl0PWI7Y29uc3QgeT1TeW1ib2woKTt0LiRnZXRBdHRyaWJ1dGVzPXk7Y29uc3Qgdz1TeW1ib2woKTt0LiRnZXRBdmFpbGFibGVTcGFjZT13O2NvbnN0IFM9U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW5CeUNsYXNzPVM7Y29uc3QgeD1TeW1ib2woKTt0LiRnZXRDaGlsZHJlbkJ5TmFtZT14O2NvbnN0IEM9U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW5CeU5hbWVJdD1DO2NvbnN0IGs9U3ltYm9sKCk7dC4kZ2V0RGF0YVZhbHVlPWs7Y29uc3Qgdj1TeW1ib2woKTt0LiRnZXRFeHRyYT12O2NvbnN0IEY9U3ltYm9sKCk7dC4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXQ9Rjtjb25zdCBPPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuPU87Y29uc3QgVD1TeW1ib2woKTt0LiRnZXRDb250YWluZWRDaGlsZHJlbj1UO2NvbnN0IE09U3ltYm9sKCk7dC4kZ2V0TmV4dFBhZ2U9TTtjb25zdCBEPVN5bWJvbCgpO3QuJGdldFN1YmZvcm1QYXJlbnQ9RDtjb25zdCBFPVN5bWJvbCgpO3QuJGdldFBhcmVudD1FO2NvbnN0IE49U3ltYm9sKCk7dC4kZ2V0VGVtcGxhdGVSb290PU47Y29uc3QgUj1TeW1ib2woKTt0LiRnbG9iYWxEYXRhPVI7Y29uc3QgTD1TeW1ib2woKTt0LiRoYXNTZXR0YWJsZVZhbHVlPUw7Y29uc3QgJD1TeW1ib2woKTt0LiRpZHM9JDtjb25zdCBfPVN5bWJvbCgpO3QuJGluZGV4T2Y9Xztjb25zdCBqPVN5bWJvbCgpO3QuJGluc2VydEF0PWo7Y29uc3QgVT1TeW1ib2woKTt0LiRpc0NEQVRBWG1sPVU7Y29uc3QgWD1TeW1ib2woKTt0LiRpc0JpbmRhYmxlPVg7Y29uc3QgSD1TeW1ib2woKTt0LiRpc0RhdGFWYWx1ZT1IO2NvbnN0IHE9U3ltYm9sKCk7dC4kaXNEZXNjZW5kZW50PXE7Y29uc3Qgej1TeW1ib2woKTt0LiRpc05zQWdub3N0aWM9ejtjb25zdCBXPVN5bWJvbCgpO3QuJGlzU3BsaXR0YWJsZT1XO2NvbnN0IEc9U3ltYm9sKCk7dC4kaXNUaGVyZU1vcmVXaWR0aD1HO2NvbnN0IFY9U3ltYm9sKCk7dC4kaXNUcmFuc3BhcmVudD1WO2NvbnN0IEs9U3ltYm9sKCk7dC4kaXNVc2FibGU9Sztjb25zdCBKPVN5bWJvbCgpO3QuJGxhc3RBdHRyaWJ1dGU9Sjtjb25zdCBZPVN5bWJvbCgibmFtZXNwYWNlSWQiKTt0LiRuYW1lc3BhY2VJZD1ZO2NvbnN0IFo9U3ltYm9sKCJub2RlTmFtZSIpO3QuJG5vZGVOYW1lPVo7Y29uc3QgUT1TeW1ib2woKTt0LiRuc0F0dHJpYnV0ZXM9UTtjb25zdCBlZT1TeW1ib2woKTt0LiRvbkNoaWxkPWVlO2NvbnN0IHRlPVN5bWJvbCgpO3QuJG9uQ2hpbGRDaGVjaz10ZTtjb25zdCBhZT1TeW1ib2woKTt0LiRvblRleHQ9YWU7Y29uc3QgcmU9U3ltYm9sKCk7dC4kcHVzaEdseXBocz1yZTtjb25zdCBuZT1TeW1ib2woKTt0LiRwb3BQYXJhPW5lO2NvbnN0IGllPVN5bWJvbCgpO3QuJHB1c2hQYXJhPWllO2NvbnN0IHNlPVN5bWJvbCgpO3QuJHJlbW92ZUNoaWxkPXNlO2NvbnN0IG9lPVN5bWJvbCgicm9vdCIpO3QuJHJvb3Q9b2U7Y29uc3QgY2U9U3ltYm9sKCk7dC4kcmVzb2x2ZVByb3RvdHlwZXM9Y2U7Y29uc3QgbGU9U3ltYm9sKCk7dC4kc2VhcmNoTm9kZT1sZTtjb25zdCBoZT1TeW1ib2woKTt0LiRzZXRJZD1oZTtjb25zdCB1ZT1TeW1ib2woKTt0LiRzZXRTZXRBdHRyaWJ1dGVzPXVlO2NvbnN0IGRlPVN5bWJvbCgpO3QuJHNldFZhbHVlPWRlO2NvbnN0IGZlPVN5bWJvbCgpO3QuJHRhYkluZGV4PWZlO2NvbnN0IGdlPVN5bWJvbCgpO3QuJHRleHQ9Z2U7Y29uc3QgcGU9U3ltYm9sKCk7dC4kdG9QYWdlcz1wZTtjb25zdCBtZT1TeW1ib2woKTt0LiR0b0hUTUw9bWU7Y29uc3QgYmU9U3ltYm9sKCk7dC4kdG9TdHJpbmc9YmU7Y29uc3QgeWU9U3ltYm9sKCk7dC4kdG9TdHlsZT15ZTtjb25zdCB3ZT1TeW1ib2woInVpZCIpO3QuJHVpZD13ZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkJpbmRlcj12b2lkIDA7dmFyIHI9YSg3OCksbj1hKDgwKSxpPWEoODgpLHM9YSg4Nyksbz1hKDgxKSxjPWEoMik7Y29uc3QgbD1vLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDtmdW5jdGlvbiBjcmVhdGVUZXh0KGUpe2NvbnN0IHQ9bmV3IG4uVGV4dCh7fSk7dFtyLiRjb250ZW50XT1lO3JldHVybiB0fXQuQmluZGVyPWNsYXNzIEJpbmRlcntjb25zdHJ1Y3RvcihlKXt0aGlzLnJvb3Q9ZTt0aGlzLmRhdGFzZXRzPWUuZGF0YXNldHM7dGhpcy5kYXRhPWUuZGF0YXNldHM/LmRhdGF8fG5ldyBzLlhtbE9iamVjdChvLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZCwiZGF0YSIpO3RoaXMuZW1wdHlNZXJnZT0wPT09dGhpcy5kYXRhW3IuJGdldENoaWxkcmVuXSgpLmxlbmd0aDt0aGlzLnJvb3QuZm9ybT10aGlzLmZvcm09ZS50ZW1wbGF0ZVtyLiRjbG9uZV0oKX1faXNDb25zdW1lRGF0YSgpe3JldHVybiF0aGlzLmVtcHR5TWVyZ2UmJnRoaXMuX21lcmdlTW9kZX1faXNNYXRjaFRlbXBsYXRlKCl7cmV0dXJuIXRoaXMuX2lzQ29uc3VtZURhdGEoKX1iaW5kKCl7dGhpcy5fYmluZEVsZW1lbnQodGhpcy5mb3JtLHRoaXMuZGF0YSk7cmV0dXJuIHRoaXMuZm9ybX1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1fYmluZFZhbHVlKGUsdCxhKXtlW3IuJGRhdGFdPXQ7aWYoZVtyLiRoYXNTZXR0YWJsZVZhbHVlXSgpKWlmKHRbci4kaXNEYXRhVmFsdWVdKCkpe2NvbnN0IGE9dFtyLiRnZXREYXRhVmFsdWVdKCk7ZVtyLiRzZXRWYWx1ZV0oY3JlYXRlVGV4dChhKSl9ZWxzZSBpZihlIGluc3RhbmNlb2Ygbi5GaWVsZCYmIm11bHRpU2VsZWN0Ij09PWUudWk/LmNob2ljZUxpc3Q/Lm9wZW4pe2NvbnN0IGE9dFtyLiRnZXRDaGlsZHJlbl0oKS5tYXAoKGU9PmVbci4kY29udGVudF0udHJpbSgpKSkuam9pbigiXG4iKTtlW3IuJHNldFZhbHVlXShjcmVhdGVUZXh0KGEpKX1lbHNlIHRoaXMuX2lzQ29uc3VtZURhdGEoKSYmKDAsYy53YXJuKSgiWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLiIpO2Vsc2UhdFtyLiRpc0RhdGFWYWx1ZV0oKXx8dGhpcy5faXNNYXRjaFRlbXBsYXRlKCk/dGhpcy5fYmluZEVsZW1lbnQoZSx0KTooMCxjLndhcm4pKCJYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuIil9X2ZpbmREYXRhQnlOYW1lVG9Db25zdW1lKGUsdCxhLG4pe2lmKCFlKXJldHVybiBudWxsO2xldCBpLHM7Zm9yKGxldCBuPTA7bjwzO24rKyl7aT1hW3IuJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShlLCExLCEwKTtmb3IoOzspe3M9aS5uZXh0KCkudmFsdWU7aWYoIXMpYnJlYWs7aWYodD09PXNbci4kaXNEYXRhVmFsdWVdKCkpcmV0dXJuIHN9aWYoYVtyLiRuYW1lc3BhY2VJZF09PT1vLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZCYmImRhdGEiPT09YVtyLiRub2RlTmFtZV0pYnJlYWs7YT1hW3IuJGdldFBhcmVudF0oKX1pZighbilyZXR1cm4gbnVsbDtpPXRoaXMuZGF0YVtyLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0oZSwhMCwhMSk7cz1pLm5leHQoKS52YWx1ZTtpZihzKXJldHVybiBzO2k9dGhpcy5kYXRhW3IuJGdldEF0dHJpYnV0ZUl0XShlLCEwKTtzPWkubmV4dCgpLnZhbHVlO3JldHVybiBzPy5bci4kaXNEYXRhVmFsdWVdKCk/czpudWxsfV9zZXRQcm9wZXJ0aWVzKGUsdCl7aWYoZS5oYXNPd25Qcm9wZXJ0eSgic2V0UHJvcGVydHkiKSlmb3IoY29uc3R7cmVmOmEsdGFyZ2V0Om8sY29ubmVjdGlvbjpsfW9mIGUuc2V0UHJvcGVydHkuY2hpbGRyZW4pe2lmKGwpY29udGludWU7aWYoIWEpY29udGludWU7Y29uc3QgaD0oMCxpLnNlYXJjaE5vZGUpKHRoaXMucm9vdCx0LGEsITEsITEpO2lmKCFoKXsoMCxjLndhcm4pKGBYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogJHthfS5gKTtjb250aW51ZX1jb25zdFt1XT1oO2lmKCF1W3IuJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhKSl7KDAsYy53YXJuKSgiWEZBIC0gSW52YWxpZCBub2RlOiBtdXN0IGJlIGEgZGF0YSBub2RlLiIpO2NvbnRpbnVlfWNvbnN0IGQ9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsZSxvLCExLCExKTtpZighZCl7KDAsYy53YXJuKShgWEZBIC0gSW52YWxpZCB0YXJnZXQ6ICR7b30uYCk7Y29udGludWV9Y29uc3RbZl09ZDtpZighZltyLiRpc0Rlc2NlbmRlbnRdKGUpKXsoMCxjLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogbXVzdCBiZSBhIHByb3BlcnR5IG9yIHN1YnByb3BlcnR5LiIpO2NvbnRpbnVlfWNvbnN0IGc9ZltyLiRnZXRQYXJlbnRdKCk7aWYoZiBpbnN0YW5jZW9mIG4uU2V0UHJvcGVydHl8fGcgaW5zdGFuY2VvZiBuLlNldFByb3BlcnR5KXsoMCxjLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgc2V0UHJvcGVydHkgb3Igb25lIG9mIGl0cyBwcm9wZXJ0aWVzLiIpO2NvbnRpbnVlfWlmKGYgaW5zdGFuY2VvZiBuLkJpbmRJdGVtc3x8ZyBpbnN0YW5jZW9mIG4uQmluZEl0ZW1zKXsoMCxjLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgYmluZEl0ZW1zIG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy4iKTtjb250aW51ZX1jb25zdCBwPXVbci4kdGV4dF0oKSxtPWZbci4kbm9kZU5hbWVdO2lmKGYgaW5zdGFuY2VvZiBzLlhGQUF0dHJpYnV0ZSl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpO2VbbV09cDtjb25zdCB0PVJlZmxlY3QuY29uc3RydWN0KE9iamVjdC5nZXRQcm90b3R5cGVPZihnKS5jb25zdHJ1Y3RvcixbZV0pO2dbbV09dFttXX1lbHNlIGlmKGYuaGFzT3duUHJvcGVydHkoci4kY29udGVudCkpe2Zbci4kZGF0YV09dTtmW3IuJGNvbnRlbnRdPXA7ZltyLiRmaW5hbGl6ZV0oKX1lbHNlKDAsYy53YXJuKSgiWEZBIC0gSW52YWxpZCBub2RlIHRvIHVzZSBpbiBzZXRQcm9wZXJ0eSIpfX1fYmluZEl0ZW1zKGUsdCl7aWYoIWUuaGFzT3duUHJvcGVydHkoIml0ZW1zIil8fCFlLmhhc093blByb3BlcnR5KCJiaW5kSXRlbXMiKXx8ZS5iaW5kSXRlbXMuaXNFbXB0eSgpKXJldHVybjtmb3IoY29uc3QgdCBvZiBlLml0ZW1zLmNoaWxkcmVuKWVbci4kcmVtb3ZlQ2hpbGRdKHQpO2UuaXRlbXMuY2xlYXIoKTtjb25zdCBhPW5ldyBuLkl0ZW1zKHt9KSxzPW5ldyBuLkl0ZW1zKHt9KTtlW3IuJGFwcGVuZENoaWxkXShhKTtlLml0ZW1zLnB1c2goYSk7ZVtyLiRhcHBlbmRDaGlsZF0ocyk7ZS5pdGVtcy5wdXNoKHMpO2Zvcihjb25zdHtyZWY6bixsYWJlbFJlZjpvLHZhbHVlUmVmOmwsY29ubmVjdGlvbjpofW9mIGUuYmluZEl0ZW1zLmNoaWxkcmVuKXtpZihoKWNvbnRpbnVlO2lmKCFuKWNvbnRpbnVlO2NvbnN0IGU9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxuLCExLCExKTtpZihlKWZvcihjb25zdCB0IG9mIGUpe2lmKCF0W3IuJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpeygwLGMud2FybikoYFhGQSAtIEludmFsaWQgcmVmICgke259KTogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLmApO2NvbnRpbnVlfWNvbnN0IGU9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxvLCEwLCExKTtpZighZSl7KDAsYy53YXJuKShgWEZBIC0gSW52YWxpZCBsYWJlbDogJHtvfS5gKTtjb250aW51ZX1jb25zdFtoXT1lO2lmKCFoW3IuJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpeygwLGMud2FybikoIlhGQSAtIEludmFsaWQgbGFiZWw6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC4iKTtjb250aW51ZX1jb25zdCB1PSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQsbCwhMCwhMSk7aWYoIXUpeygwLGMud2FybikoYFhGQSAtIEludmFsaWQgdmFsdWU6ICR7bH0uYCk7Y29udGludWV9Y29uc3RbZF09dTtpZighZFtyLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKXsoMCxjLndhcm4pKCJYRkEgLSBJbnZhbGlkIHZhbHVlOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuIik7Y29udGludWV9Y29uc3QgZj1jcmVhdGVUZXh0KGhbci4kdGV4dF0oKSksZz1jcmVhdGVUZXh0KGRbci4kdGV4dF0oKSk7YVtyLiRhcHBlbmRDaGlsZF0oZik7YS50ZXh0LnB1c2goZik7c1tyLiRhcHBlbmRDaGlsZF0oZyk7cy50ZXh0LnB1c2goZyl9ZWxzZSgwLGMud2FybikoYFhGQSAtIEludmFsaWQgcmVmZXJlbmNlOiAke259LmApfX1fYmluZE9jY3VycmVuY2VzKGUsdCxhKXtsZXQgbjtpZih0Lmxlbmd0aD4xKXtuPWVbci4kY2xvbmVdKCk7bltyLiRyZW1vdmVDaGlsZF0obi5vY2N1cik7bi5vY2N1cj1udWxsfXRoaXMuX2JpbmRWYWx1ZShlLHRbMF0sYSk7dGhpcy5fc2V0UHJvcGVydGllcyhlLHRbMF0pO3RoaXMuX2JpbmRJdGVtcyhlLHRbMF0pO2lmKDE9PT10Lmxlbmd0aClyZXR1cm47Y29uc3QgaT1lW3IuJGdldFBhcmVudF0oKSxzPWVbci4kbm9kZU5hbWVdLG89aVtyLiRpbmRleE9mXShlKTtmb3IobGV0IGU9MSxjPXQubGVuZ3RoO2U8YztlKyspe2NvbnN0IGM9dFtlXSxsPW5bci4kY2xvbmVdKCk7aVtzXS5wdXNoKGwpO2lbci4kaW5zZXJ0QXRdKG8rZSxsKTt0aGlzLl9iaW5kVmFsdWUobCxjLGEpO3RoaXMuX3NldFByb3BlcnRpZXMobCxjKTt0aGlzLl9iaW5kSXRlbXMobCxjKX19X2NyZWF0ZU9jY3VycmVuY2VzKGUpe2lmKCF0aGlzLmVtcHR5TWVyZ2UpcmV0dXJuO2NvbnN0e29jY3VyOnR9PWU7aWYoIXR8fHQuaW5pdGlhbDw9MSlyZXR1cm47Y29uc3QgYT1lW3IuJGdldFBhcmVudF0oKSxuPWVbci4kbm9kZU5hbWVdO2lmKCEoYVtuXWluc3RhbmNlb2Ygcy5YRkFPYmplY3RBcnJheSkpcmV0dXJuO2xldCBpO2k9ZS5uYW1lP2Fbbl0uY2hpbGRyZW4uZmlsdGVyKCh0PT50Lm5hbWU9PT1lLm5hbWUpKS5sZW5ndGg6YVtuXS5jaGlsZHJlbi5sZW5ndGg7Y29uc3Qgbz1hW3IuJGluZGV4T2ZdKGUpKzEsYz10LmluaXRpYWwtaTtpZihjKXtjb25zdCB0PWVbci4kY2xvbmVdKCk7dFtyLiRyZW1vdmVDaGlsZF0odC5vY2N1cik7dC5vY2N1cj1udWxsO2Fbbl0ucHVzaCh0KTthW3IuJGluc2VydEF0XShvLHQpO2ZvcihsZXQgZT0xO2U8YztlKyspe2NvbnN0IGk9dFtyLiRjbG9uZV0oKTthW25dLnB1c2goaSk7YVtyLiRpbnNlcnRBdF0obytlLGkpfX19X2dldE9jY3VySW5mbyhlKXtjb25zdHtuYW1lOnQsb2NjdXI6YX09ZTtpZighYXx8IXQpcmV0dXJuWzEsMV07Y29uc3Qgcj0tMT09PWEubWF4PzEvMDphLm1heDtyZXR1cm5bYS5taW4scl19X3NldEFuZEJpbmQoZSx0KXt0aGlzLl9zZXRQcm9wZXJ0aWVzKGUsdCk7dGhpcy5fYmluZEl0ZW1zKGUsdCk7dGhpcy5fYmluZEVsZW1lbnQoZSx0KX1fYmluZEVsZW1lbnQoZSx0KXtjb25zdCBhPVtdO3RoaXMuX2NyZWF0ZU9jY3VycmVuY2VzKGUpO2Zvcihjb25zdCBuIG9mIGVbci4kZ2V0Q2hpbGRyZW5dKCkpe2lmKG5bci4kZGF0YV0pY29udGludWU7aWYodm9pZCAwPT09dGhpcy5fbWVyZ2VNb2RlJiYic3ViZm9ybSI9PT1uW3IuJG5vZGVOYW1lXSl7dGhpcy5fbWVyZ2VNb2RlPSJjb25zdW1lRGF0YSI9PT1uLm1lcmdlTW9kZTtjb25zdCBlPXRbci4kZ2V0Q2hpbGRyZW5dKCk7aWYoZS5sZW5ndGg+MCl0aGlzLl9iaW5kT2NjdXJyZW5jZXMobixbZVswXV0sbnVsbCk7ZWxzZSBpZih0aGlzLmVtcHR5TWVyZ2Upe2NvbnN0IGU9dFtyLiRuYW1lc3BhY2VJZF09PT1sPy0xOnRbci4kbmFtZXNwYWNlSWRdLGE9bltyLiRkYXRhXT1uZXcgcy5YbWxPYmplY3QoZSxuLm5hbWV8fCJyb290Iik7dFtyLiRhcHBlbmRDaGlsZF0oYSk7dGhpcy5fYmluZEVsZW1lbnQobixhKX1jb250aW51ZX1pZighbltyLiRpc0JpbmRhYmxlXSgpKWNvbnRpbnVlO2xldCBlPSExLG89bnVsbCxoPW51bGwsdT1udWxsO2lmKG4uYmluZCl7c3dpdGNoKG4uYmluZC5tYXRjaCl7Y2FzZSJub25lIjp0aGlzLl9zZXRBbmRCaW5kKG4sdCk7Y29udGludWU7Y2FzZSJnbG9iYWwiOmU9ITA7YnJlYWs7Y2FzZSJkYXRhUmVmIjppZighbi5iaW5kLnJlZil7KDAsYy53YXJuKShgWEZBIC0gcmVmIGlzIGVtcHR5IGluIG5vZGUgJHtuW3IuJG5vZGVOYW1lXX0uYCk7dGhpcy5fc2V0QW5kQmluZChuLHQpO2NvbnRpbnVlfWg9bi5iaW5kLnJlZn1uLmJpbmQucGljdHVyZSYmKG89bi5iaW5kLnBpY3R1cmVbci4kY29udGVudF0pfWNvbnN0W2QsZl09dGhpcy5fZ2V0T2NjdXJJbmZvKG4pO2lmKGgpe3U9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxoLCEwLCExKTtpZihudWxsPT09dSl7dT0oMCxpLmNyZWF0ZURhdGFOb2RlKSh0aGlzLmRhdGEsdCxoKTtpZighdSljb250aW51ZTt0aGlzLl9pc0NvbnN1bWVEYXRhKCkmJih1W3IuJGNvbnN1bWVkXT0hMCk7dGhpcy5fc2V0QW5kQmluZChuLHUpO2NvbnRpbnVlfXRoaXMuX2lzQ29uc3VtZURhdGEoKSYmKHU9dS5maWx0ZXIoKGU9PiFlW3IuJGNvbnN1bWVkXSkpKTt1Lmxlbmd0aD5mP3U9dS5zbGljZSgwLGYpOjA9PT11Lmxlbmd0aCYmKHU9bnVsbCk7dSYmdGhpcy5faXNDb25zdW1lRGF0YSgpJiZ1LmZvckVhY2goKGU9PntlW3IuJGNvbnN1bWVkXT0hMH0pKX1lbHNle2lmKCFuLm5hbWUpe3RoaXMuX3NldEFuZEJpbmQobix0KTtjb250aW51ZX1pZih0aGlzLl9pc0NvbnN1bWVEYXRhKCkpe2NvbnN0IGE9W107Zm9yKDthLmxlbmd0aDxmOyl7Y29uc3QgaT10aGlzLl9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShuLm5hbWUsbltyLiRoYXNTZXR0YWJsZVZhbHVlXSgpLHQsZSk7aWYoIWkpYnJlYWs7aVtyLiRjb25zdW1lZF09ITA7YS5wdXNoKGkpfXU9YS5sZW5ndGg+MD9hOm51bGx9ZWxzZXt1PXRbci4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKG4ubmFtZSwhMSx0aGlzLmVtcHR5TWVyZ2UpLm5leHQoKS52YWx1ZTtpZighdSl7aWYoMD09PWQpe2EucHVzaChuKTtjb250aW51ZX1jb25zdCBlPXRbci4kbmFtZXNwYWNlSWRdPT09bD8tMTp0W3IuJG5hbWVzcGFjZUlkXTt1PW5bci4kZGF0YV09bmV3IHMuWG1sT2JqZWN0KGUsbi5uYW1lKTt0aGlzLmVtcHR5TWVyZ2UmJih1W3IuJGNvbnN1bWVkXT0hMCk7dFtyLiRhcHBlbmRDaGlsZF0odSk7dGhpcy5fc2V0QW5kQmluZChuLHUpO2NvbnRpbnVlfXRoaXMuZW1wdHlNZXJnZSYmKHVbci4kY29uc3VtZWRdPSEwKTt1PVt1XX19dT90aGlzLl9iaW5kT2NjdXJyZW5jZXMobix1LG8pOmQ+MD90aGlzLl9zZXRBbmRCaW5kKG4sdCk6YS5wdXNoKG4pfWEuZm9yRWFjaCgoZT0+ZVtyLiRnZXRQYXJlbnRdKClbci4kcmVtb3ZlQ2hpbGRdKGUpKSl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlZhbHVlPXQuVGV4dD10LlRlbXBsYXRlTmFtZXNwYWNlPXQuVGVtcGxhdGU9dC5TZXRQcm9wZXJ0eT10Lkl0ZW1zPXQuRmllbGQ9dC5CaW5kSXRlbXM9dm9pZCAwO3ZhciByPWEoNzgpLG49YSg4MSksaT1hKDgyKSxzPWEoODMpLG89YSg4NyksYz1hKDg0KSxsPWEoMiksaD1hKDg1KSx1PWEoMyksZD1hKDg4KTtjb25zdCBmPW4uTmFtZXNwYWNlSWRzLnRlbXBsYXRlLmlkLGc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixwPS9eSChcZCspJC8sbT1uZXcgU2V0KFsiaW1hZ2UvZ2lmIiwiaW1hZ2UvanBlZyIsImltYWdlL2pwZyIsImltYWdlL3BqcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvYXBuZyIsImltYWdlL3gtcG5nIiwiaW1hZ2UvYm1wIiwiaW1hZ2UveC1tcy1ibXAiLCJpbWFnZS90aWZmIiwiaW1hZ2UvdGlmIiwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0pLGI9W1tbNjYsNzddLCJpbWFnZS9ibXAiXSxbWzI1NSwyMTYsMjU1XSwiaW1hZ2UvanBlZyJdLFtbNzMsNzMsNDIsMF0sImltYWdlL3RpZmYiXSxbWzc3LDc3LDAsNDJdLCJpbWFnZS90aWZmIl0sW1s3MSw3Myw3MCw1Niw1Nyw5N10sImltYWdlL2dpZiJdLFtbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSwiaW1hZ2UvcG5nIl1dO2Z1bmN0aW9uIGdldEJvcmRlckRpbXMoZSl7aWYoIWV8fCFlLmJvcmRlcilyZXR1cm57dzowLGg6MH07Y29uc3QgdD1lLmJvcmRlcltyLiRnZXRFeHRyYV0oKTtyZXR1cm4gdD97dzp0LndpZHRoc1swXSt0LndpZHRoc1syXSt0Lmluc2V0c1swXSt0Lmluc2V0c1syXSxoOnQud2lkdGhzWzFdK3Qud2lkdGhzWzNdK3QuaW5zZXRzWzFdK3QuaW5zZXRzWzNdfTp7dzowLGg6MH19ZnVuY3Rpb24gaGFzTWFyZ2luKGUpe3JldHVybiBlLm1hcmdpbiYmKGUubWFyZ2luLnRvcEluc2V0fHxlLm1hcmdpbi5yaWdodEluc2V0fHxlLm1hcmdpbi5ib3R0b21JbnNldHx8ZS5tYXJnaW4ubGVmdEluc2V0KX1mdW5jdGlvbiBfc2V0VmFsdWUoZSx0KXtpZighZS52YWx1ZSl7Y29uc3QgdD1uZXcgVmFsdWUoe30pO2Vbci4kYXBwZW5kQ2hpbGRdKHQpO2UudmFsdWU9dH1lLnZhbHVlW3IuJHNldFZhbHVlXSh0KX1mdW5jdGlvbipnZXRDb250YWluZWRDaGlsZHJlbihlKXtmb3IoY29uc3QgdCBvZiBlW3IuJGdldENoaWxkcmVuXSgpKXQgaW5zdGFuY2VvZiBTdWJmb3JtU2V0P3lpZWxkKnRbci4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCk6eWllbGQgdH1mdW5jdGlvbiBpc1JlcXVpcmVkKGUpe3JldHVybiJlcnJvciI9PT1lLnZhbGlkYXRlPy5udWxsVGVzdH1mdW5jdGlvbiBzZXRUYWJJbmRleChlKXtmb3IoO2U7KXtpZighZS50cmF2ZXJzYWwpe2Vbci4kdGFiSW5kZXhdPWVbci4kZ2V0UGFyZW50XSgpW3IuJHRhYkluZGV4XTtyZXR1cm59aWYoZVtyLiR0YWJJbmRleF0pcmV0dXJuO2xldCB0PW51bGw7Zm9yKGNvbnN0IGEgb2YgZS50cmF2ZXJzYWxbci4kZ2V0Q2hpbGRyZW5dKCkpaWYoIm5leHQiPT09YS5vcGVyYXRpb24pe3Q9YTticmVha31pZighdHx8IXQucmVmKXtlW3IuJHRhYkluZGV4XT1lW3IuJGdldFBhcmVudF0oKVtyLiR0YWJJbmRleF07cmV0dXJufWNvbnN0IGE9ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKCk7ZVtyLiR0YWJJbmRleF09KythW3IuJHRhYkluZGV4XTtjb25zdCBuPWFbci4kc2VhcmNoTm9kZV0odC5yZWYsZSk7aWYoIW4pcmV0dXJuO2U9blswXX19ZnVuY3Rpb24gYXBwbHlBc3Npc3QoZSx0KXtjb25zdCBhPWUuYXNzaXN0O2lmKGEpe2NvbnN0IGU9YVtyLiR0b0hUTUxdKCk7ZSYmKHQudGl0bGU9ZSk7Y29uc3Qgbj1hLnJvbGUubWF0Y2gocCk7aWYobil7Y29uc3QgZT0iaGVhZGluZyIsYT1uWzFdO3Qucm9sZT1lO3RbImFyaWEtbGV2ZWwiXT1hfX1pZigidGFibGUiPT09ZS5sYXlvdXQpdC5yb2xlPSJ0YWJsZSI7ZWxzZSBpZigicm93Ij09PWUubGF5b3V0KXQucm9sZT0icm93IjtlbHNle2NvbnN0IGE9ZVtyLiRnZXRQYXJlbnRdKCk7InJvdyI9PT1hLmxheW91dCYmKHQucm9sZT0iVEgiPT09YS5hc3Npc3Q/LnJvbGU/ImNvbHVtbmhlYWRlciI6ImNlbGwiKX19ZnVuY3Rpb24gYXJpYUxhYmVsKGUpe2lmKCFlLmFzc2lzdClyZXR1cm4gbnVsbDtjb25zdCB0PWUuYXNzaXN0O3JldHVybiB0LnNwZWFrJiYiIiE9PXQuc3BlYWtbci4kY29udGVudF0/dC5zcGVha1tyLiRjb250ZW50XTp0LnRvb2xUaXA/dC50b29sVGlwW3IuJGNvbnRlbnRdOm51bGx9ZnVuY3Rpb24gdmFsdWVUb0h0bWwoZSl7cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOlt7bmFtZToic3BhbiIsYXR0cmlidXRlczp7c3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sdmFsdWU6ZX1dfSl9ZnVuY3Rpb24gc2V0Rmlyc3RVbnNwbGl0dGFibGUoZSl7Y29uc3QgdD1lW3IuJGdldFRlbXBsYXRlUm9vdF0oKTtpZihudWxsPT09dFtyLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGUpe3Rbci4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlPWU7dFtyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSEwfX1mdW5jdGlvbiB1bnNldEZpcnN0VW5zcGxpdHRhYmxlKGUpe2NvbnN0IHQ9ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKCk7dFtyLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGU9PT1lJiYodFtyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSExKX1mdW5jdGlvbiBoYW5kbGVCcmVhayhlKXtpZihlW3IuJGV4dHJhXSlyZXR1cm4hMTtlW3IuJGV4dHJhXT1PYmplY3QuY3JlYXRlKG51bGwpO2lmKCJhdXRvIj09PWUudGFyZ2V0VHlwZSlyZXR1cm4hMTtjb25zdCB0PWVbci4kZ2V0VGVtcGxhdGVSb290XSgpO2xldCBhPW51bGw7aWYoZS50YXJnZXQpe2E9dFtyLiRzZWFyY2hOb2RlXShlLnRhcmdldCxlW3IuJGdldFBhcmVudF0oKSk7aWYoIWEpcmV0dXJuITE7YT1hWzBdfWNvbnN0e2N1cnJlbnRQYWdlQXJlYTpuLGN1cnJlbnRDb250ZW50QXJlYTppfT10W3IuJGV4dHJhXTtpZigicGFnZUFyZWEiPT09ZS50YXJnZXRUeXBlKXthIGluc3RhbmNlb2YgUGFnZUFyZWF8fChhPW51bGwpO2lmKGUuc3RhcnROZXcpe2Vbci4kZXh0cmFdLnRhcmdldD1hfHxuO3JldHVybiEwfWlmKGEmJmEhPT1uKXtlW3IuJGV4dHJhXS50YXJnZXQ9YTtyZXR1cm4hMH1yZXR1cm4hMX1hIGluc3RhbmNlb2YgQ29udGVudEFyZWF8fChhPW51bGwpO2NvbnN0IHM9YSYmYVtyLiRnZXRQYXJlbnRdKCk7bGV0IG8sYz1zO2lmKGUuc3RhcnROZXcpaWYoYSl7Y29uc3QgZT1zLmNvbnRlbnRBcmVhLmNoaWxkcmVuLHQ9ZS5pbmRleE9mKGkpLHI9ZS5pbmRleE9mKGEpOy0xIT09dCYmdDxyJiYoYz1udWxsKTtvPXItMX1lbHNlIG89bi5jb250ZW50QXJlYS5jaGlsZHJlbi5pbmRleE9mKGkpO2Vsc2V7aWYoIWF8fGE9PT1pKXJldHVybiExO289cy5jb250ZW50QXJlYS5jaGlsZHJlbi5pbmRleE9mKGEpLTE7Yz1zPT09bj9udWxsOnN9ZVtyLiRleHRyYV0udGFyZ2V0PWM7ZVtyLiRleHRyYV0uaW5kZXg9bztyZXR1cm4hMH1mdW5jdGlvbiBoYW5kbGVPdmVyZmxvdyhlLHQsYSl7Y29uc3Qgbj1lW3IuJGdldFRlbXBsYXRlUm9vdF0oKSxpPW5bci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSxzPXRbci4kZ2V0U3ViZm9ybVBhcmVudF07dFtyLiRnZXRTdWJmb3JtUGFyZW50XT0oKT0+ZTtuW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITA7Y29uc3Qgbz10W3IuJHRvSFRNTF0oYSk7ZVtyLiRhZGRIVE1MXShvLmh0bWwsby5iYm94KTtuW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9aTt0W3IuJGdldFN1YmZvcm1QYXJlbnRdPXN9Y2xhc3MgQXBwZWFyYW5jZUZpbHRlciBleHRlbmRzIG8uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImFwcGVhcmFuY2VGaWx0ZXIiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEFyYyBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImFyYyIsITApO3RoaXMuY2lyY3VsYXI9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNpcmN1bGFyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5oYW5kPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5zdGFydEFuZ2xlPSgwLGMuZ2V0RmxvYXQpKHtkYXRhOmUuc3RhcnRBbmdsZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4hMH0pO3RoaXMuc3dlZXBBbmdsZT0oMCxjLmdldEZsb2F0KSh7ZGF0YTplLnN3ZWVwQW5nbGUsZGVmYXVsdFZhbHVlOjM2MCx2YWxpZGF0ZTplPT4hMH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmVkZ2U9bnVsbDt0aGlzLmZpbGw9bnVsbH1bci4kdG9IVE1MXSgpe2NvbnN0IGU9dGhpcy5lZGdlfHxuZXcgRWRnZSh7fSksdD1lW3IuJHRvU3R5bGVdKCksYT1PYmplY3QuY3JlYXRlKG51bGwpOyJ2aXNpYmxlIj09PXRoaXMuZmlsbD8ucHJlc2VuY2U/T2JqZWN0LmFzc2lnbihhLHRoaXMuZmlsbFtyLiR0b1N0eWxlXSgpKTphLmZpbGw9InRyYW5zcGFyZW50IjthLnN0cm9rZVdpZHRoPSgwLHMubWVhc3VyZVRvU3RyaW5nKSgidmlzaWJsZSI9PT1lLnByZXNlbmNlP2UudGhpY2tuZXNzOjApO2Euc3Ryb2tlPXQuY29sb3I7bGV0IG47Y29uc3QgaT17eG1sbnM6ZyxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb3ZlcmZsb3c6InZpc2libGUifX07aWYoMzYwPT09dGhpcy5zd2VlcEFuZ2xlKW49e25hbWU6ImVsbGlwc2UiLGF0dHJpYnV0ZXM6e3htbG5zOmcsY3g6IjUwJSIsY3k6IjUwJSIscng6IjUwJSIscnk6IjUwJSIsc3R5bGU6YX19O2Vsc2V7Y29uc3QgZT10aGlzLnN0YXJ0QW5nbGUqTWF0aC5QSS8xODAsdD10aGlzLnN3ZWVwQW5nbGUqTWF0aC5QSS8xODAscj10aGlzLnN3ZWVwQW5nbGU+MTgwPzE6MCxbcyxvLGMsbF09WzUwKigxK01hdGguY29zKGUpKSw1MCooMS1NYXRoLnNpbihlKSksNTAqKDErTWF0aC5jb3MoZSt0KSksNTAqKDEtTWF0aC5zaW4oZSt0KSldO249e25hbWU6InBhdGgiLGF0dHJpYnV0ZXM6e3htbG5zOmcsZDpgTSAke3N9ICR7b30gQSA1MCA1MCAwICR7cn0gMCAke2N9ICR7bH1gLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTphfX07T2JqZWN0LmFzc2lnbihpLHt2aWV3Qm94OiIwIDAgMTAwIDEwMCIscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KX1jb25zdCBvPXtuYW1lOiJzdmciLGNoaWxkcmVuOltuXSxhdHRyaWJ1dGVzOml9O2lmKGhhc01hcmdpbih0aGlzW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCkpKXJldHVybiBjLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTp7ZGlzcGxheToiaW5saW5lIix3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn19LGNoaWxkcmVuOltvXX0pO28uYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO3JldHVybiBjLkhUTUxSZXN1bHQuc3VjY2VzcyhvKX19Y2xhc3MgQXJlYSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImFyZWEiLCEwKTt0aGlzLmNvbFNwYW49KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLng9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKTt0aGlzLnk9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKTt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMuYXJlYT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRyYXc9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5leE9iamVjdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV4Y2xHcm91cD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmZpZWxkPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXl9KltyLiRnZXRDb250YWluZWRDaGlsZHJlbl0oKXt5aWVsZCpnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKX1bci4kaXNUcmFuc3BhcmVudF0oKXtyZXR1cm4hMH1bci4kaXNCaW5kYWJsZV0oKXtyZXR1cm4hMH1bci4kYWRkSFRNTF0oZSx0KXtjb25zdFthLG4saSxzXT10O3RoaXNbci4kZXh0cmFdLndpZHRoPU1hdGgubWF4KHRoaXNbci4kZXh0cmFdLndpZHRoLGEraSk7dGhpc1tyLiRleHRyYV0uaGVpZ2h0PU1hdGgubWF4KHRoaXNbci4kZXh0cmFdLmhlaWdodCxuK3MpO3RoaXNbci4kZXh0cmFdLmNoaWxkcmVuLnB1c2goZSl9W3IuJGdldEF2YWlsYWJsZVNwYWNlXSgpe3JldHVybiB0aGlzW3IuJGV4dHJhXS5hdmFpbGFibGVTcGFjZX1bci4kdG9IVE1MXShlKXtjb25zdCB0PSgwLHMudG9TdHlsZSkodGhpcywicG9zaXRpb24iKSxhPXtzdHlsZTp0LGlkOnRoaXNbci4kdWlkXSxjbGFzczpbInhmYUFyZWEiXX07KDAscy5pc1ByaW50T25seSkodGhpcykmJmEuY2xhc3MucHVzaCgieGZhUHJpbnRPbmx5Iik7dGhpcy5uYW1lJiYoYS54ZmFOYW1lPXRoaXMubmFtZSk7Y29uc3Qgbj1bXTt0aGlzW3IuJGV4dHJhXT17Y2hpbGRyZW46bix3aWR0aDowLGhlaWdodDowLGF2YWlsYWJsZVNwYWNlOmV9O2NvbnN0IGk9dGhpc1tyLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjpuZXcgU2V0KFsiYXJlYSIsImRyYXciLCJmaWVsZCIsImV4Y2xHcm91cCIsInN1YmZvcm0iLCJzdWJmb3JtU2V0Il0pLGluY2x1ZGU6ITB9KTtpZighaS5zdWNjZXNzKXtpZihpLmlzQnJlYWsoKSlyZXR1cm4gaTtkZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIGMuSFRNTFJlc3VsdC5GQUlMVVJFfXQud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXNbci4kZXh0cmFdLndpZHRoKTt0LmhlaWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpc1tyLiRleHRyYV0uaGVpZ2h0KTtjb25zdCBvPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6YSxjaGlsZHJlbjpufSxsPVt0aGlzLngsdGhpcy55LHRoaXNbci4kZXh0cmFdLndpZHRoLHRoaXNbci4kZXh0cmFdLmhlaWdodF07ZGVsZXRlIHRoaXNbci4kZXh0cmFdO3JldHVybiBjLkhUTUxSZXN1bHQuc3VjY2VzcyhvLGwpfX1jbGFzcyBBc3Npc3QgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJhc3Npc3QiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucm9sZT1lLnJvbGV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnNwZWFrPW51bGw7dGhpcy50b29sVGlwPW51bGx9W3IuJHRvSFRNTF0oKXtyZXR1cm4gdGhpcy50b29sVGlwPy5bci4kY29udGVudF18fG51bGx9fWNsYXNzIEJhcmNvZGUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJiYXJjb2RlIiwhMCk7dGhpcy5jaGFyRW5jb2Rpbmc9KDAsYy5nZXRLZXl3b3JkKSh7ZGF0YTplLmNoYXJFbmNvZGluZz9lLmNoYXJFbmNvZGluZy50b0xvd2VyQ2FzZSgpOiIiLGRlZmF1bHRWYWx1ZToiIix2YWxpZGF0ZTplPT5bInV0Zi04IiwiYmlnLWZpdmUiLCJmb250c3BlY2lmaWMiLCJnYmsiLCJnYi0xODAzMCIsImdiLTIzMTIiLCJrc2MtNTYwMSIsIm5vbmUiLCJzaGlmdC1qaXMiLCJ1Y3MtMiIsInV0Zi0xNiJdLmluY2x1ZGVzKGUpfHxlLm1hdGNoKC9pc28tODg1OS1cZHsyfS8pfSk7dGhpcy5jaGVja3N1bT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5jaGVja3N1bSxbIm5vbmUiLCIxbW9kMTAiLCIxbW9kMTBfMW1vZDExIiwiMm1vZDEwIiwiYXV0byJdKTt0aGlzLmRhdGFDb2x1bW5Db3VudD0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuZGF0YUNvbHVtbkNvdW50LGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5kYXRhTGVuZ3RoPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhTGVuZ3RoLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5kYXRhUHJlcD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5kYXRhUHJlcCxbIm5vbmUiLCJmbGF0ZUNvbXByZXNzIl0pO3RoaXMuZGF0YVJvd0NvdW50PSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhUm93Q291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmVuZENoYXI9ZS5lbmRDaGFyfHwiIjt0aGlzLmVycm9yQ29ycmVjdGlvbkxldmVsPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5lcnJvckNvcnJlY3Rpb25MZXZlbCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49MCYmZTw9OH0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5tb2R1bGVIZWlnaHQ9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5tb2R1bGVIZWlnaHQsIjVtbSIpO3RoaXMubW9kdWxlV2lkdGg9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5tb2R1bGVXaWR0aCwiMC4yNW1tIik7dGhpcy5wcmludENoZWNrRGlnaXQ9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnByaW50Q2hlY2tEaWdpdCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMucm93Q29sdW1uUmF0aW89KDAsYy5nZXRSYXRpbykoZS5yb3dDb2x1bW5SYXRpbyk7dGhpcy5zdGFydENoYXI9ZS5zdGFydENoYXJ8fCIiO3RoaXMudGV4dExvY2F0aW9uPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnRleHRMb2NhdGlvbixbImJlbG93IiwiYWJvdmUiLCJhYm92ZUVtYmVkZGVkIiwiYmVsb3dFbWJlZGRlZCIsIm5vbmUiXSk7dGhpcy50cnVuY2F0ZT0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUudHJ1bmNhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZT9lLnR5cGUudG9Mb3dlckNhc2UoKToiIixbImF6dGVjIiwiY29kYWJhciIsImNvZGUyb2Y1aW5kdXN0cmlhbCIsImNvZGUyb2Y1aW50ZXJsZWF2ZWQiLCJjb2RlMm9mNW1hdHJpeCIsImNvZGUyb2Y1c3RhbmRhcmQiLCJjb2RlM29mOSIsImNvZGUzb2Y5ZXh0ZW5kZWQiLCJjb2RlMTEiLCJjb2RlNDkiLCJjb2RlOTMiLCJjb2RlMTI4IiwiY29kZTEyOGEiLCJjb2RlMTI4YiIsImNvZGUxMjhjIiwiY29kZTEyOHNzY2MiLCJkYXRhbWF0cml4IiwiZWFuOCIsImVhbjhhZGQyIiwiZWFuOGFkZDUiLCJlYW4xMyIsImVhbjEzYWRkMiIsImVhbjEzYWRkNSIsImVhbjEzcHdjZCIsImZpbSIsImxvZ21hcnMiLCJtYXhpY29kZSIsIm1zaSIsInBkZjQxNyIsInBkZjQxN21hY3JvIiwicGxlc3NleSIsInBvc3RhdXNjdXN0MiIsInBvc3RhdXNjdXN0MyIsInBvc3RhdXNyZXBseXBhaWQiLCJwb3N0YXVzc3RhbmRhcmQiLCJwb3N0dWtybTRzY2MiLCJwb3N0dXNkcGJjIiwicG9zdHVzaW1iIiwicG9zdHVzc3RhbmRhcmQiLCJwb3N0dXM1emlwIiwicXJjb2RlIiwicmZpZCIsInJzczE0IiwicnNzMTRleHBhbmRlZCIsInJzczE0bGltaXRlZCIsInJzczE0c3RhY2tlZCIsInJzczE0c3RhY2tlZG9tbmkiLCJyc3MxNHRydW5jYXRlZCIsInRlbGVwZW4iLCJ1Y2MxMjgiLCJ1Y2MxMjhyYW5kb20iLCJ1Y2MxMjhzc2NjIiwidXBjYSIsInVwY2FhZGQyIiwidXBjYWFkZDUiLCJ1cGNhcHdjZCIsInVwY2UiLCJ1cGNlYWRkMiIsInVwY2VhZGQ1IiwidXBjZWFuMiIsInVwY2VhbjUiLCJ1cHNtYXhpY29kZSJdKTt0aGlzLnVwc01vZGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudXBzTW9kZSxbInVzQ2FycmllciIsImludGVybmF0aW9uYWxDYXJyaWVyIiwic2VjdXJlU3ltYm9sIiwic3RhbmRhcmRTeW1ib2wiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMud2lkZU5hcnJvd1JhdGlvPSgwLGMuZ2V0UmF0aW8pKGUud2lkZU5hcnJvd1JhdGlvKTt0aGlzLmVuY3J5cHQ9bnVsbDt0aGlzLmV4dHJhcz1udWxsfX1jbGFzcyBCaW5kIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiYmluZCIsITApO3RoaXMubWF0Y2g9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUubWF0Y2gsWyJvbmNlIiwiZGF0YVJlZiIsImdsb2JhbCIsIm5vbmUiXSk7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMucGljdHVyZT1udWxsfX1jbGFzcyBCaW5kSXRlbXMgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJiaW5kSXRlbXMiKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLmxhYmVsUmVmPWUubGFiZWxSZWZ8fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnZhbHVlUmVmPWUudmFsdWVSZWZ8fCIifX10LkJpbmRJdGVtcz1CaW5kSXRlbXM7Y2xhc3MgQm9va2VuZCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImJvb2tlbmQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVhZGVyPWUubGVhZGVyfHwiIjt0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEJvb2xlYW5FbGVtZW50IGV4dGVuZHMgby5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJib29sZWFuIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKDE9PT10aGlzW3IuJGNvbnRlbnRdPyIxIjoiMCIpfX1jbGFzcyBCb3JkZXIgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJib3JkZXIiLCEwKTt0aGlzLmJyZWFrPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmJyZWFrLFsiY2xvc2UiLCJvcGVuIl0pO3RoaXMuaGFuZD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHJlc2VuY2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZWxldmFudD0oMCxjLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb3JuZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXkoNCk7dGhpcy5lZGdlPW5ldyBvLlhGQU9iamVjdEFycmF5KDQpO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5maWxsPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bci4kZ2V0RXh0cmFdKCl7aWYoIXRoaXNbci4kZXh0cmFdKXtjb25zdCBlPXRoaXMuZWRnZS5jaGlsZHJlbi5zbGljZSgpO2lmKGUubGVuZ3RoPDQpe2NvbnN0IHQ9ZS5hdCgtMSl8fG5ldyBFZGdlKHt9KTtmb3IobGV0IGE9ZS5sZW5ndGg7YTw0O2ErKyllLnB1c2godCl9Y29uc3QgdD1lLm1hcCgoZT0+ZS50aGlja25lc3MpKSxhPVswLDAsMCwwXTtpZih0aGlzLm1hcmdpbil7YVswXT10aGlzLm1hcmdpbi50b3BJbnNldDthWzFdPXRoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7YVsyXT10aGlzLm1hcmdpbi5ib3R0b21JbnNldDthWzNdPXRoaXMubWFyZ2luLmxlZnRJbnNldH10aGlzW3IuJGV4dHJhXT17d2lkdGhzOnQsaW5zZXRzOmEsZWRnZXM6ZX19cmV0dXJuIHRoaXNbci4kZXh0cmFdfVtyLiR0b1N0eWxlXSgpe2NvbnN0e2VkZ2VzOmV9PXRoaXNbci4kZ2V0RXh0cmFdKCksdD1lLm1hcCgoZT0+e2NvbnN0IHQ9ZVtyLiR0b1N0eWxlXSgpO3QuY29sb3J8fD0iIzAwMDAwMCI7cmV0dXJuIHR9KSksYT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMubWFyZ2luJiZPYmplY3QuYXNzaWduKGEsdGhpcy5tYXJnaW5bci4kdG9TdHlsZV0oKSk7InZpc2libGUiPT09dGhpcy5maWxsPy5wcmVzZW5jZSYmT2JqZWN0LmFzc2lnbihhLHRoaXMuZmlsbFtyLiR0b1N0eWxlXSgpKTtpZih0aGlzLmNvcm5lci5jaGlsZHJlbi5zb21lKChlPT4wIT09ZS5yYWRpdXMpKSl7Y29uc3QgZT10aGlzLmNvcm5lci5jaGlsZHJlbi5tYXAoKGU9PmVbci4kdG9TdHlsZV0oKSkpO2lmKDI9PT1lLmxlbmd0aHx8Mz09PWUubGVuZ3RoKXtjb25zdCB0PWUuYXQoLTEpO2ZvcihsZXQgYT1lLmxlbmd0aDthPDQ7YSsrKWUucHVzaCh0KX1hLmJvcmRlclJhZGl1cz1lLm1hcCgoZT0+ZS5yYWRpdXMpKS5qb2luKCIgIil9c3dpdGNoKHRoaXMucHJlc2VuY2Upe2Nhc2UiaW52aXNpYmxlIjpjYXNlImhpZGRlbiI6YS5ib3JkZXJTdHlsZT0iIjticmVhaztjYXNlImluYWN0aXZlIjphLmJvcmRlclN0eWxlPSJub25lIjticmVhaztkZWZhdWx0OmEuYm9yZGVyU3R5bGU9dC5tYXAoKGU9PmUuc3R5bGUpKS5qb2luKCIgIil9YS5ib3JkZXJXaWR0aD10Lm1hcCgoZT0+ZS53aWR0aCkpLmpvaW4oIiAiKTthLmJvcmRlckNvbG9yPXQubWFwKChlPT5lLmNvbG9yKSkuam9pbigiICIpO3JldHVybiBhfX1jbGFzcyBCcmVhayBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImJyZWFrIiwhMCk7dGhpcy5hZnRlcj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5hZnRlcixbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIiwicGFnZUV2ZW4iLCJwYWdlT2RkIl0pO3RoaXMuYWZ0ZXJUYXJnZXQ9ZS5hZnRlclRhcmdldHx8IiI7dGhpcy5iZWZvcmU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYmVmb3JlLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiLCJwYWdlRXZlbiIsInBhZ2VPZGQiXSk7dGhpcy5iZWZvcmVUYXJnZXQ9ZS5iZWZvcmVUYXJnZXR8fCIiO3RoaXMuYm9va2VuZExlYWRlcj1lLmJvb2tlbmRMZWFkZXJ8fCIiO3RoaXMuYm9va2VuZFRyYWlsZXI9ZS5ib29rZW5kVHJhaWxlcnx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm92ZXJmbG93TGVhZGVyPWUub3ZlcmZsb3dMZWFkZXJ8fCIiO3RoaXMub3ZlcmZsb3dUYXJnZXQ9ZS5vdmVyZmxvd1RhcmdldHx8IiI7dGhpcy5vdmVyZmxvd1RyYWlsZXI9ZS5vdmVyZmxvd1RyYWlsZXJ8fCIiO3RoaXMuc3RhcnROZXc9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9fWNsYXNzIEJyZWFrQWZ0ZXIgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJicmVha0FmdGVyIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlYWRlcj1lLmxlYWRlcnx8IiI7dGhpcy5zdGFydE5ldz0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiI7dGhpcy50YXJnZXRUeXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnRhcmdldFR5cGUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdKTt0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5zY3JpcHQ9bnVsbH19Y2xhc3MgQnJlYWtCZWZvcmUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJicmVha0JlZm9yZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMuc3RhcnROZXc9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudGFyZ2V0VHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50YXJnZXRUeXBlLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiXSk7dGhpcy50cmFpbGVyPWUudHJhaWxlcnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc2NyaXB0PW51bGx9W3IuJHRvSFRNTF0oZSl7dGhpc1tyLiRleHRyYV09e307cmV0dXJuIGMuSFRNTFJlc3VsdC5GQUlMVVJFfX1jbGFzcyBCdXR0b24gZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJidXR0b24iLCEwKTt0aGlzLmhpZ2hsaWdodD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5oaWdobGlnaHQsWyJpbnZlcnRlZCIsIm5vbmUiLCJvdXRsaW5lIiwicHVzaCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpLGE9e25hbWU6ImJ1dHRvbiIsYXR0cmlidXRlczp7aWQ6dGhpc1tyLiR1aWRdLGNsYXNzOlsieGZhQnV0dG9uIl0sc3R5bGU6e319LGNoaWxkcmVuOltdfTtmb3IoY29uc3QgZSBvZiB0LmV2ZW50LmNoaWxkcmVuKXtpZigiY2xpY2siIT09ZS5hY3Rpdml0eXx8IWUuc2NyaXB0KWNvbnRpbnVlO2NvbnN0IHQ9KDAsdS5yZWNvdmVySnNVUkwpKGUuc2NyaXB0W3IuJGNvbnRlbnRdKTtpZighdCljb250aW51ZTtjb25zdCBuPSgwLHMuZml4VVJMKSh0LnVybCk7biYmYS5jaGlsZHJlbi5wdXNoKHtuYW1lOiJhIixhdHRyaWJ1dGVzOntpZDoibGluayIrdGhpc1tyLiR1aWRdLGhyZWY6bixuZXdXaW5kb3c6dC5uZXdXaW5kb3csY2xhc3M6WyJ4ZmFMaW5rIl0sc3R5bGU6e319LGNoaWxkcmVuOltdfSl9cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKGEpfX1jbGFzcyBDYWxjdWxhdGUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJjYWxjdWxhdGUiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3ZlcnJpZGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUub3ZlcnJpZGUsWyJkaXNhYmxlZCIsImVycm9yIiwiaWdub3JlIiwid2FybmluZyJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1lc3NhZ2U9bnVsbDt0aGlzLnNjcmlwdD1udWxsfX1jbGFzcyBDYXB0aW9uIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiY2FwdGlvbiIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wbGFjZW1lbnQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucGxhY2VtZW50LFsibGVmdCIsImJvdHRvbSIsImlubGluZSIsInJpZ2h0IiwidG9wIl0pO3RoaXMucHJlc2VuY2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZXNlcnZlPU1hdGguY2VpbCgoMCxjLmdldE1lYXN1cmVtZW50KShlLnJlc2VydmUpKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZvbnQ9bnVsbDt0aGlzLm1hcmdpbj1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudmFsdWU9bnVsbH1bci4kc2V0VmFsdWVdKGUpe19zZXRWYWx1ZSh0aGlzLGUpfVtyLiRnZXRFeHRyYV0oZSl7aWYoIXRoaXNbci4kZXh0cmFdKXtsZXR7d2lkdGg6dCxoZWlnaHQ6YX09ZTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnQ9dGhpcy5yZXNlcnZlPD0wP3Q6dGhpcy5yZXNlcnZlO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6YT10aGlzLnJlc2VydmU8PTA/YTp0aGlzLnJlc2VydmV9dGhpc1tyLiRleHRyYV09KDAscy5sYXlvdXROb2RlKSh0aGlzLHt3aWR0aDp0LGhlaWdodDphfSl9cmV0dXJuIHRoaXNbci4kZXh0cmFdfVtyLiR0b0hUTUxdKGUpe2lmKCF0aGlzLnZhbHVlKXJldHVybiBjLkhUTUxSZXN1bHQuRU1QVFk7dGhpc1tyLiRwdXNoUGFyYV0oKTtjb25zdCB0PXRoaXMudmFsdWVbci4kdG9IVE1MXShlKS5odG1sO2lmKCF0KXt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIGMuSFRNTFJlc3VsdC5FTVBUWX1jb25zdCBhPXRoaXMucmVzZXJ2ZTtpZih0aGlzLnJlc2VydmU8PTApe2NvbnN0e3c6dCxoOmF9PXRoaXNbci4kZ2V0RXh0cmFdKGUpO3N3aXRjaCh0aGlzLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImlubGluZSI6dGhpcy5yZXNlcnZlPXQ7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjp0aGlzLnJlc2VydmU9YX19Y29uc3Qgbj1bXTsic3RyaW5nIj09dHlwZW9mIHQ/bi5wdXNoKHtuYW1lOiIjdGV4dCIsdmFsdWU6dH0pOm4ucHVzaCh0KTtjb25zdCBpPSgwLHMudG9TdHlsZSkodGhpcywiZm9udCIsIm1hcmdpbiIsInZpc2liaWxpdHkiKTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6dGhpcy5yZXNlcnZlPjAmJihpLndpZHRoPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJlc2VydmUpKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnRoaXMucmVzZXJ2ZT4wJiYoaS5oZWlnaHQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMucmVzZXJ2ZSkpfSgwLHMuc2V0UGFyYSkodGhpcyxudWxsLHQpO3RoaXNbci4kcG9wUGFyYV0oKTt0aGlzLnJlc2VydmU9YTtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6aSxjbGFzczpbInhmYUNhcHRpb24iXX0sY2hpbGRyZW46bn0pfX1jbGFzcyBDZXJ0aWZpY2F0ZSBleHRlbmRzIG8uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImNlcnRpZmljYXRlIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIENlcnRpZmljYXRlcyBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImNlcnRpZmljYXRlcyIsITApO3RoaXMuY3JlZGVudGlhbFNlcnZlclBvbGljeT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5jcmVkZW50aWFsU2VydmVyUG9saWN5LFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXJsPWUudXJsfHwiIjt0aGlzLnVybFBvbGljeT1lLnVybFBvbGljeXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZW5jcnlwdGlvbj1udWxsO3RoaXMuaXNzdWVycz1udWxsO3RoaXMua2V5VXNhZ2U9bnVsbDt0aGlzLm9pZHM9bnVsbDt0aGlzLnNpZ25pbmc9bnVsbDt0aGlzLnN1YmplY3RETnM9bnVsbH19Y2xhc3MgQ2hlY2tCdXR0b24gZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJjaGVja0J1dHRvbiIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5tYXJrPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm1hcmssWyJkZWZhdWx0IiwiY2hlY2siLCJjaXJjbGUiLCJjcm9zcyIsImRpYW1vbmQiLCJzcXVhcmUiLCJzdGFyIl0pO3RoaXMuc2hhcGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuc2hhcGUsWyJzcXVhcmUiLCJyb3VuZCJdKTt0aGlzLnNpemU9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5zaXplLCIxMHB0Iik7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9KDAscy50b1N0eWxlKSgibWFyZ2luIiksYT0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5zaXplKTt0LndpZHRoPXQuaGVpZ2h0PWE7bGV0IG4saSxvO2NvbnN0IGw9dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpLGg9bC5pdGVtcy5jaGlsZHJlbi5sZW5ndGgmJmwuaXRlbXMuY2hpbGRyZW5bMF1bci4kdG9IVE1MXSgpLmh0bWx8fFtdLHU9e29uOih2b2lkIDAhPT1oWzBdP2hbMF06Im9uIikudG9TdHJpbmcoKSxvZmY6KHZvaWQgMCE9PWhbMV0/aFsxXToib2ZmIikudG9TdHJpbmcoKX0sZD0obC52YWx1ZT8uW3IuJHRleHRdKCl8fCJvZmYiKT09PXUub258fHZvaWQgMCxmPWxbci4kZ2V0U3ViZm9ybVBhcmVudF0oKSxnPWxbci4kdWlkXTtsZXQgcDtpZihmIGluc3RhbmNlb2YgRXhjbEdyb3VwKXtvPWZbci4kdWlkXTtuPSJyYWRpbyI7aT0ieGZhUmFkaW8iO3A9ZltyLiRkYXRhXT8uW3IuJHVpZF18fGZbci4kdWlkXX1lbHNle249ImNoZWNrYm94IjtpPSJ4ZmFDaGVja2JveCI7cD1sW3IuJGRhdGFdPy5bci4kdWlkXXx8bFtyLiR1aWRdfWNvbnN0IG09e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOntjbGFzczpbaV0sc3R5bGU6dCxmaWVsZElkOmcsZGF0YUlkOnAsdHlwZTpuLGNoZWNrZWQ6ZCx4ZmFPbjp1Lm9uLHhmYU9mZjp1Lm9mZiwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKGwpLCJhcmlhLXJlcXVpcmVkIjohMX19O28mJihtLmF0dHJpYnV0ZXMubmFtZT1vKTtpZihpc1JlcXVpcmVkKGwpKXttLmF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXT0hMDttLmF0dHJpYnV0ZXMucmVxdWlyZWQ9ITB9cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbbV19KX19Y2xhc3MgQ2hvaWNlTGlzdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImNob2ljZUxpc3QiLCEwKTt0aGlzLmNvbW1pdE9uPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmNvbW1pdE9uLFsic2VsZWN0IiwiZXhpdCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3Blbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5vcGVuLFsidXNlckNvbnRyb2wiLCJhbHdheXMiLCJtdWx0aVNlbGVjdCIsIm9uRW50cnkiXSk7dGhpcy50ZXh0RW50cnk9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnRleHRFbnRyeSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bci4kdG9IVE1MXShlKXtjb25zdCB0PSgwLHMudG9TdHlsZSkodGhpcywiYm9yZGVyIiwibWFyZ2luIiksYT10aGlzW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCksbj17Zm9udFNpemU6YGNhbGMoJHthLmZvbnQ/LnNpemV8fDEwfXB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSlgfSxpPVtdO2lmKGEuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoPjApe2NvbnN0IGU9YS5pdGVtcztsZXQgdD0wLHM9MDtpZigyPT09ZS5jaGlsZHJlbi5sZW5ndGgpe3Q9ZS5jaGlsZHJlblswXS5zYXZlO3M9MS10fWNvbnN0IG89ZS5jaGlsZHJlblt0XVtyLiR0b0hUTUxdKCkuaHRtbCxjPWUuY2hpbGRyZW5bc11bci4kdG9IVE1MXSgpLmh0bWw7bGV0IGw9ITE7Y29uc3QgaD1hLnZhbHVlPy5bci4kdGV4dF0oKXx8IiI7Zm9yKGxldCBlPTAsdD1vLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PXtuYW1lOiJvcHRpb24iLGF0dHJpYnV0ZXM6e3ZhbHVlOmNbZV18fG9bZV0sc3R5bGU6bn0sdmFsdWU6b1tlXX07Y1tlXT09PWgmJih0LmF0dHJpYnV0ZXMuc2VsZWN0ZWQ9bD0hMCk7aS5wdXNoKHQpfWx8fGkuc3BsaWNlKDAsMCx7bmFtZToib3B0aW9uIixhdHRyaWJ1dGVzOntoaWRkZW46ITAsc2VsZWN0ZWQ6ITB9LHZhbHVlOiIgIn0pfWNvbnN0IG89e2NsYXNzOlsieGZhU2VsZWN0Il0sZmllbGRJZDphW3IuJHVpZF0sZGF0YUlkOmFbci4kZGF0YV0/LltyLiR1aWRdfHxhW3IuJHVpZF0sc3R5bGU6dCwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKGEpLCJhcmlhLXJlcXVpcmVkIjohMX07aWYoaXNSZXF1aXJlZChhKSl7b1siYXJpYS1yZXF1aXJlZCJdPSEwO28ucmVxdWlyZWQ9ITB9Im11bHRpU2VsZWN0Ij09PXRoaXMub3BlbiYmKG8ubXVsdGlwbGU9ITApO3JldHVybiBjLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W3tuYW1lOiJzZWxlY3QiLGNoaWxkcmVuOmksYXR0cmlidXRlczpvfV19KX19Y2xhc3MgQ29sb3IgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJjb2xvciIsITApO3RoaXMuY1NwYWNlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmNTcGFjZSxbIlNSR0IiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy52YWx1ZT1lLnZhbHVlPygwLGMuZ2V0Q29sb3IpKGUudmFsdWUpOiIiO3RoaXMuZXh0cmFzPW51bGx9W3IuJGhhc1NldHRhYmxlVmFsdWVdKCl7cmV0dXJuITF9W3IuJHRvU3R5bGVdKCl7cmV0dXJuIHRoaXMudmFsdWU/bC5VdGlsLm1ha2VIZXhDb2xvcih0aGlzLnZhbHVlLnIsdGhpcy52YWx1ZS5nLHRoaXMudmFsdWUuYik6bnVsbH19Y2xhc3MgQ29tYiBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImNvbWIiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubnVtYmVyT2ZDZWxscz0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUubnVtYmVyT2ZDZWxscyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBDb25uZWN0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiY29ubmVjdCIsITApO3RoaXMuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMudXNhZ2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudXNhZ2UsWyJleHBvcnRBbmRJbXBvcnQiLCJleHBvcnRPbmx5IiwiaW1wb3J0T25seSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5waWN0dXJlPW51bGx9fWNsYXNzIENvbnRlbnRBcmVhIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiY29udGVudEFyZWEiLCEwKTt0aGlzLmg9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5oKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsZXZhbnQ9KDAsYy5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudz0oMCxjLmdldE1lYXN1cmVtZW50KShlLncpO3RoaXMueD0oMCxjLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpO3RoaXMueT0oMCxjLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGx9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD17bGVmdDooMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy54KSx0b3A6KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMueSksd2lkdGg6KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudyksaGVpZ2h0OigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmgpfSxhPVsieGZhQ29udGVudGFyZWEiXTsoMCxzLmlzUHJpbnRPbmx5KSh0aGlzKSYmYS5wdXNoKCJ4ZmFQcmludE9ubHkiKTtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46W10sYXR0cmlidXRlczp7c3R5bGU6dCxjbGFzczphLGlkOnRoaXNbci4kdWlkXX19KX19Y2xhc3MgQ29ybmVyIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiY29ybmVyIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmludmVydGVkPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5pbnZlcnRlZCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuam9pbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5qb2luLFsic3F1YXJlIiwicm91bmQiXSk7dGhpcy5wcmVzZW5jZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJhZGl1cz0oMCxjLmdldE1lYXN1cmVtZW50KShlLnJhZGl1cyk7dGhpcy5zdHJva2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuc3Ryb2tlLFsic29saWQiLCJkYXNoRG90IiwiZGFzaERvdERvdCIsImRhc2hlZCIsImRvdHRlZCIsImVtYm9zc2VkIiwiZXRjaGVkIiwibG93ZXJlZCIsInJhaXNlZCJdKTt0aGlzLnRoaWNrbmVzcz0oMCxjLmdldE1lYXN1cmVtZW50KShlLnRoaWNrbmVzcywiMC41cHQiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W3IuJHRvU3R5bGVdKCl7Y29uc3QgZT0oMCxzLnRvU3R5bGUpKHRoaXMsInZpc2liaWxpdHkiKTtlLnJhZGl1cz0oMCxzLm1lYXN1cmVUb1N0cmluZykoInNxdWFyZSI9PT10aGlzLmpvaW4/MDp0aGlzLnJhZGl1cyk7cmV0dXJuIGV9fWNsYXNzIERhdGVFbGVtZW50IGV4dGVuZHMgby5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImRhdGUiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT10aGlzW3IuJGNvbnRlbnRdLnRyaW0oKTt0aGlzW3IuJGNvbnRlbnRdPWU/bmV3IERhdGUoZSk6bnVsbH1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tyLiRjb250ZW50XT90aGlzW3IuJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1jbGFzcyBEYXRlVGltZSBleHRlbmRzIG8uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkYXRlVGltZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRmaW5hbGl6ZV0oKXtjb25zdCBlPXRoaXNbci4kY29udGVudF0udHJpbSgpO3RoaXNbci4kY29udGVudF09ZT9uZXcgRGF0ZShlKTpudWxsfVtyLiR0b0hUTUxdKGUpe3JldHVybiB2YWx1ZVRvSHRtbCh0aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF0udG9TdHJpbmcoKToiIil9fWNsYXNzIERhdGVUaW1lRWRpdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImRhdGVUaW1lRWRpdCIsITApO3RoaXMuaFNjcm9sbFBvbGljeT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5waWNrZXI9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucGlja2VyLFsiaG9zdCIsIm5vbmUiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jb21iPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9KDAscy50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIiksYT10aGlzW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCksbj17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGZpZWxkSWQ6YVtyLiR1aWRdLGRhdGFJZDphW3IuJGRhdGFdPy5bci4kdWlkXXx8YVtyLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6dCwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKGEpLCJhcmlhLXJlcXVpcmVkIjohMX19O2lmKGlzUmVxdWlyZWQoYSkpe24uYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO24uYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOltuXX0pfX1jbGFzcyBEZWNpbWFsIGV4dGVuZHMgby5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImRlY2ltYWwiKTt0aGlzLmZyYWNEaWdpdHM9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmZyYWNEaWdpdHMsZGVmYXVsdFZhbHVlOjIsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVhZERpZ2l0cz0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUubGVhZERpZ2l0cyxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGZpbmFsaXplXSgpe2NvbnN0IGU9cGFyc2VGbG9hdCh0aGlzW3IuJGNvbnRlbnRdLnRyaW0oKSk7dGhpc1tyLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKG51bGwhPT10aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF0udG9TdHJpbmcoKToiIil9fWNsYXNzIERlZmF1bHRVaSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImRlZmF1bHRVaSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9fWNsYXNzIERlc2MgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkZXNjIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib29sZWFuPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGVjaW1hbD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuaW1hZ2U9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIERpZ2VzdE1ldGhvZCBleHRlbmRzIG8uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImRpZ2VzdE1ldGhvZCIsWyIiLCJTSEExIiwiU0hBMjU2IiwiU0hBNTEyIiwiUklQRU1EMTYwIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBEaWdlc3RNZXRob2RzIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZGlnZXN0TWV0aG9kcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmRpZ2VzdE1ldGhvZD1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgRHJhdyBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImRyYXciLCEwKTt0aGlzLmFuY2hvclR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKTt0aGlzLmNvbFNwYW49KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSk7dGhpcy5oPWUuaD8oMCxjLmdldE1lYXN1cmVtZW50KShlLmgpOiIiO3RoaXMuaEFsaWduPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxvY2FsZT1lLmxvY2FsZXx8IiI7dGhpcy5tYXhIPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0Iik7dGhpcy5tYXhXPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0Iik7dGhpcy5taW5IPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0Iik7dGhpcy5taW5XPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMucm90YXRlPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yb3RhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZSU5MD09MH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53PygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUudyk6IiI7dGhpcy54PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0Iik7dGhpcy55PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY2FwdGlvbj1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5mb250PW51bGw7dGhpcy5rZWVwPW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLnBhcmE9bnVsbDt0aGlzLnRyYXZlcnNhbD1udWxsO3RoaXMudWk9bnVsbDt0aGlzLnZhbHVlPW51bGw7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgby5YRkFPYmplY3RBcnJheX1bci4kc2V0VmFsdWVdKGUpe19zZXRWYWx1ZSh0aGlzLGUpfVtyLiR0b0hUTUxdKGUpe3NldFRhYkluZGV4KHRoaXMpO2lmKCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2UpcmV0dXJuIGMuSFRNTFJlc3VsdC5FTVBUWTsoMCxzLmZpeERpbWVuc2lvbnMpKHRoaXMpO3RoaXNbci4kcHVzaFBhcmFdKCk7Y29uc3QgdD10aGlzLncsYT10aGlzLmgse3c6bixoOm8saXNCcm9rZW46bH09KDAscy5sYXlvdXROb2RlKSh0aGlzLGUpO2lmKG4mJiIiPT09dGhpcy53KXtpZihsJiZ0aGlzW3IuJGdldFN1YmZvcm1QYXJlbnRdKClbci4kaXNUaGVyZU1vcmVXaWR0aF0oKSl7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBjLkhUTUxSZXN1bHQuRkFJTFVSRX10aGlzLnc9bn1vJiYiIj09PXRoaXMuaCYmKHRoaXMuaD1vKTtzZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtpZighKDAsaS5jaGVja0RpbWVuc2lvbnMpKHRoaXMsZSkpe3RoaXMudz10O3RoaXMuaD1hO3RoaXNbci4kcG9wUGFyYV0oKTtyZXR1cm4gYy5IVE1MUmVzdWx0LkZBSUxVUkV9dW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtjb25zdCBoPSgwLHMudG9TdHlsZSkodGhpcywiZm9udCIsImhBbGlnbiIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwicm90YXRlIiwiYW5jaG9yVHlwZSIsImJvcmRlciIsIm1hcmdpbiIpOygwLHMuc2V0TWluTWF4RGltZW5zaW9ucykodGhpcyxoKTtpZihoLm1hcmdpbil7aC5wYWRkaW5nPWgubWFyZ2luO2RlbGV0ZSBoLm1hcmdpbn1jb25zdCB1PVsieGZhRHJhdyJdO3RoaXMuZm9udCYmdS5wdXNoKCJ4ZmFGb250Iik7KDAscy5pc1ByaW50T25seSkodGhpcykmJnUucHVzaCgieGZhUHJpbnRPbmx5Iik7Y29uc3QgZD17c3R5bGU6aCxpZDp0aGlzW3IuJHVpZF0sY2xhc3M6dX07dGhpcy5uYW1lJiYoZC54ZmFOYW1lPXRoaXMubmFtZSk7Y29uc3QgZj17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmQsY2hpbGRyZW46W119O2FwcGx5QXNzaXN0KHRoaXMsZCk7Y29uc3QgZz0oMCxzLmNvbXB1dGVCYm94KSh0aGlzLGYsZSkscD10aGlzLnZhbHVlP3RoaXMudmFsdWVbci4kdG9IVE1MXShlKS5odG1sOm51bGw7aWYobnVsbD09PXApe3RoaXMudz10O3RoaXMuaD1hO3RoaXNbci4kcG9wUGFyYV0oKTtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAscy5jcmVhdGVXcmFwcGVyKSh0aGlzLGYpLGcpfWYuY2hpbGRyZW4ucHVzaChwKTsoMCxzLnNldFBhcmEpKHRoaXMsaCxwKTt0aGlzLnc9dDt0aGlzLmg9YTt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyxmKSxnKX19Y2xhc3MgRWRnZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImVkZ2UiLCEwKTt0aGlzLmNhcD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5jYXAsWyJzcXVhcmUiLCJidXR0Iiwicm91bmQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnByZXNlbmNlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMuc3Ryb2tlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnN0cm9rZSxbInNvbGlkIiwiZGFzaERvdCIsImRhc2hEb3REb3QiLCJkYXNoZWQiLCJkb3R0ZWQiLCJlbWJvc3NlZCIsImV0Y2hlZCIsImxvd2VyZWQiLCJyYWlzZWQiXSk7dGhpcy50aGlja25lc3M9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS50aGlja25lc3MsIjAuNXB0Iik7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXSgpe2NvbnN0IGU9KDAscy50b1N0eWxlKSh0aGlzLCJ2aXNpYmlsaXR5Iik7T2JqZWN0LmFzc2lnbihlLHtsaW5lY2FwOnRoaXMuY2FwLHdpZHRoOigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnRoaWNrbmVzcyksY29sb3I6dGhpcy5jb2xvcj90aGlzLmNvbG9yW3IuJHRvU3R5bGVdKCk6IiMwMDAwMDAiLHN0eWxlOiIifSk7aWYoInZpc2libGUiIT09dGhpcy5wcmVzZW5jZSllLnN0eWxlPSJub25lIjtlbHNlIHN3aXRjaCh0aGlzLnN0cm9rZSl7Y2FzZSJzb2xpZCI6ZS5zdHlsZT0ic29saWQiO2JyZWFrO2Nhc2UiZGFzaERvdCI6Y2FzZSJkYXNoRG90RG90IjpjYXNlImRhc2hlZCI6ZS5zdHlsZT0iZGFzaGVkIjticmVhaztjYXNlImRvdHRlZCI6ZS5zdHlsZT0iZG90dGVkIjticmVhaztjYXNlImVtYm9zc2VkIjplLnN0eWxlPSJyaWRnZSI7YnJlYWs7Y2FzZSJldGNoZWQiOmUuc3R5bGU9Imdyb292ZSI7YnJlYWs7Y2FzZSJsb3dlcmVkIjplLnN0eWxlPSJpbnNldCI7YnJlYWs7Y2FzZSJyYWlzZWQiOmUuc3R5bGU9Im91dHNldCJ9cmV0dXJuIGV9fWNsYXNzIEVuY29kaW5nIGV4dGVuZHMgby5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZW5jb2RpbmciLFsiYWRiZS54NTA5LnJzYV9zaGExIiwiYWRiZS5wa2NzNy5kZXRhY2hlZCIsImFkYmUucGtjczcuc2hhMSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgRW5jb2RpbmdzIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZW5jb2RpbmdzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZW5jb2Rpbmc9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEVuY3J5cHQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJlbmNyeXB0IiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jZXJ0aWZpY2F0ZT1udWxsfX1jbGFzcyBFbmNyeXB0RGF0YSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImVuY3J5cHREYXRhIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm9wZXJhdGlvbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJlbmNyeXB0IiwiZGVjcnlwdCJdKTt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZmlsdGVyPW51bGw7dGhpcy5tYW5pZmVzdD1udWxsfX1jbGFzcyBFbmNyeXB0aW9uIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZW5jcnlwdGlvbiIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBFbmNyeXB0aW9uTWV0aG9kIGV4dGVuZHMgby5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZW5jcnlwdGlvbk1ldGhvZCIsWyIiLCJBRVMyNTYtQ0JDIiwiVFJJUExFREVTLUNCQyIsIkFFUzEyOC1DQkMiLCJBRVMxOTItQ0JDIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBFbmNyeXB0aW9uTWV0aG9kcyBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImVuY3J5cHRpb25NZXRob2RzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZW5jcnlwdGlvbk1ldGhvZD1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgRXZlbnQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJldmVudCIsITApO3RoaXMuYWN0aXZpdHk9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYWN0aXZpdHksWyJjbGljayIsImNoYW5nZSIsImRvY0Nsb3NlIiwiZG9jUmVhZHkiLCJlbnRlciIsImV4aXQiLCJmdWxsIiwiaW5kZXhDaGFuZ2UiLCJpbml0aWFsaXplIiwibW91c2VEb3duIiwibW91c2VFbnRlciIsIm1vdXNlRXhpdCIsIm1vdXNlVXAiLCJwb3N0RXhlY3V0ZSIsInBvc3RPcGVuIiwicG9zdFByaW50IiwicG9zdFNhdmUiLCJwb3N0U2lnbiIsInBvc3RTdWJtaXQiLCJwcmVFeGVjdXRlIiwicHJlT3BlbiIsInByZVByaW50IiwicHJlU2F2ZSIsInByZVNpZ24iLCJwcmVTdWJtaXQiLCJyZWFkeSIsInZhbGlkYXRpb25TdGF0ZSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGlzdGVuPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmxpc3RlbixbInJlZk9ubHkiLCJyZWZBbmREZXNjZW5kZW50cyJdKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5lbmNyeXB0RGF0YT1udWxsO3RoaXMuZXhlY3V0ZT1udWxsO3RoaXMuc2NyaXB0PW51bGw7dGhpcy5zaWduRGF0YT1udWxsO3RoaXMuc3VibWl0PW51bGx9fWNsYXNzIEV4RGF0YSBleHRlbmRzIG8uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJleERhdGEiKTt0aGlzLmNvbnRlbnRUeXBlPWUuY29udGVudFR5cGV8fCIiO3RoaXMuaHJlZj1lLmhyZWZ8fCIiO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5tYXhMZW5ndGg9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heExlbmd0aCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49LTF9KTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJpZD1lLnJpZHx8IiI7dGhpcy50cmFuc2ZlckVuY29kaW5nPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnRyYW5zZmVyRW5jb2RpbmcsWyJub25lIiwiYmFzZTY0IiwicGFja2FnZSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGlzQ0RBVEFYbWxdKCl7cmV0dXJuInRleHQvaHRtbCI9PT10aGlzLmNvbnRlbnRUeXBlfVtyLiRvbkNoaWxkXShlKXtpZigidGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJmVbci4kbmFtZXNwYWNlSWRdPT09bi5OYW1lc3BhY2VJZHMueGh0bWwuaWQpe3RoaXNbci4kY29udGVudF09ZTtyZXR1cm4hMH1pZigidGV4dC94bWwiPT09dGhpcy5jb250ZW50VHlwZSl7dGhpc1tyLiRjb250ZW50XT1lO3JldHVybiEwfXJldHVybiExfVtyLiR0b0hUTUxdKGUpe3JldHVybiJ0ZXh0L2h0bWwiPT09dGhpcy5jb250ZW50VHlwZSYmdGhpc1tyLiRjb250ZW50XT90aGlzW3IuJGNvbnRlbnRdW3IuJHRvSFRNTF0oZSk6Yy5IVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBFeE9iamVjdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImV4T2JqZWN0IiwhMCk7dGhpcy5hcmNoaXZlPWUuYXJjaGl2ZXx8IiI7dGhpcy5jbGFzc0lkPWUuY2xhc3NJZHx8IiI7dGhpcy5jb2RlQmFzZT1lLmNvZGVCYXNlfHwiIjt0aGlzLmNvZGVUeXBlPWUuY29kZVR5cGV8fCIiO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5ib29sZWFuPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGVjaW1hbD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV4T2JqZWN0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZmxvYXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgRXhjbEdyb3VwIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZXhjbEdyb3VwIiwhMCk7dGhpcy5hY2Nlc3M9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYWNjZXNzLFsib3BlbiIsIm5vbkludGVyYWN0aXZlIiwicHJvdGVjdGVkIiwicmVhZE9ubHkiXSk7dGhpcy5hY2Nlc3NLZXk9ZS5hY2Nlc3NLZXl8fCIiO3RoaXMuYW5jaG9yVHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5hbmNob3JUeXBlLFsidG9wTGVmdCIsImJvdHRvbUNlbnRlciIsImJvdHRvbUxlZnQiLCJib3R0b21SaWdodCIsIm1pZGRsZUNlbnRlciIsIm1pZGRsZUxlZnQiLCJtaWRkbGVSaWdodCIsInRvcENlbnRlciIsInRvcFJpZ2h0Il0pO3RoaXMuY29sU3Bhbj0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmg9ZS5oPygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiI7dGhpcy5oQWxpZ249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGF5b3V0PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmxheW91dCxbInBvc2l0aW9uIiwibHItdGIiLCJybC1yb3ciLCJybC10YiIsInJvdyIsInRhYmxlIiwidGIiXSk7dGhpcy5tYXhIPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0Iik7dGhpcy5tYXhXPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0Iik7dGhpcy5taW5IPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0Iik7dGhpcy5taW5XPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53PygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUudyk6IiI7dGhpcy54PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0Iik7dGhpcy55PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJpbmQ9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY2FsY3VsYXRlPW51bGw7dGhpcy5jYXB0aW9uPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudHJhdmVyc2FsPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMuY29ubmVjdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV2ZW50PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgby5YRkFPYmplY3RBcnJheX1bci4kaXNCaW5kYWJsZV0oKXtyZXR1cm4hMH1bci4kaGFzU2V0dGFibGVWYWx1ZV0oKXtyZXR1cm4hMH1bci4kc2V0VmFsdWVdKGUpe2Zvcihjb25zdCB0IG9mIHRoaXMuZmllbGQuY2hpbGRyZW4pe2lmKCF0LnZhbHVlKXtjb25zdCBlPW5ldyBWYWx1ZSh7fSk7dFtyLiRhcHBlbmRDaGlsZF0oZSk7dC52YWx1ZT1lfXQudmFsdWVbci4kc2V0VmFsdWVdKGUpfX1bci4kaXNUaGVyZU1vcmVXaWR0aF0oKXtyZXR1cm4gdGhpcy5sYXlvdXQuZW5kc1dpdGgoIi10YiIpJiYwPT09dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCYmdGhpc1tyLiRleHRyYV0ubnVtYmVySW5MaW5lPjB8fHRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGlzVGhlcmVNb3JlV2lkdGhdKCl9W3IuJGlzU3BsaXR0YWJsZV0oKXtjb25zdCBlPXRoaXNbci4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpZighZVtyLiRpc1NwbGl0dGFibGVdKCkpcmV0dXJuITE7aWYodm9pZCAwIT09dGhpc1tyLiRleHRyYV0uX2lzU3BsaXR0YWJsZSlyZXR1cm4gdGhpc1tyLiRleHRyYV0uX2lzU3BsaXR0YWJsZTtpZigicG9zaXRpb24iPT09dGhpcy5sYXlvdXR8fHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7dGhpc1tyLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMTtyZXR1cm4hMX1pZihlLmxheW91dD8uZW5kc1dpdGgoIi10YiIpJiYwIT09ZVtyLiRleHRyYV0ubnVtYmVySW5MaW5lKXJldHVybiExO3RoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITA7cmV0dXJuITB9W3IuJGZsdXNoSFRNTF0oKXtyZXR1cm4oMCxpLmZsdXNoSFRNTCkodGhpcyl9W3IuJGFkZEhUTUxdKGUsdCl7KDAsaS5hZGRIVE1MKSh0aGlzLGUsdCl9W3IuJGdldEF2YWlsYWJsZVNwYWNlXSgpe3JldHVybigwLGkuZ2V0QXZhaWxhYmxlU3BhY2UpKHRoaXMpfVtyLiR0b0hUTUxdKGUpe3NldFRhYkluZGV4KHRoaXMpO2lmKCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2V8fDA9PT10aGlzLmh8fDA9PT10aGlzLncpcmV0dXJuIGMuSFRNTFJlc3VsdC5FTVBUWTsoMCxzLmZpeERpbWVuc2lvbnMpKHRoaXMpO2NvbnN0IHQ9W10sYT17aWQ6dGhpc1tyLiR1aWRdLGNsYXNzOltdfTsoMCxzLnNldEFjY2VzcykodGhpcyxhLmNsYXNzKTt0aGlzW3IuJGV4dHJhXXx8KHRoaXNbci4kZXh0cmFdPU9iamVjdC5jcmVhdGUobnVsbCkpO09iamVjdC5hc3NpZ24odGhpc1tyLiRleHRyYV0se2NoaWxkcmVuOnQsYXR0cmlidXRlczphLGF0dGVtcHQ6MCxsaW5lOm51bGwsbnVtYmVySW5MaW5lOjAsYXZhaWxhYmxlU3BhY2U6e3dpZHRoOk1hdGgubWluKHRoaXMud3x8MS8wLGUud2lkdGgpLGhlaWdodDpNYXRoLm1pbih0aGlzLmh8fDEvMCxlLmhlaWdodCl9LHdpZHRoOjAsaGVpZ2h0OjAscHJldkhlaWdodDowLGN1cnJlbnRXaWR0aDowfSk7Y29uc3Qgbj10aGlzW3IuJGlzU3BsaXR0YWJsZV0oKTtufHxzZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtpZighKDAsaS5jaGVja0RpbWVuc2lvbnMpKHRoaXMsZSkpcmV0dXJuIGMuSFRNTFJlc3VsdC5GQUlMVVJFO2NvbnN0IG89bmV3IFNldChbImZpZWxkIl0pO2lmKHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgZT10aGlzW3IuJGdldFN1YmZvcm1QYXJlbnRdKCkuY29sdW1uV2lkdGhzO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApe3RoaXNbci4kZXh0cmFdLmNvbHVtbldpZHRocz1lO3RoaXNbci4kZXh0cmFdLmN1cnJlbnRDb2x1bW49MH19Y29uc3QgbD0oMCxzLnRvU3R5bGUpKHRoaXMsImFuY2hvclR5cGUiLCJkaW1lbnNpb25zIiwicG9zaXRpb24iLCJwcmVzZW5jZSIsImJvcmRlciIsIm1hcmdpbiIsImhBbGlnbiIpLGg9WyJ4ZmFFeGNsZ3JvdXAiXSx1PSgwLHMubGF5b3V0Q2xhc3MpKHRoaXMpO3UmJmgucHVzaCh1KTsoMCxzLmlzUHJpbnRPbmx5KSh0aGlzKSYmaC5wdXNoKCJ4ZmFQcmludE9ubHkiKTthLnN0eWxlPWw7YS5jbGFzcz1oO3RoaXMubmFtZSYmKGEueGZhTmFtZT10aGlzLm5hbWUpO3RoaXNbci4kcHVzaFBhcmFdKCk7Y29uc3QgZD0ibHItdGIiPT09dGhpcy5sYXlvdXR8fCJybC10YiI9PT10aGlzLmxheW91dCxmPWQ/MjoxO2Zvcig7dGhpc1tyLiRleHRyYV0uYXR0ZW1wdDxmO3RoaXNbci4kZXh0cmFdLmF0dGVtcHQrKyl7ZCYmMT09PXRoaXNbci4kZXh0cmFdLmF0dGVtcHQmJih0aGlzW3IuJGV4dHJhXS5udW1iZXJJbkxpbmU9MCk7Y29uc3QgZT10aGlzW3IuJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm8saW5jbHVkZTohMH0pO2lmKGUuc3VjY2VzcylicmVhaztpZihlLmlzQnJlYWsoKSl7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBlfWlmKGQmJjA9PT10aGlzW3IuJGV4dHJhXS5hdHRlbXB0JiYwPT09dGhpc1tyLiRleHRyYV0ubnVtYmVySW5MaW5lJiYhdGhpc1tyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSl7dGhpc1tyLiRleHRyYV0uYXR0ZW1wdD1mO2JyZWFrfX10aGlzW3IuJHBvcFBhcmFdKCk7bnx8dW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtpZih0aGlzW3IuJGV4dHJhXS5hdHRlbXB0PT09Zil7bnx8ZGVsZXRlIHRoaXNbci4kZXh0cmFdO3JldHVybiBjLkhUTUxSZXN1bHQuRkFJTFVSRX1sZXQgZz0wLHA9MDtpZih0aGlzLm1hcmdpbil7Zz10aGlzLm1hcmdpbi5sZWZ0SW5zZXQrdGhpcy5tYXJnaW4ucmlnaHRJbnNldDtwPXRoaXMubWFyZ2luLnRvcEluc2V0K3RoaXMubWFyZ2luLmJvdHRvbUluc2V0fWNvbnN0IG09TWF0aC5tYXgodGhpc1tyLiRleHRyYV0ud2lkdGgrZyx0aGlzLnd8fDApLGI9TWF0aC5tYXgodGhpc1tyLiRleHRyYV0uaGVpZ2h0K3AsdGhpcy5ofHwwKSx5PVt0aGlzLngsdGhpcy55LG0sYl07IiI9PT10aGlzLncmJihsLndpZHRoPSgwLHMubWVhc3VyZVRvU3RyaW5nKShtKSk7IiI9PT10aGlzLmgmJihsLmhlaWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykoYikpO2NvbnN0IHc9e25hbWU6ImRpdiIsYXR0cmlidXRlczphLGNoaWxkcmVuOnR9O2FwcGx5QXNzaXN0KHRoaXMsYSk7ZGVsZXRlIHRoaXNbci4kZXh0cmFdO3JldHVybiBjLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsdykseSl9fWNsYXNzIEV4ZWN1dGUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJleGVjdXRlIik7dGhpcy5jb25uZWN0aW9uPWUuY29ubmVjdGlvbnx8IiI7dGhpcy5leGVjdXRlVHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5leGVjdXRlVHlwZSxbImltcG9ydCIsInJlbWVyZ2UiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnJ1bkF0PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnJ1bkF0LFsiY2xpZW50IiwiYm90aCIsInNlcnZlciJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEV4dHJhcyBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImV4dHJhcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9vbGVhbj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5leHRyYXM9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuaW50ZWdlcj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBGaWVsZCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImZpZWxkIiwhMCk7dGhpcy5hY2Nlc3M9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYWNjZXNzLFsib3BlbiIsIm5vbkludGVyYWN0aXZlIiwicHJvdGVjdGVkIiwicmVhZE9ubHkiXSk7dGhpcy5hY2Nlc3NLZXk9ZS5hY2Nlc3NLZXl8fCIiO3RoaXMuYW5jaG9yVHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5hbmNob3JUeXBlLFsidG9wTGVmdCIsImJvdHRvbUNlbnRlciIsImJvdHRvbUxlZnQiLCJib3R0b21SaWdodCIsIm1pZGRsZUNlbnRlciIsIm1pZGRsZUxlZnQiLCJtaWRkbGVSaWdodCIsInRvcENlbnRlciIsInRvcFJpZ2h0Il0pO3RoaXMuY29sU3Bhbj0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmg9ZS5oPygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiI7dGhpcy5oQWxpZ249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubG9jYWxlPWUubG9jYWxlfHwiIjt0aGlzLm1heEg9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKTt0aGlzLm1heFc9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKTt0aGlzLm1pbkg9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKTt0aGlzLm1pblc9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnByZXNlbmNlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVsZXZhbnQ9KDAsYy5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy5yb3RhdGU9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJvdGF0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lJTkwPT0wfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudz1lLnc/KDAsYy5nZXRNZWFzdXJlbWVudCkoZS53KToiIjt0aGlzLng9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKTt0aGlzLnk9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKTt0aGlzLmFzc2lzdD1udWxsO3RoaXMuYmluZD1udWxsO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jYWxjdWxhdGU9bnVsbDt0aGlzLmNhcHRpb249bnVsbDt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZm9udD1udWxsO3RoaXMuZm9ybWF0PW51bGw7dGhpcy5pdGVtcz1uZXcgby5YRkFPYmplY3RBcnJheSgyKTt0aGlzLmtlZXA9bnVsbDt0aGlzLm1hcmdpbj1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudHJhdmVyc2FsPW51bGw7dGhpcy51aT1udWxsO3RoaXMudmFsaWRhdGU9bnVsbDt0aGlzLnZhbHVlPW51bGw7dGhpcy5iaW5kSXRlbXM9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5jb25uZWN0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZXZlbnQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgby5YRkFPYmplY3RBcnJheX1bci4kaXNCaW5kYWJsZV0oKXtyZXR1cm4hMH1bci4kc2V0VmFsdWVdKGUpe19zZXRWYWx1ZSh0aGlzLGUpfVtyLiR0b0hUTUxdKGUpe3NldFRhYkluZGV4KHRoaXMpO2lmKCF0aGlzLnVpKXt0aGlzLnVpPW5ldyBVaSh7fSk7dGhpcy51aVtyLiRnbG9iYWxEYXRhXT10aGlzW3IuJGdsb2JhbERhdGFdO3RoaXNbci4kYXBwZW5kQ2hpbGRdKHRoaXMudWkpO2xldCBlO3N3aXRjaCh0aGlzLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCl7Y2FzZSAwOmU9bmV3IFRleHRFZGl0KHt9KTt0aGlzLnVpLnRleHRFZGl0PWU7YnJlYWs7Y2FzZSAxOmU9bmV3IENoZWNrQnV0dG9uKHt9KTt0aGlzLnVpLmNoZWNrQnV0dG9uPWU7YnJlYWs7Y2FzZSAyOmU9bmV3IENob2ljZUxpc3Qoe30pO3RoaXMudWkuY2hvaWNlTGlzdD1lfXRoaXMudWlbci4kYXBwZW5kQ2hpbGRdKGUpfWlmKCF0aGlzLnVpfHwiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlfHwwPT09dGhpcy5ofHwwPT09dGhpcy53KXJldHVybiBjLkhUTUxSZXN1bHQuRU1QVFk7dGhpcy5jYXB0aW9uJiZkZWxldGUgdGhpcy5jYXB0aW9uW3IuJGV4dHJhXTt0aGlzW3IuJHB1c2hQYXJhXSgpO2NvbnN0IHQ9dGhpcy5jYXB0aW9uP3RoaXMuY2FwdGlvbltyLiR0b0hUTUxdKGUpLmh0bWw6bnVsbCxhPXRoaXMudyxuPXRoaXMuaDtsZXQgbz0wLGw9MDtpZih0aGlzLm1hcmdpbil7bz10aGlzLm1hcmdpbi5sZWZ0SW5zZXQrdGhpcy5tYXJnaW4ucmlnaHRJbnNldDtsPXRoaXMubWFyZ2luLnRvcEluc2V0K3RoaXMubWFyZ2luLmJvdHRvbUluc2V0fWxldCB1PW51bGw7aWYoIiI9PT10aGlzLnd8fCIiPT09dGhpcy5oKXtsZXQgdD1udWxsLGE9bnVsbCxuPTAsaT0wO2lmKHRoaXMudWkuY2hlY2tCdXR0b24pbj1pPXRoaXMudWkuY2hlY2tCdXR0b24uc2l6ZTtlbHNle2NvbnN0e3c6dCxoOmF9PSgwLHMubGF5b3V0Tm9kZSkodGhpcyxlKTtpZihudWxsIT09dCl7bj10O2k9YX1lbHNlIGk9KDAsaC5nZXRNZXRyaWNzKSh0aGlzLmZvbnQsITApLmxpbmVOb0dhcH11PWdldEJvcmRlckRpbXModGhpcy51aVtyLiRnZXRFeHRyYV0oKSk7bis9dS53O2krPXUuaDtpZih0aGlzLmNhcHRpb24pe2NvbnN0e3c6cyxoOm8saXNCcm9rZW46bH09dGhpcy5jYXB0aW9uW3IuJGdldEV4dHJhXShlKTtpZihsJiZ0aGlzW3IuJGdldFN1YmZvcm1QYXJlbnRdKClbci4kaXNUaGVyZU1vcmVXaWR0aF0oKSl7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBjLkhUTUxSZXN1bHQuRkFJTFVSRX10PXM7YT1vO3N3aXRjaCh0aGlzLmNhcHRpb24ucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiaW5saW5lIjp0Kz1uO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6YSs9aX19ZWxzZXt0PW47YT1pfWlmKHQmJiIiPT09dGhpcy53KXt0Kz1vO3RoaXMudz1NYXRoLm1pbih0aGlzLm1heFc8PTA/MS8wOnRoaXMubWF4Vyx0aGlzLm1pblcrMTx0P3Q6dGhpcy5taW5XKX1pZihhJiYiIj09PXRoaXMuaCl7YSs9bDt0aGlzLmg9TWF0aC5taW4odGhpcy5tYXhIPD0wPzEvMDp0aGlzLm1heEgsdGhpcy5taW5IKzE8YT9hOnRoaXMubWluSCl9fXRoaXNbci4kcG9wUGFyYV0oKTsoMCxzLmZpeERpbWVuc2lvbnMpKHRoaXMpO3NldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSl7dGhpcy53PWE7dGhpcy5oPW47dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBjLkhUTUxSZXN1bHQuRkFJTFVSRX11bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2NvbnN0IGQ9KDAscy50b1N0eWxlKSh0aGlzLCJmb250IiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicm90YXRlIiwiYW5jaG9yVHlwZSIsInByZXNlbmNlIiwibWFyZ2luIiwiaEFsaWduIik7KDAscy5zZXRNaW5NYXhEaW1lbnNpb25zKSh0aGlzLGQpO2NvbnN0IGY9WyJ4ZmFGaWVsZCJdO3RoaXMuZm9udCYmZi5wdXNoKCJ4ZmFGb250Iik7KDAscy5pc1ByaW50T25seSkodGhpcykmJmYucHVzaCgieGZhUHJpbnRPbmx5Iik7Y29uc3QgZz17c3R5bGU6ZCxpZDp0aGlzW3IuJHVpZF0sY2xhc3M6Zn07aWYoZC5tYXJnaW4pe2QucGFkZGluZz1kLm1hcmdpbjtkZWxldGUgZC5tYXJnaW59KDAscy5zZXRBY2Nlc3MpKHRoaXMsZik7dGhpcy5uYW1lJiYoZy54ZmFOYW1lPXRoaXMubmFtZSk7Y29uc3QgcD1bXSxtPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZyxjaGlsZHJlbjpwfTthcHBseUFzc2lzdCh0aGlzLGcpO2NvbnN0IGI9dGhpcy5ib3JkZXI/dGhpcy5ib3JkZXJbci4kdG9TdHlsZV0oKTpudWxsLHk9KDAscy5jb21wdXRlQmJveCkodGhpcyxtLGUpLHc9dGhpcy51aVtyLiR0b0hUTUxdKCkuaHRtbDtpZighdyl7T2JqZWN0LmFzc2lnbihkLGIpO3JldHVybiBjLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsbSkseSl9dGhpc1tyLiR0YWJJbmRleF0mJih3LmNoaWxkcmVuPy5bMF0/dy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnRhYmluZGV4PXRoaXNbci4kdGFiSW5kZXhdOncuYXR0cmlidXRlcy50YWJpbmRleD10aGlzW3IuJHRhYkluZGV4XSk7dy5hdHRyaWJ1dGVzLnN0eWxlfHwody5hdHRyaWJ1dGVzLnN0eWxlPU9iamVjdC5jcmVhdGUobnVsbCkpO2xldCBTPW51bGw7aWYodGhpcy51aS5idXR0b24pezE9PT13LmNoaWxkcmVuLmxlbmd0aCYmKFtTXT13LmNoaWxkcmVuLnNwbGljZSgwLDEpKTtPYmplY3QuYXNzaWduKHcuYXR0cmlidXRlcy5zdHlsZSxiKX1lbHNlIE9iamVjdC5hc3NpZ24oZCxiKTtwLnB1c2godyk7aWYodGhpcy52YWx1ZSlpZih0aGlzLnVpLmltYWdlRWRpdCl3LmNoaWxkcmVuLnB1c2godGhpcy52YWx1ZVtyLiR0b0hUTUxdKCkuaHRtbCk7ZWxzZSBpZighdGhpcy51aS5idXR0b24pe2xldCBlPSIiO2lmKHRoaXMudmFsdWUuZXhEYXRhKWU9dGhpcy52YWx1ZS5leERhdGFbci4kdGV4dF0oKTtlbHNlIGlmKHRoaXMudmFsdWUudGV4dCllPXRoaXMudmFsdWUudGV4dFtyLiRnZXRFeHRyYV0oKTtlbHNle2NvbnN0IHQ9dGhpcy52YWx1ZVtyLiR0b0hUTUxdKCkuaHRtbDtudWxsIT09dCYmKGU9dC5jaGlsZHJlblswXS52YWx1ZSl9dGhpcy51aS50ZXh0RWRpdCYmdGhpcy52YWx1ZS50ZXh0Py5tYXhDaGFycyYmKHcuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5tYXhMZW5ndGg9dGhpcy52YWx1ZS50ZXh0Lm1heENoYXJzKTtpZihlKXtpZih0aGlzLnVpLm51bWVyaWNFZGl0KXtlPXBhcnNlRmxvYXQoZSk7ZT1pc05hTihlKT8iIjplLnRvU3RyaW5nKCl9InRleHRhcmVhIj09PXcuY2hpbGRyZW5bMF0ubmFtZT93LmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGV4dENvbnRlbnQ9ZTp3LmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudmFsdWU9ZX19aWYoIXRoaXMudWkuaW1hZ2VFZGl0JiZ3LmNoaWxkcmVuPy5bMF0mJnRoaXMuaCl7dT11fHxnZXRCb3JkZXJEaW1zKHRoaXMudWlbci4kZ2V0RXh0cmFdKCkpO2xldCB0PTA7aWYodGhpcy5jYXB0aW9uJiZbInRvcCIsImJvdHRvbSJdLmluY2x1ZGVzKHRoaXMuY2FwdGlvbi5wbGFjZW1lbnQpKXt0PXRoaXMuY2FwdGlvbi5yZXNlcnZlO3Q8PTAmJih0PXRoaXMuY2FwdGlvbltyLiRnZXRFeHRyYV0oZSkuaCk7Y29uc3QgYT10aGlzLmgtdC1sLXUuaDt3LmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKShhKX1lbHNlIHcuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9IjEwMCUifVMmJncuY2hpbGRyZW4ucHVzaChTKTtpZighdCl7dy5hdHRyaWJ1dGVzLmNsYXNzJiZ3LmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhTGVmdCIpO3RoaXMudz1hO3RoaXMuaD1uO3JldHVybiBjLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsbSkseSl9aWYodGhpcy51aS5idXR0b24pe2QucGFkZGluZyYmZGVsZXRlIGQucGFkZGluZzsiZGl2Ij09PXQubmFtZSYmKHQubmFtZT0ic3BhbiIpO3cuY2hpbGRyZW4ucHVzaCh0KTtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3MobSx5KX10aGlzLnVpLmNoZWNrQnV0dG9uJiYodC5hdHRyaWJ1dGVzLmNsYXNzWzBdPSJ4ZmFDYXB0aW9uRm9yQ2hlY2tCdXR0b24iKTt3LmF0dHJpYnV0ZXMuY2xhc3N8fCh3LmF0dHJpYnV0ZXMuY2xhc3M9W10pO3cuY2hpbGRyZW4uc3BsaWNlKDAsMCx0KTtzd2l0Y2godGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlImlubGluZSI6dy5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTticmVhaztjYXNlInJpZ2h0Ijp3LmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhUmlnaHQiKTticmVhaztjYXNlInRvcCI6dy5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYVRvcCIpO2JyZWFrO2Nhc2UiYm90dG9tIjp3LmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhQm90dG9tIil9dGhpcy53PWE7dGhpcy5oPW47cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyxtKSx5KX19dC5GaWVsZD1GaWVsZDtjbGFzcyBGaWxsIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZmlsbCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wcmVzZW5jZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5saW5lYXI9bnVsbDt0aGlzLnBhdHRlcm49bnVsbDt0aGlzLnJhZGlhbD1udWxsO3RoaXMuc29saWQ9bnVsbDt0aGlzLnN0aXBwbGU9bnVsbH1bci4kdG9TdHlsZV0oKXtjb25zdCBlPXRoaXNbci4kZ2V0UGFyZW50XSgpLHQ9ZVtyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgbj0iY29sb3IiLGk9bjtpZihlIGluc3RhbmNlb2YgQm9yZGVyKXtuPSJiYWNrZ3JvdW5kLWNvbG9yIjtpPSJiYWNrZ3JvdW5kIjt0IGluc3RhbmNlb2YgVWkmJihhLmJhY2tncm91bmRDb2xvcj0id2hpdGUiKX1pZihlIGluc3RhbmNlb2YgUmVjdGFuZ2xlfHxlIGluc3RhbmNlb2YgQXJjKXtuPWk9ImZpbGwiO2EuZmlsbD0id2hpdGUifWZvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZigiZXh0cmFzIj09PWV8fCJjb2xvciI9PT1lKWNvbnRpbnVlO2NvbnN0IHQ9dGhpc1tlXTtpZighKHQgaW5zdGFuY2VvZiBvLlhGQU9iamVjdCkpY29udGludWU7Y29uc3Qgcz10W3IuJHRvU3R5bGVdKHRoaXMuY29sb3IpO3MmJihhW3Muc3RhcnRzV2l0aCgiIyIpP246aV09cyk7cmV0dXJuIGF9aWYodGhpcy5jb2xvcj8udmFsdWUpe2NvbnN0IGU9dGhpcy5jb2xvcltyLiR0b1N0eWxlXSgpO2FbZS5zdGFydHNXaXRoKCIjIik/bjppXT1lfXJldHVybiBhfX1jbGFzcyBGaWx0ZXIgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJmaWx0ZXIiLCEwKTt0aGlzLmFkZFJldm9jYXRpb25JbmZvPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmFkZFJldm9jYXRpb25JbmZvLFsiIiwicmVxdWlyZWQiLCJvcHRpb25hbCIsIm5vbmUiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy52ZXJzaW9uPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6dGhpcy52ZXJzaW9uLGRlZmF1bHRWYWx1ZTo1LHZhbGlkYXRlOmU9PmU+PTEmJmU8PTV9KTt0aGlzLmFwcGVhcmFuY2VGaWx0ZXI9bnVsbDt0aGlzLmNlcnRpZmljYXRlcz1udWxsO3RoaXMuZGlnZXN0TWV0aG9kcz1udWxsO3RoaXMuZW5jb2RpbmdzPW51bGw7dGhpcy5lbmNyeXB0aW9uTWV0aG9kcz1udWxsO3RoaXMuaGFuZGxlcj1udWxsO3RoaXMubG9ja0RvY3VtZW50PW51bGw7dGhpcy5tZHA9bnVsbDt0aGlzLnJlYXNvbnM9bnVsbDt0aGlzLnRpbWVTdGFtcD1udWxsfX1jbGFzcyBGbG9hdCBleHRlbmRzIG8uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJmbG9hdCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRmaW5hbGl6ZV0oKXtjb25zdCBlPXBhcnNlRmxvYXQodGhpc1tyLiRjb250ZW50XS50cmltKCkpO3RoaXNbci4kY29udGVudF09aXNOYU4oZSk/bnVsbDplfVtyLiR0b0hUTUxdKGUpe3JldHVybiB2YWx1ZVRvSHRtbChudWxsIT09dGhpc1tyLiRjb250ZW50XT90aGlzW3IuJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1jbGFzcyBGb250IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZm9udCIsITApO3RoaXMuYmFzZWxpbmVTaGlmdD0oMCxjLmdldE1lYXN1cmVtZW50KShlLmJhc2VsaW5lU2hpZnQpO3RoaXMuZm9udEhvcml6b250YWxTY2FsZT0oMCxjLmdldEZsb2F0KSh7ZGF0YTplLmZvbnRIb3Jpem9udGFsU2NhbGUsZGVmYXVsdFZhbHVlOjEwMCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5mb250VmVydGljYWxTY2FsZT0oMCxjLmdldEZsb2F0KSh7ZGF0YTplLmZvbnRWZXJ0aWNhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5rZXJuaW5nTW9kZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5rZXJuaW5nTW9kZSxbIm5vbmUiLCJwYWlyIl0pO3RoaXMubGV0dGVyU3BhY2luZz0oMCxjLmdldE1lYXN1cmVtZW50KShlLmxldHRlclNwYWNpbmcsIjAiKTt0aGlzLmxpbmVUaHJvdWdoPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5saW5lVGhyb3VnaCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZXx8Mj09PWV9KTt0aGlzLmxpbmVUaHJvdWdoUGVyaW9kPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmxpbmVUaHJvdWdoUGVyaW9kLFsiYWxsIiwid29yZCJdKTt0aGlzLm92ZXJsaW5lPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5vdmVybGluZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZXx8Mj09PWV9KTt0aGlzLm92ZXJsaW5lUGVyaW9kPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm92ZXJsaW5lUGVyaW9kLFsiYWxsIiwid29yZCJdKTt0aGlzLnBvc3R1cmU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucG9zdHVyZSxbIm5vcm1hbCIsIml0YWxpYyJdKTt0aGlzLnNpemU9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5zaXplLCIxMHB0Iik7dGhpcy50eXBlZmFjZT1lLnR5cGVmYWNlfHwiQ291cmllciI7dGhpcy51bmRlcmxpbmU9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnVuZGVybGluZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZXx8Mj09PWV9KTt0aGlzLnVuZGVybGluZVBlcmlvZD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS51bmRlcmxpbmVQZXJpb2QsWyJhbGwiLCJ3b3JkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLndlaWdodD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS53ZWlnaHQsWyJub3JtYWwiLCJib2xkIl0pO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5maWxsPW51bGx9W3IuJGNsZWFuXShlKXtzdXBlcltyLiRjbGVhbl0oZSk7dGhpc1tyLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZCh0aGlzLnR5cGVmYWNlKX1bci4kdG9TdHlsZV0oKXtjb25zdCBlPSgwLHMudG9TdHlsZSkodGhpcywiZmlsbCIpLHQ9ZS5jb2xvcjtpZih0KWlmKCIjMDAwMDAwIj09PXQpZGVsZXRlIGUuY29sb3I7ZWxzZSBpZighdC5zdGFydHNXaXRoKCIjIikpe2UuYmFja2dyb3VuZD10O2UuYmFja2dyb3VuZENsaXA9InRleHQiO2UuY29sb3I9InRyYW5zcGFyZW50In10aGlzLmJhc2VsaW5lU2hpZnQmJihlLnZlcnRpY2FsQWxpZ249KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuYmFzZWxpbmVTaGlmdCkpO2UuZm9udEtlcm5pbmc9Im5vbmUiPT09dGhpcy5rZXJuaW5nTW9kZT8ibm9uZSI6Im5vcm1hbCI7ZS5sZXR0ZXJTcGFjaW5nPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxldHRlclNwYWNpbmcpO2lmKDAhPT10aGlzLmxpbmVUaHJvdWdoKXtlLnRleHREZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giOzI9PT10aGlzLmxpbmVUaHJvdWdoJiYoZS50ZXh0RGVjb3JhdGlvblN0eWxlPSJkb3VibGUiKX1pZigwIT09dGhpcy5vdmVybGluZSl7ZS50ZXh0RGVjb3JhdGlvbj0ib3ZlcmxpbmUiOzI9PT10aGlzLm92ZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvblN0eWxlPSJkb3VibGUiKX1lLmZvbnRTdHlsZT10aGlzLnBvc3R1cmU7ZS5mb250U2l6ZT0oMCxzLm1lYXN1cmVUb1N0cmluZykoLjk5KnRoaXMuc2l6ZSk7KDAscy5zZXRGb250RmFtaWx5KSh0aGlzLHRoaXMsdGhpc1tyLiRnbG9iYWxEYXRhXS5mb250RmluZGVyLGUpO2lmKDAhPT10aGlzLnVuZGVybGluZSl7ZS50ZXh0RGVjb3JhdGlvbj0idW5kZXJsaW5lIjsyPT09dGhpcy51bmRlcmxpbmUmJihlLnRleHREZWNvcmF0aW9uU3R5bGU9ImRvdWJsZSIpfWUuZm9udFdlaWdodD10aGlzLndlaWdodDtyZXR1cm4gZX19Y2xhc3MgRm9ybWF0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZm9ybWF0IiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLnBpY3R1cmU9bnVsbH19Y2xhc3MgSGFuZGxlciBleHRlbmRzIG8uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImhhbmRsZXIiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEh5cGhlbmF0aW9uIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiaHlwaGVuYXRpb24iKTt0aGlzLmV4Y2x1ZGVBbGxDYXBzPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5leGNsdWRlQWxsQ2FwcyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuZXhjbHVkZUluaXRpYWxDYXA9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmV4Y2x1ZGVJbml0aWFsQ2FwLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5oeXBoZW5hdGU9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmh5cGhlbmF0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wdXNoQ2hhcmFjdGVyQ291bnQ9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnB1c2hDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5yZW1haW5DaGFyYWN0ZXJDb3VudD0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUucmVtYWluQ2hhcmFjdGVyQ291bnQsZGVmYXVsdFZhbHVlOjMsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLndvcmRDaGFyYWN0ZXJDb3VudD0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUud29yZENoYXJhY3RlckNvdW50LGRlZmF1bHRWYWx1ZTo3LHZhbGlkYXRlOmU9PmU+PTB9KX19Y2xhc3MgSW1hZ2UgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJpbWFnZSIpO3RoaXMuYXNwZWN0PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmFzcGVjdCxbImZpdCIsImFjdHVhbCIsImhlaWdodCIsIm5vbmUiLCJ3aWR0aCJdKTt0aGlzLmNvbnRlbnRUeXBlPWUuY29udGVudFR5cGV8fCIiO3RoaXMuaHJlZj1lLmhyZWZ8fCIiO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy50cmFuc2ZlckVuY29kaW5nPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnRyYW5zZmVyRW5jb2RpbmcsWyJiYXNlNjQiLCJub25lIiwicGFja2FnZSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJHRvSFRNTF0oKXtpZih0aGlzLmNvbnRlbnRUeXBlJiYhbS5oYXModGhpcy5jb250ZW50VHlwZS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZO2xldCBlPXRoaXNbci4kZ2xvYmFsRGF0YV0uaW1hZ2VzJiZ0aGlzW3IuJGdsb2JhbERhdGFdLmltYWdlcy5nZXQodGhpcy5ocmVmKTtpZighZSYmKHRoaXMuaHJlZnx8IXRoaXNbci4kY29udGVudF0pKXJldHVybiBjLkhUTUxSZXN1bHQuRU1QVFk7ZXx8ImJhc2U2NCIhPT10aGlzLnRyYW5zZmVyRW5jb2Rpbmd8fChlPSgwLGwuc3RyaW5nVG9CeXRlcykoYXRvYih0aGlzW3IuJGNvbnRlbnRdKSkpO2lmKCFlKXJldHVybiBjLkhUTUxSZXN1bHQuRU1QVFk7aWYoIXRoaXMuY29udGVudFR5cGUpe2Zvcihjb25zdFt0LGFdb2YgYilpZihlLmxlbmd0aD50Lmxlbmd0aCYmdC5ldmVyeSgoKHQsYSk9PnQ9PT1lW2FdKSkpe3RoaXMuY29udGVudFR5cGU9YTticmVha31pZighdGhpcy5jb250ZW50VHlwZSlyZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZfWNvbnN0IHQ9bmV3IEJsb2IoW2VdLHt0eXBlOnRoaXMuY29udGVudFR5cGV9KTtsZXQgYTtzd2l0Y2godGhpcy5hc3BlY3Qpe2Nhc2UiZml0IjpjYXNlImFjdHVhbCI6YnJlYWs7Y2FzZSJoZWlnaHQiOmE9e2hlaWdodDoiMTAwJSIsb2JqZWN0Rml0OiJmaWxsIn07YnJlYWs7Y2FzZSJub25lIjphPXt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifTticmVhaztjYXNlIndpZHRoIjphPXt3aWR0aDoiMTAwJSIsb2JqZWN0Rml0OiJmaWxsIn19Y29uc3Qgbj10aGlzW3IuJGdldFBhcmVudF0oKTtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImltZyIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFJbWFnZSJdLHN0eWxlOmEsc3JjOlVSTC5jcmVhdGVPYmplY3RVUkwodCksYWx0Om4/YXJpYUxhYmVsKG5bci4kZ2V0UGFyZW50XSgpKTpudWxsfX0pfX1jbGFzcyBJbWFnZUVkaXQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJpbWFnZUVkaXQiLCEwKTt0aGlzLmRhdGE9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuZGF0YSxbImxpbmsiLCJlbWJlZCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bci4kdG9IVE1MXShlKXtyZXR1cm4iZW1iZWQiPT09dGhpcy5kYXRhP2MuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOltdLGF0dHJpYnV0ZXM6e319KTpjLkhUTUxSZXN1bHQuRU1QVFl9fWNsYXNzIEludGVnZXIgZXh0ZW5kcyBvLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiaW50ZWdlciIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRmaW5hbGl6ZV0oKXtjb25zdCBlPXBhcnNlSW50KHRoaXNbci4kY29udGVudF0udHJpbSgpLDEwKTt0aGlzW3IuJGNvbnRlbnRdPWlzTmFOKGUpP251bGw6ZX1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwobnVsbCE9PXRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgSXNzdWVycyBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImlzc3VlcnMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jZXJ0aWZpY2F0ZT1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgSXRlbXMgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJpdGVtcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy5zYXZlPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5zYXZlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9vbGVhbj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuaW50ZWdlcj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyBvLlhGQU9iamVjdEFycmF5fVtyLiR0b0hUTUxdKCl7Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiB0aGlzW3IuJGdldENoaWxkcmVuXSgpKWUucHVzaCh0W3IuJHRleHRdKCkpO3JldHVybiBjLkhUTUxSZXN1bHQuc3VjY2VzcyhlKX19dC5JdGVtcz1JdGVtcztjbGFzcyBLZWVwIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwia2VlcCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7Y29uc3QgdD1bIm5vbmUiLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl07dGhpcy5pbnRhY3Q9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaW50YWN0LHQpO3RoaXMubmV4dD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5uZXh0LHQpO3RoaXMucHJldmlvdXM9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJldmlvdXMsdCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9fWNsYXNzIEtleVVzYWdlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwia2V5VXNhZ2UiKTtjb25zdCB0PVsiIiwieWVzIiwibm8iXTt0aGlzLmNybFNpZ249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuY3JsU2lnbix0KTt0aGlzLmRhdGFFbmNpcGhlcm1lbnQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuZGF0YUVuY2lwaGVybWVudCx0KTt0aGlzLmRlY2lwaGVyT25seT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5kZWNpcGhlck9ubHksdCk7dGhpcy5kaWdpdGFsU2lnbmF0dXJlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmRpZ2l0YWxTaWduYXR1cmUsdCk7dGhpcy5lbmNpcGhlck9ubHk9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuZW5jaXBoZXJPbmx5LHQpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5rZXlBZ3JlZW1lbnQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUua2V5QWdyZWVtZW50LHQpO3RoaXMua2V5Q2VydFNpZ249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUua2V5Q2VydFNpZ24sdCk7dGhpcy5rZXlFbmNpcGhlcm1lbnQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUua2V5RW5jaXBoZXJtZW50LHQpO3RoaXMubm9uUmVwdWRpYXRpb249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUubm9uUmVwdWRpYXRpb24sdCk7dGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgTGluZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImxpbmUiLCEwKTt0aGlzLmhhbmQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnNsb3BlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnNsb3BlLFsiXFwiLCIvIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmVkZ2U9bnVsbH1bci4kdG9IVE1MXSgpe2NvbnN0IGU9dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpLHQ9dGhpcy5lZGdlfHxuZXcgRWRnZSh7fSksYT10W3IuJHRvU3R5bGVdKCksbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9InZpc2libGUiPT09dC5wcmVzZW5jZT90LnRoaWNrbmVzczowO24uc3Ryb2tlV2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKGkpO24uc3Ryb2tlPWEuY29sb3I7bGV0IG8sbCxoLHUsZD0iMTAwJSIsZj0iMTAwJSI7aWYoZS53PD1pKXtbbyxsLGgsdV09WyI1MCUiLDAsIjUwJSIsIjEwMCUiXTtkPW4uc3Ryb2tlV2lkdGh9ZWxzZSBpZihlLmg8PWkpe1tvLGwsaCx1XT1bMCwiNTAlIiwiMTAwJSIsIjUwJSJdO2Y9bi5zdHJva2VXaWR0aH1lbHNlIlxcIj09PXRoaXMuc2xvcGU/W28sbCxoLHVdPVswLDAsIjEwMCUiLCIxMDAlIl06W28sbCxoLHVdPVswLCIxMDAlIiwiMTAwJSIsMF07Y29uc3QgcD17bmFtZToic3ZnIixjaGlsZHJlbjpbe25hbWU6ImxpbmUiLGF0dHJpYnV0ZXM6e3htbG5zOmcseDE6byx5MTpsLHgyOmgseTI6dSxzdHlsZTpufX1dLGF0dHJpYnV0ZXM6e3htbG5zOmcsd2lkdGg6ZCxoZWlnaHQ6ZixzdHlsZTp7b3ZlcmZsb3c6InZpc2libGUifX19O2lmKGhhc01hcmdpbihlKSlyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbcF19KTtwLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3MocCl9fWNsYXNzIExpbmVhciBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImxpbmVhciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJ0b1JpZ2h0IiwidG9Cb3R0b20iLCJ0b0xlZnQiLCJ0b1RvcCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W3IuJHRvU3R5bGVdKGUpe2U9ZT9lW3IuJHRvU3R5bGVdKCk6IiNGRkZGRkYiO3JldHVybmBsaW5lYXItZ3JhZGllbnQoJHt0aGlzLnR5cGUucmVwbGFjZSgvKFtSQkxUXSkvLCIgJDEiKS50b0xvd2VyQ2FzZSgpfSwgJHtlfSwgJHt0aGlzLmNvbG9yP3RoaXMuY29sb3Jbci4kdG9TdHlsZV0oKToiIzAwMDAwMCJ9KWB9fWNsYXNzIExvY2tEb2N1bWVudCBleHRlbmRzIG8uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJsb2NrRG9jdW1lbnQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGZpbmFsaXplXSgpe3RoaXNbci4kY29udGVudF09KDAsYy5nZXRTdHJpbmdPcHRpb24pKHRoaXNbci4kY29udGVudF0sWyJhdXRvIiwiMCIsIjEiXSl9fWNsYXNzIE1hbmlmZXN0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwibWFuaWZlc3QiLCEwKTt0aGlzLmFjdGlvbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5hY3Rpb24sWyJpbmNsdWRlIiwiYWxsIiwiZXhjbHVkZSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMucmVmPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBNYXJnaW4gZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJtYXJnaW4iLCEwKTt0aGlzLmJvdHRvbUluc2V0PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUuYm90dG9tSW5zZXQsIjAiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVmdEluc2V0PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubGVmdEluc2V0LCIwIik7dGhpcy5yaWdodEluc2V0PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUucmlnaHRJbnNldCwiMCIpO3RoaXMudG9wSW5zZXQ9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS50b3BJbnNldCwiMCIpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXSgpe3JldHVybnttYXJnaW46KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudG9wSW5zZXQpKyIgIisoMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5yaWdodEluc2V0KSsiICIrKDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuYm90dG9tSW5zZXQpKyIgIisoMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5sZWZ0SW5zZXQpfX19Y2xhc3MgTWRwIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwibWRwIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnBlcm1pc3Npb25zPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wZXJtaXNzaW9ucyxkZWZhdWx0VmFsdWU6Mix2YWxpZGF0ZTplPT4xPT09ZXx8Mz09PWV9KTt0aGlzLnNpZ25hdHVyZVR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuc2lnbmF0dXJlVHlwZSxbImZpbGxlciIsImF1dGhvciJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIE1lZGl1bSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsIm1lZGl1bSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbWFnaW5nQkJveD0oMCxjLmdldEJCb3gpKGUuaW1hZ2luZ0JCb3gpO3RoaXMubG9uZz0oMCxjLmdldE1lYXN1cmVtZW50KShlLmxvbmcpO3RoaXMub3JpZW50YXRpb249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUub3JpZW50YXRpb24sWyJwb3J0cmFpdCIsImxhbmRzY2FwZSJdKTt0aGlzLnNob3J0PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUuc2hvcnQpO3RoaXMuc3RvY2s9ZS5zdG9ja3x8IiI7dGhpcy50cmF5SW49KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHJheUluLFsiYXV0byIsImRlbGVnYXRlIiwicGFnZUZyb250Il0pO3RoaXMudHJheU91dD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50cmF5T3V0LFsiYXV0byIsImRlbGVnYXRlIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgTWVzc2FnZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsIm1lc3NhZ2UiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnRleHQ9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIE51bWVyaWNFZGl0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwibnVtZXJpY0VkaXQiLCEwKTt0aGlzLmhTY3JvbGxQb2xpY3k9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY29tYj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bci4kdG9IVE1MXShlKXtjb25zdCB0PSgwLHMudG9TdHlsZSkodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLGE9dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpLG49e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixmaWVsZElkOmFbci4kdWlkXSxkYXRhSWQ6YVtyLiRkYXRhXT8uW3IuJHVpZF18fGFbci4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnQsImFyaWEtbGFiZWwiOmFyaWFMYWJlbChhKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTtpZihpc1JlcXVpcmVkKGEpKXtuLmF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXT0hMDtuLmF0dHJpYnV0ZXMucmVxdWlyZWQ9ITB9cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbbl19KX19Y2xhc3MgT2NjdXIgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJvY2N1ciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbml0aWFsPSIiIT09ZS5pbml0aWFsPygwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5pbml0aWFsLGRlZmF1bHRWYWx1ZToiIix2YWxpZGF0ZTplPT4hMH0pOiIiO3RoaXMubWF4PSIiIT09ZS5tYXg/KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heCxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT4hMH0pOiIiO3RoaXMubWluPSIiIT09ZS5taW4/KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1pbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT4hMH0pOiIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfVtyLiRjbGVhbl0oKXtjb25zdCBlPXRoaXNbci4kZ2V0UGFyZW50XSgpLHQ9dGhpcy5taW47IiI9PT10aGlzLm1pbiYmKHRoaXMubWluPWUgaW5zdGFuY2VvZiBQYWdlQXJlYXx8ZSBpbnN0YW5jZW9mIFBhZ2VTZXQ/MDoxKTsiIj09PXRoaXMubWF4JiYodGhpcy5tYXg9IiI9PT10P2UgaW5zdGFuY2VvZiBQYWdlQXJlYXx8ZSBpbnN0YW5jZW9mIFBhZ2VTZXQ/LTE6MTp0aGlzLm1pbik7LTEhPT10aGlzLm1heCYmdGhpcy5tYXg8dGhpcy5taW4mJih0aGlzLm1heD10aGlzLm1pbik7IiI9PT10aGlzLmluaXRpYWwmJih0aGlzLmluaXRpYWw9ZSBpbnN0YW5jZW9mIFRlbXBsYXRlPzE6dGhpcy5taW4pfX1jbGFzcyBPaWQgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJvaWQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgT2lkcyBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsIm9pZHMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5vaWQ9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIE92ZXJmbG93IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwib3ZlcmZsb3ciKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVhZGVyPWUubGVhZGVyfHwiIjt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiI7dGhpcy50cmFpbGVyPWUudHJhaWxlcnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRnZXRFeHRyYV0oKXtpZighdGhpc1tyLiRleHRyYV0pe2NvbnN0IGU9dGhpc1tyLiRnZXRQYXJlbnRdKCksdD10aGlzW3IuJGdldFRlbXBsYXRlUm9vdF0oKSxhPXRbci4kc2VhcmNoTm9kZV0odGhpcy50YXJnZXQsZSksbj10W3IuJHNlYXJjaE5vZGVdKHRoaXMubGVhZGVyLGUpLGk9dFtyLiRzZWFyY2hOb2RlXSh0aGlzLnRyYWlsZXIsZSk7dGhpc1tyLiRleHRyYV09e3RhcmdldDphPy5bMF18fG51bGwsbGVhZGVyOm4/LlswXXx8bnVsbCx0cmFpbGVyOmk/LlswXXx8bnVsbCxhZGRMZWFkZXI6ITEsYWRkVHJhaWxlcjohMX19cmV0dXJuIHRoaXNbci4kZXh0cmFdfX1jbGFzcyBQYWdlQXJlYSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInBhZ2VBcmVhIiwhMCk7dGhpcy5ibGFua09yTm90Qmxhbms9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYmxhbmtPck5vdEJsYW5rLFsiYW55IiwiYmxhbmsiLCJub3RCbGFuayJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuaW5pdGlhbE51bWJlcj0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuaW5pdGlhbE51bWJlcixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT4hMH0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMubnVtYmVyZWQ9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm51bWJlcmVkLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy5vZGRPckV2ZW49KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUub2RkT3JFdmVuLFsiYW55IiwiZXZlbiIsIm9kZCJdKTt0aGlzLnBhZ2VQb3NpdGlvbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wYWdlUG9zaXRpb24sWyJhbnkiLCJmaXJzdCIsImxhc3QiLCJvbmx5IiwicmVzdCJdKTt0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWVkaXVtPW51bGw7dGhpcy5vY2N1cj1udWxsO3RoaXMuYXJlYT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmNvbnRlbnRBcmVhPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZHJhdz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV4Y2xHcm91cD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmZpZWxkPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgby5YRkFPYmplY3RBcnJheX1bci4kaXNVc2FibGVdKCl7aWYoIXRoaXNbci4kZXh0cmFdKXt0aGlzW3IuJGV4dHJhXT17bnVtYmVyT2ZVc2U6MH07cmV0dXJuITB9cmV0dXJuIXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbci4kZXh0cmFdLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4fVtyLiRjbGVhblBhZ2VdKCl7ZGVsZXRlIHRoaXNbci4kZXh0cmFdfVtyLiRnZXROZXh0UGFnZV0oKXt0aGlzW3IuJGV4dHJhXXx8KHRoaXNbci4kZXh0cmFdPXtudW1iZXJPZlVzZTowfSk7Y29uc3QgZT10aGlzW3IuJGdldFBhcmVudF0oKTtpZigib3JkZXJlZE9jY3VycmVuY2UiPT09ZS5yZWxhdGlvbiYmdGhpc1tyLiRpc1VzYWJsZV0oKSl7dGhpc1tyLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTE7cmV0dXJuIHRoaXN9cmV0dXJuIGVbci4kZ2V0TmV4dFBhZ2VdKCl9W3IuJGdldEF2YWlsYWJsZVNwYWNlXSgpe3JldHVybiB0aGlzW3IuJGV4dHJhXS5zcGFjZXx8e3dpZHRoOjAsaGVpZ2h0OjB9fVtyLiR0b0hUTUxdKCl7dGhpc1tyLiRleHRyYV18fCh0aGlzW3IuJGV4dHJhXT17bnVtYmVyT2ZVc2U6MX0pO2NvbnN0IGU9W107dGhpc1tyLiRleHRyYV0uY2hpbGRyZW49ZTtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYodGhpcy5tZWRpdW0mJnRoaXMubWVkaXVtLnNob3J0JiZ0aGlzLm1lZGl1bS5sb25nKXt0LndpZHRoPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLm1lZGl1bS5zaG9ydCk7dC5oZWlnaHQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWVkaXVtLmxvbmcpO3RoaXNbci4kZXh0cmFdLnNwYWNlPXt3aWR0aDp0aGlzLm1lZGl1bS5zaG9ydCxoZWlnaHQ6dGhpcy5tZWRpdW0ubG9uZ307aWYoImxhbmRzY2FwZSI9PT10aGlzLm1lZGl1bS5vcmllbnRhdGlvbil7Y29uc3QgZT10LndpZHRoO3Qud2lkdGg9dC5oZWlnaHQ7dC5oZWlnaHQ9ZTt0aGlzW3IuJGV4dHJhXS5zcGFjZT17d2lkdGg6dGhpcy5tZWRpdW0ubG9uZyxoZWlnaHQ6dGhpcy5tZWRpdW0uc2hvcnR9fX1lbHNlKDAsbC53YXJuKSgiWEZBIC0gTm8gbWVkaXVtIHNwZWNpZmllZCBpbiBwYWdlQXJlYTogcGxlYXNlIGZpbGUgYSBidWcuIik7dGhpc1tyLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjpuZXcgU2V0KFsiYXJlYSIsImRyYXciLCJmaWVsZCIsInN1YmZvcm0iXSksaW5jbHVkZTohMH0pO3RoaXNbci4kY2hpbGRyZW5Ub0hUTUxdKHtmaWx0ZXI6bmV3IFNldChbImNvbnRlbnRBcmVhIl0pLGluY2x1ZGU6ITB9KTtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46ZSxhdHRyaWJ1dGVzOntjbGFzczpbInhmYVBhZ2UiXSxpZDp0aGlzW3IuJHVpZF0sc3R5bGU6dCx4ZmFOYW1lOnRoaXMubmFtZX19KX19Y2xhc3MgUGFnZVNldCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInBhZ2VTZXQiLCEwKTt0aGlzLmR1cGxleEltcG9zaXRpb249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuZHVwbGV4SW1wb3NpdGlvbixbImxvbmdFZGdlIiwic2hvcnRFZGdlIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yZWxhdGlvbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5yZWxhdGlvbixbIm9yZGVyZWRPY2N1cnJlbmNlIiwiZHVwbGV4UGFnaW5hdGVkIiwic2ltcGxleFBhZ2luYXRlZCJdKTt0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMub2NjdXI9bnVsbDt0aGlzLnBhZ2VBcmVhPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMucGFnZVNldD1uZXcgby5YRkFPYmplY3RBcnJheX1bci4kY2xlYW5QYWdlXSgpe2Zvcihjb25zdCBlIG9mIHRoaXMucGFnZUFyZWEuY2hpbGRyZW4pZVtyLiRjbGVhblBhZ2VdKCk7Zm9yKGNvbnN0IGUgb2YgdGhpcy5wYWdlU2V0LmNoaWxkcmVuKWVbci4kY2xlYW5QYWdlXSgpfVtyLiRpc1VzYWJsZV0oKXtyZXR1cm4hdGhpcy5vY2N1cnx8LTE9PT10aGlzLm9jY3VyLm1heHx8dGhpc1tyLiRleHRyYV0ubnVtYmVyT2ZVc2U8dGhpcy5vY2N1ci5tYXh9W3IuJGdldE5leHRQYWdlXSgpe3RoaXNbci4kZXh0cmFdfHwodGhpc1tyLiRleHRyYV09e251bWJlck9mVXNlOjEscGFnZUluZGV4Oi0xLHBhZ2VTZXRJbmRleDotMX0pO2lmKCJvcmRlcmVkT2NjdXJyZW5jZSI9PT10aGlzLnJlbGF0aW9uKXtpZih0aGlzW3IuJGV4dHJhXS5wYWdlSW5kZXgrMTx0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmxlbmd0aCl7dGhpc1tyLiRleHRyYV0ucGFnZUluZGV4Kz0xO3JldHVybiB0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuW3RoaXNbci4kZXh0cmFdLnBhZ2VJbmRleF1bci4kZ2V0TmV4dFBhZ2VdKCl9aWYodGhpc1tyLiRleHRyYV0ucGFnZVNldEluZGV4KzE8dGhpcy5wYWdlU2V0LmNoaWxkcmVuLmxlbmd0aCl7dGhpc1tyLiRleHRyYV0ucGFnZVNldEluZGV4Kz0xO3JldHVybiB0aGlzLnBhZ2VTZXQuY2hpbGRyZW5bdGhpc1tyLiRleHRyYV0ucGFnZVNldEluZGV4XVtyLiRnZXROZXh0UGFnZV0oKX1pZih0aGlzW3IuJGlzVXNhYmxlXSgpKXt0aGlzW3IuJGV4dHJhXS5udW1iZXJPZlVzZSs9MTt0aGlzW3IuJGV4dHJhXS5wYWdlSW5kZXg9LTE7dGhpc1tyLiRleHRyYV0ucGFnZVNldEluZGV4PS0xO3JldHVybiB0aGlzW3IuJGdldE5leHRQYWdlXSgpfWNvbnN0IGU9dGhpc1tyLiRnZXRQYXJlbnRdKCk7aWYoZSBpbnN0YW5jZW9mIFBhZ2VTZXQpcmV0dXJuIGVbci4kZ2V0TmV4dFBhZ2VdKCk7dGhpc1tyLiRjbGVhblBhZ2VdKCk7cmV0dXJuIHRoaXNbci4kZ2V0TmV4dFBhZ2VdKCl9Y29uc3QgZT10aGlzW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ucGFnZU51bWJlcix0PWUlMj09MD8iZXZlbiI6Im9kZCIsYT0wPT09ZT8iZmlyc3QiOiJyZXN0IjtsZXQgbj10aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmZpbmQoKGU9PmUub2RkT3JFdmVuPT09dCYmZS5wYWdlUG9zaXRpb249PT1hKSk7aWYobilyZXR1cm4gbjtuPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZCgoZT0+ImFueSI9PT1lLm9kZE9yRXZlbiYmZS5wYWdlUG9zaXRpb249PT1hKSk7aWYobilyZXR1cm4gbjtuPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZCgoZT0+ImFueSI9PT1lLm9kZE9yRXZlbiYmImFueSI9PT1lLnBhZ2VQb3NpdGlvbikpO3JldHVybiBufHx0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuWzBdfX1jbGFzcyBQYXJhIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwicGFyYSIsITApO3RoaXMuaEFsaWduPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxpbmVIZWlnaHQ9ZS5saW5lSGVpZ2h0PygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubGluZUhlaWdodCwiMHB0Iik6IiI7dGhpcy5tYXJnaW5MZWZ0PWUubWFyZ2luTGVmdD8oMCxjLmdldE1lYXN1cmVtZW50KShlLm1hcmdpbkxlZnQsIjBwdCIpOiIiO3RoaXMubWFyZ2luUmlnaHQ9ZS5tYXJnaW5SaWdodD8oMCxjLmdldE1lYXN1cmVtZW50KShlLm1hcmdpblJpZ2h0LCIwcHQiKToiIjt0aGlzLm9ycGhhbnM9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm9ycGhhbnMsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMucHJlc2VydmU9ZS5wcmVzZXJ2ZXx8IiI7dGhpcy5yYWRpeE9mZnNldD1lLnJhZGl4T2Zmc2V0PygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUucmFkaXhPZmZzZXQsIjBwdCIpOiIiO3RoaXMuc3BhY2VBYm92ZT1lLnNwYWNlQWJvdmU/KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5zcGFjZUFib3ZlLCIwcHQiKToiIjt0aGlzLnNwYWNlQmVsb3c9ZS5zcGFjZUJlbG93PygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUuc3BhY2VCZWxvdywiMHB0Iik6IiI7dGhpcy50YWJEZWZhdWx0PWUudGFiRGVmYXVsdD8oMCxjLmdldE1lYXN1cmVtZW50KSh0aGlzLnRhYkRlZmF1bHQpOiIiO3RoaXMudGFiU3RvcHM9KGUudGFiU3RvcHN8fCIiKS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcCgoKGUsdCk9PnQlMj09MT8oMCxjLmdldE1lYXN1cmVtZW50KShlKTplKSk7dGhpcy50ZXh0SW5kZW50PWUudGV4dEluZGVudD8oMCxjLmdldE1lYXN1cmVtZW50KShlLnRleHRJbmRlbnQsIjBwdCIpOiIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnZBbGlnbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS52QWxpZ24sWyJ0b3AiLCJib3R0b20iLCJtaWRkbGUiXSk7dGhpcy53aWRvd3M9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLndpZG93cyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5oeXBoZW5hdGlvbj1udWxsfVtyLiR0b1N0eWxlXSgpe2NvbnN0IGU9KDAscy50b1N0eWxlKSh0aGlzLCJoQWxpZ24iKTsiIiE9PXRoaXMubWFyZ2luTGVmdCYmKGUucGFkZGluZ0xlZnQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luTGVmdCkpOyIiIT09dGhpcy5tYXJnaW5SaWdodCYmKGUucGFkZGluZ2lnaHQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luUmlnaHQpKTsiIiE9PXRoaXMuc3BhY2VBYm92ZSYmKGUucGFkZGluZ1RvcD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5zcGFjZUFib3ZlKSk7IiIhPT10aGlzLnNwYWNlQmVsb3cmJihlLnBhZGRpbmdCb3R0b209KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc3BhY2VCZWxvdykpO2lmKCIiIT09dGhpcy50ZXh0SW5kZW50KXtlLnRleHRJbmRlbnQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudGV4dEluZGVudCk7KDAscy5maXhUZXh0SW5kZW50KShlKX10aGlzLmxpbmVIZWlnaHQ+MCYmKGUubGluZUhlaWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5saW5lSGVpZ2h0KSk7IiIhPT10aGlzLnRhYkRlZmF1bHQmJihlLnRhYlNpemU9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudGFiRGVmYXVsdCkpO3RoaXMudGFiU3RvcHMubGVuZ3RoO3RoaXMuaHlwaGVuYXRhdGlvbiYmT2JqZWN0LmFzc2lnbihlLHRoaXMuaHlwaGVuYXRhdGlvbltyLiR0b1N0eWxlXSgpKTtyZXR1cm4gZX19Y2xhc3MgUGFzc3dvcmRFZGl0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwicGFzc3dvcmRFZGl0IiwhMCk7dGhpcy5oU2Nyb2xsUG9saWN5PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnBhc3N3b3JkQ2hhcj1lLnBhc3N3b3JkQ2hhcnx8IioiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH19Y2xhc3MgUGF0dGVybiBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInBhdHRlcm4iLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsiY3Jvc3NIYXRjaCIsImNyb3NzRGlhZ29uYWwiLCJkaWFnb25hbExlZnQiLCJkaWFnb25hbFJpZ2h0IiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oZSl7ZT1lP2Vbci4kdG9TdHlsZV0oKToiI0ZGRkZGRiI7Y29uc3QgdD10aGlzLmNvbG9yP3RoaXMuY29sb3Jbci4kdG9TdHlsZV0oKToiIzAwMDAwMCIsYT0icmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCIsbj1gJHtlfSwke2V9IDVweCwke3R9IDVweCwke3R9IDEwcHhgO3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2UiY3Jvc3NIYXRjaCI6cmV0dXJuYCR7YX0odG8gdG9wLCR7bn0pICR7YX0odG8gcmlnaHQsJHtufSlgO2Nhc2UiY3Jvc3NEaWFnb25hbCI6cmV0dXJuYCR7YX0oNDVkZWcsJHtufSkgJHthfSgtNDVkZWcsJHtufSlgO2Nhc2UiZGlhZ29uYWxMZWZ0IjpyZXR1cm5gJHthfSg0NWRlZywke259KWA7Y2FzZSJkaWFnb25hbFJpZ2h0IjpyZXR1cm5gJHthfSgtNDVkZWcsJHtufSlgO2Nhc2UiaG9yaXpvbnRhbCI6cmV0dXJuYCR7YX0odG8gdG9wLCR7bn0pYDtjYXNlInZlcnRpY2FsIjpyZXR1cm5gJHthfSh0byByaWdodCwke259KWB9cmV0dXJuIiJ9fWNsYXNzIFBpY3R1cmUgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJwaWN0dXJlIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFByb3RvIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwicHJvdG8iLCEwKTt0aGlzLmFwcGVhcmFuY2VGaWx0ZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5hcmM9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5hcmVhPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuYXNzaXN0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuYmFyY29kZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmJpbmRJdGVtcz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmJvb2tlbmQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5ib29sZWFuPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuYm9yZGVyPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWs9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVha0FmdGVyPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWtCZWZvcmU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5idXR0b249bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5jYWxjdWxhdGU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5jYXB0aW9uPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuY2VydGlmaWNhdGU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5jZXJ0aWZpY2F0ZXM9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5jaGVja0J1dHRvbj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmNob2ljZUxpc3Q9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5jb2xvcj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmNvbWI9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5jb25uZWN0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuY29udGVudEFyZWE9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5jb3JuZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZUVkaXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGVmYXVsdFVpPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGVzYz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRpZ2VzdE1ldGhvZD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRpZ2VzdE1ldGhvZHM9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kcmF3PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZWRnZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmVuY29kaW5nPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZW5jb2RpbmdzPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmVuY3J5cHREYXRhPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdGlvbj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmVuY3J5cHRpb25NZXRob2Q9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0aW9uTWV0aG9kcz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV2ZW50PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZXhPYmplY3Q9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5leGNsR3JvdXA9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5leGVjdXRlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZXh0cmFzPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5maWxsPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZmlsdGVyPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZmxvYXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5mb250PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZm9ybWF0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuaGFuZGxlcj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmh5cGhlbmF0aW9uPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuaW1hZ2U9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZUVkaXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuaXNzdWVycz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLml0ZW1zPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMua2VlcD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmtleVVzYWdlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMubGluZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmxpbmVhcj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmxvY2tEb2N1bWVudD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLm1hbmlmZXN0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMubWFyZ2luPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMubWRwPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMubWVkaXVtPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMubWVzc2FnZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLm51bWVyaWNFZGl0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMub2NjdXI9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5vaWQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5vaWRzPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMub3ZlcmZsb3c9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5wYWdlQXJlYT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnBhZ2VTZXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5wYXJhPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMucGFzc3dvcmRFZGl0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMucGF0dGVybj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnBpY3R1cmU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5yYWRpYWw9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5yZWFzb249bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5yZWFzb25zPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMucmVjdGFuZ2xlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMucmVmPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc2NyaXB0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc2V0UHJvcGVydHk9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zaWduRGF0YT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnNpZ25hdHVyZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnNpZ25pbmc9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zb2xpZD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnNwZWFrPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc3RpcHBsZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm09bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtU2V0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViamVjdEROPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViamVjdEROcz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnN1Ym1pdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0RWRpdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lU3RhbXA9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy50b29sVGlwPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudHJhdmVyc2FsPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudHJhdmVyc2U9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy51aT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnZhbGlkYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudmFsdWU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy52YXJpYWJsZXM9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFJhZGlhbCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInJhZGlhbCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJ0b0VkZ2UiLCJ0b0NlbnRlciJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W3IuJHRvU3R5bGVdKGUpe2U9ZT9lW3IuJHRvU3R5bGVdKCk6IiNGRkZGRkYiO2NvbnN0IHQ9dGhpcy5jb2xvcj90aGlzLmNvbG9yW3IuJHRvU3R5bGVdKCk6IiMwMDAwMDAiO3JldHVybmByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IGNlbnRlciwgJHsidG9FZGdlIj09PXRoaXMudHlwZT9gJHtlfSwke3R9YDpgJHt0fSwke2V9YH0pYH19Y2xhc3MgUmVhc29uIGV4dGVuZHMgby5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwicmVhc29uIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFJlYXNvbnMgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJyZWFzb25zIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMucmVhc29uPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBSZWN0YW5nbGUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJyZWN0YW5nbGUiLCEwKTt0aGlzLmhhbmQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb3JuZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXkoNCk7dGhpcy5lZGdlPW5ldyBvLlhGQU9iamVjdEFycmF5KDQpO3RoaXMuZmlsbD1udWxsfVtyLiR0b0hUTUxdKCl7Y29uc3QgZT10aGlzLmVkZ2UuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuZWRnZS5jaGlsZHJlblswXTpuZXcgRWRnZSh7fSksdD1lW3IuJHRvU3R5bGVdKCksYT1PYmplY3QuY3JlYXRlKG51bGwpOyJ2aXNpYmxlIj09PXRoaXMuZmlsbD8ucHJlc2VuY2U/T2JqZWN0LmFzc2lnbihhLHRoaXMuZmlsbFtyLiR0b1N0eWxlXSgpKTphLmZpbGw9InRyYW5zcGFyZW50IjthLnN0cm9rZVdpZHRoPSgwLHMubWVhc3VyZVRvU3RyaW5nKSgidmlzaWJsZSI9PT1lLnByZXNlbmNlP2UudGhpY2tuZXNzOjApO2Euc3Ryb2tlPXQuY29sb3I7Y29uc3Qgbj0odGhpcy5jb3JuZXIuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY29ybmVyLmNoaWxkcmVuWzBdOm5ldyBDb3JuZXIoe30pKVtyLiR0b1N0eWxlXSgpLGk9e25hbWU6InN2ZyIsY2hpbGRyZW46W3tuYW1lOiJyZWN0IixhdHRyaWJ1dGVzOnt4bWxuczpnLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLHg6MCx5OjAscng6bi5yYWRpdXMscnk6bi5yYWRpdXMsc3R5bGU6YX19XSxhdHRyaWJ1dGVzOnt4bWxuczpnLHN0eWxlOntvdmVyZmxvdzoidmlzaWJsZSJ9LHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX07aWYoaGFzTWFyZ2luKHRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSkpcmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W2ldfSk7aS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKGkpfX1jbGFzcyBSZWZFbGVtZW50IGV4dGVuZHMgby5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwicmVmIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFNjcmlwdCBleHRlbmRzIG8uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInNjcmlwdCIpO3RoaXMuYmluZGluZz1lLmJpbmRpbmd8fCIiO3RoaXMuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJ1bkF0PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnJ1bkF0LFsiY2xpZW50IiwiYm90aCIsInNlcnZlciJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFNldFByb3BlcnR5IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwic2V0UHJvcGVydHkiKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIifX10LlNldFByb3BlcnR5PVNldFByb3BlcnR5O2NsYXNzIFNpZ25EYXRhIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwic2lnbkRhdGEiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3BlcmF0aW9uPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm9wZXJhdGlvbixbInNpZ24iLCJjbGVhciIsInZlcmlmeSJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmZpbHRlcj1udWxsO3RoaXMubWFuaWZlc3Q9bnVsbH19Y2xhc3MgU2lnbmF0dXJlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwic2lnbmF0dXJlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIlBERjEuMyIsIlBERjEuNiJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZmlsdGVyPW51bGw7dGhpcy5tYW5pZmVzdD1udWxsO3RoaXMubWFyZ2luPW51bGx9fWNsYXNzIFNpZ25pbmcgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJzaWduaW5nIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY2VydGlmaWNhdGU9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFNvbGlkIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwic29saWQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXShlKXtyZXR1cm4gZT9lW3IuJHRvU3R5bGVdKCk6IiNGRkZGRkYifX1jbGFzcyBTcGVhayBleHRlbmRzIG8uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInNwZWFrIik7dGhpcy5kaXNhYmxlPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5kaXNhYmxlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnByaW9yaXR5PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnByaW9yaXR5LFsiY3VzdG9tIiwiY2FwdGlvbiIsIm5hbWUiLCJ0b29sVGlwIl0pO3RoaXMucmlkPWUucmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFN0aXBwbGUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJzdGlwcGxlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnJhdGU9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJhdGUsZGVmYXVsdFZhbHVlOjUwLHZhbGlkYXRlOmU9PmU+PTAmJmU8PTEwMH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oZSl7Y29uc3QgdD10aGlzLnJhdGUvMTAwO3JldHVybiBsLlV0aWwubWFrZUhleENvbG9yKE1hdGgucm91bmQoZS52YWx1ZS5yKigxLXQpK3RoaXMudmFsdWUucip0KSxNYXRoLnJvdW5kKGUudmFsdWUuZyooMS10KSt0aGlzLnZhbHVlLmcqdCksTWF0aC5yb3VuZChlLnZhbHVlLmIqKDEtdCkrdGhpcy52YWx1ZS5iKnQpKX19Y2xhc3MgU3ViZm9ybSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInN1YmZvcm0iLCEwKTt0aGlzLmFjY2Vzcz0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKTt0aGlzLmFsbG93TWFjcm89KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmFsbG93TWFjcm8sZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmFuY2hvclR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKTt0aGlzLmNvbFNwYW49KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSk7dGhpcy5jb2x1bW5XaWR0aHM9KGUuY29sdW1uV2lkdGhzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGU9PiItMSI9PT1lPy0xOigwLGMuZ2V0TWVhc3VyZW1lbnQpKGUpKSk7dGhpcy5oPWUuaD8oMCxjLmdldE1lYXN1cmVtZW50KShlLmgpOiIiO3RoaXMuaEFsaWduPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxheW91dD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5sYXlvdXQsWyJwb3NpdGlvbiIsImxyLXRiIiwicmwtcm93IiwicmwtdGIiLCJyb3ciLCJ0YWJsZSIsInRiIl0pO3RoaXMubG9jYWxlPWUubG9jYWxlfHwiIjt0aGlzLm1heEg9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKTt0aGlzLm1heFc9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKTt0aGlzLm1lcmdlTW9kZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5tZXJnZU1vZGUsWyJjb25zdW1lRGF0YSIsIm1hdGNoVGVtcGxhdGUiXSk7dGhpcy5taW5IPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0Iik7dGhpcy5taW5XPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMucmVzdG9yZVN0YXRlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlc3RvcmVTdGF0ZSxbIm1hbnVhbCIsImF1dG8iXSk7dGhpcy5zY29wZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5zY29wZSxbIm5hbWUiLCJub25lIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53PygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUudyk6IiI7dGhpcy54PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0Iik7dGhpcy55PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJpbmQ9bnVsbDt0aGlzLmJvb2tlbmQ9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuYnJlYWs9bnVsbDt0aGlzLmNhbGN1bGF0ZT1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5rZWVwPW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5vdmVyZmxvdz1udWxsO3RoaXMucGFnZVNldD1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudHJhdmVyc2FsPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMudmFyaWFibGVzPW51bGw7dGhpcy5hcmVhPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWtBZnRlcj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQmVmb3JlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuY29ubmVjdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRyYXc9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5ldmVudD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV4T2JqZWN0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5wcm90bz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnNldFByb3BlcnR5PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXl9W3IuJGdldFN1YmZvcm1QYXJlbnRdKCl7Y29uc3QgZT10aGlzW3IuJGdldFBhcmVudF0oKTtyZXR1cm4gZSBpbnN0YW5jZW9mIFN1YmZvcm1TZXQ/ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpOmV9W3IuJGlzQmluZGFibGVdKCl7cmV0dXJuITB9W3IuJGlzVGhlcmVNb3JlV2lkdGhdKCl7cmV0dXJuIHRoaXMubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMD09PXRoaXNbci4kZXh0cmFdLmF0dGVtcHQmJnRoaXNbci4kZXh0cmFdLm51bWJlckluTGluZT4wfHx0aGlzW3IuJGdldFBhcmVudF0oKVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpfSpbci4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCl7eWllbGQqZ2V0Q29udGFpbmVkQ2hpbGRyZW4odGhpcyl9W3IuJGZsdXNoSFRNTF0oKXtyZXR1cm4oMCxpLmZsdXNoSFRNTCkodGhpcyl9W3IuJGFkZEhUTUxdKGUsdCl7KDAsaS5hZGRIVE1MKSh0aGlzLGUsdCl9W3IuJGdldEF2YWlsYWJsZVNwYWNlXSgpe3JldHVybigwLGkuZ2V0QXZhaWxhYmxlU3BhY2UpKHRoaXMpfVtyLiRpc1NwbGl0dGFibGVdKCl7Y29uc3QgZT10aGlzW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7aWYoIWVbci4kaXNTcGxpdHRhYmxlXSgpKXJldHVybiExO2lmKHZvaWQgMCE9PXRoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGUpcmV0dXJuIHRoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGU7aWYoInBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe3RoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITE7cmV0dXJuITF9aWYodGhpcy5rZWVwJiYibm9uZSIhPT10aGlzLmtlZXAuaW50YWN0KXt0aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlPSExO3JldHVybiExfWlmKGUubGF5b3V0Py5lbmRzV2l0aCgiLXRiIikmJjAhPT1lW3IuJGV4dHJhXS5udW1iZXJJbkxpbmUpcmV0dXJuITE7dGhpc1tyLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMDtyZXR1cm4hMH1bci4kdG9IVE1MXShlKXtzZXRUYWJJbmRleCh0aGlzKTtpZih0aGlzLmJyZWFrKXtpZigiYXV0byIhPT10aGlzLmJyZWFrLmFmdGVyfHwiIiE9PXRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQpe2NvbnN0IGU9bmV3IEJyZWFrQWZ0ZXIoe3RhcmdldFR5cGU6dGhpcy5icmVhay5hZnRlcix0YXJnZXQ6dGhpcy5icmVhay5hZnRlclRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtlW3IuJGdsb2JhbERhdGFdPXRoaXNbci4kZ2xvYmFsRGF0YV07dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7dGhpcy5icmVha0FmdGVyLnB1c2goZSl9aWYoImF1dG8iIT09dGhpcy5icmVhay5iZWZvcmV8fCIiIT09dGhpcy5icmVhay5iZWZvcmVUYXJnZXQpe2NvbnN0IGU9bmV3IEJyZWFrQmVmb3JlKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYmVmb3JlLHRhcmdldDp0aGlzLmJyZWFrLmJlZm9yZVRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtlW3IuJGdsb2JhbERhdGFdPXRoaXNbci4kZ2xvYmFsRGF0YV07dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7dGhpcy5icmVha0JlZm9yZS5wdXNoKGUpfWlmKCIiIT09dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCl7Y29uc3QgZT1uZXcgT3ZlcmZsb3coe3RhcmdldDp0aGlzLmJyZWFrLm92ZXJmbG93VGFyZ2V0LGxlYWRlcjp0aGlzLmJyZWFrLm92ZXJmbG93TGVhZGVyLHRyYWlsZXI6dGhpcy5icmVhay5vdmVyZmxvd1RyYWlsZXJ9KTtlW3IuJGdsb2JhbERhdGFdPXRoaXNbci4kZ2xvYmFsRGF0YV07dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7dGhpcy5vdmVyZmxvdy5wdXNoKGUpfXRoaXNbci4kcmVtb3ZlQ2hpbGRdKHRoaXMuYnJlYWspO3RoaXMuYnJlYWs9bnVsbH1pZigiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlKXJldHVybiBjLkhUTUxSZXN1bHQuRU1QVFk7KHRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPjF8fHRoaXMuYnJlYWtBZnRlci5jaGlsZHJlbi5sZW5ndGg+MSkmJigwLGwud2FybikoIlhGQSAtIFNldmVyYWwgYnJlYWtCZWZvcmUgb3IgYnJlYWtBZnRlciBpbiBzdWJmb3JtczogcGxlYXNlIGZpbGUgYSBidWcuIik7aWYodGhpcy5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTEpe2NvbnN0IGU9dGhpcy5icmVha0JlZm9yZS5jaGlsZHJlblswXTtpZihoYW5kbGVCcmVhayhlKSlyZXR1cm4gYy5IVE1MUmVzdWx0LmJyZWFrTm9kZShlKX1pZih0aGlzW3IuJGV4dHJhXT8uYWZ0ZXJCcmVha0FmdGVyKXJldHVybiBjLkhUTUxSZXN1bHQuRU1QVFk7KDAscy5maXhEaW1lbnNpb25zKSh0aGlzKTtjb25zdCB0PVtdLGE9e2lkOnRoaXNbci4kdWlkXSxjbGFzczpbXX07KDAscy5zZXRBY2Nlc3MpKHRoaXMsYS5jbGFzcyk7dGhpc1tyLiRleHRyYV18fCh0aGlzW3IuJGV4dHJhXT1PYmplY3QuY3JlYXRlKG51bGwpKTtPYmplY3QuYXNzaWduKHRoaXNbci4kZXh0cmFdLHtjaGlsZHJlbjp0LGxpbmU6bnVsbCxhdHRyaWJ1dGVzOmEsYXR0ZW1wdDowLG51bWJlckluTGluZTowLGF2YWlsYWJsZVNwYWNlOnt3aWR0aDpNYXRoLm1pbih0aGlzLnd8fDEvMCxlLndpZHRoKSxoZWlnaHQ6TWF0aC5taW4odGhpcy5ofHwxLzAsZS5oZWlnaHQpfSx3aWR0aDowLGhlaWdodDowLHByZXZIZWlnaHQ6MCxjdXJyZW50V2lkdGg6MH0pO2NvbnN0IG49dGhpc1tyLiRnZXRUZW1wbGF0ZVJvb3RdKCksbz1uW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUsaD10aGlzW3IuJGlzU3BsaXR0YWJsZV0oKTtofHxzZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtpZighKDAsaS5jaGVja0RpbWVuc2lvbnMpKHRoaXMsZSkpcmV0dXJuIGMuSFRNTFJlc3VsdC5GQUlMVVJFO2NvbnN0IHU9bmV3IFNldChbImFyZWEiLCJkcmF3IiwiZXhjbEdyb3VwIiwiZmllbGQiLCJzdWJmb3JtIiwic3ViZm9ybVNldCJdKTtpZih0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe2NvbnN0IGU9dGhpc1tyLiRnZXRTdWJmb3JtUGFyZW50XSgpLmNvbHVtbldpZHRocztpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wKXt0aGlzW3IuJGV4dHJhXS5jb2x1bW5XaWR0aHM9ZTt0aGlzW3IuJGV4dHJhXS5jdXJyZW50Q29sdW1uPTB9fWNvbnN0IGQ9KDAscy50b1N0eWxlKSh0aGlzLCJhbmNob3JUeXBlIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJib3JkZXIiLCJtYXJnaW4iLCJoQWxpZ24iKSxmPVsieGZhU3ViZm9ybSJdLGc9KDAscy5sYXlvdXRDbGFzcykodGhpcyk7ZyYmZi5wdXNoKGcpO2Euc3R5bGU9ZDthLmNsYXNzPWY7dGhpcy5uYW1lJiYoYS54ZmFOYW1lPXRoaXMubmFtZSk7aWYodGhpcy5vdmVyZmxvdyl7Y29uc3QgdD10aGlzLm92ZXJmbG93W3IuJGdldEV4dHJhXSgpO2lmKHQuYWRkTGVhZGVyKXt0LmFkZExlYWRlcj0hMTtoYW5kbGVPdmVyZmxvdyh0aGlzLHQubGVhZGVyLGUpfX10aGlzW3IuJHB1c2hQYXJhXSgpO2NvbnN0IHA9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQsbT1wPzI6MTtmb3IoO3RoaXNbci4kZXh0cmFdLmF0dGVtcHQ8bTt0aGlzW3IuJGV4dHJhXS5hdHRlbXB0Kyspe3AmJjE9PT10aGlzW3IuJGV4dHJhXS5hdHRlbXB0JiYodGhpc1tyLiRleHRyYV0ubnVtYmVySW5MaW5lPTApO2NvbnN0IGU9dGhpc1tyLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjp1LGluY2x1ZGU6ITB9KTtpZihlLnN1Y2Nlc3MpYnJlYWs7aWYoZS5pc0JyZWFrKCkpe3RoaXNbci4kcG9wUGFyYV0oKTtyZXR1cm4gZX1pZihwJiYwPT09dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCYmMD09PXRoaXNbci4kZXh0cmFdLm51bWJlckluTGluZSYmIW5bci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSl7dGhpc1tyLiRleHRyYV0uYXR0ZW1wdD1tO2JyZWFrfX10aGlzW3IuJHBvcFBhcmFdKCk7aHx8dW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtuW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9bztpZih0aGlzW3IuJGV4dHJhXS5hdHRlbXB0PT09bSl7dGhpcy5vdmVyZmxvdyYmKHRoaXNbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5vdmVyZmxvd05vZGU9dGhpcy5vdmVyZmxvdyk7aHx8ZGVsZXRlIHRoaXNbci4kZXh0cmFdO3JldHVybiBjLkhUTUxSZXN1bHQuRkFJTFVSRX1pZih0aGlzLm92ZXJmbG93KXtjb25zdCB0PXRoaXMub3ZlcmZsb3dbci4kZ2V0RXh0cmFdKCk7aWYodC5hZGRUcmFpbGVyKXt0LmFkZFRyYWlsZXI9ITE7aGFuZGxlT3ZlcmZsb3codGhpcyx0LnRyYWlsZXIsZSl9fWxldCBiPTAseT0wO2lmKHRoaXMubWFyZ2luKXtiPXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0O3k9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXR9Y29uc3Qgdz1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS53aWR0aCtiLHRoaXMud3x8MCksUz1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS5oZWlnaHQreSx0aGlzLmh8fDApLHg9W3RoaXMueCx0aGlzLnksdyxTXTsiIj09PXRoaXMudyYmKGQud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHcpKTsiIj09PXRoaXMuaCYmKGQuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKShTKSk7aWYoKCIwcHgiPT09ZC53aWR0aHx8IjBweCI9PT1kLmhlaWdodCkmJjA9PT10Lmxlbmd0aClyZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZO2NvbnN0IEM9e25hbWU6ImRpdiIsYXR0cmlidXRlczphLGNoaWxkcmVuOnR9O2FwcGx5QXNzaXN0KHRoaXMsYSk7Y29uc3Qgaz1jLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsQykseCk7aWYodGhpcy5icmVha0FmdGVyLmNoaWxkcmVuLmxlbmd0aD49MSl7Y29uc3QgZT10aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW5bMF07aWYoaGFuZGxlQnJlYWsoZSkpe3RoaXNbci4kZXh0cmFdLmFmdGVyQnJlYWtBZnRlcj1rO3JldHVybiBjLkhUTUxSZXN1bHQuYnJlYWtOb2RlKGUpfX1kZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIGt9fWNsYXNzIFN1YmZvcm1TZXQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJzdWJmb3JtU2V0IiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJlbGF0aW9uPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZCIsImNob2ljZSIsInVub3JkZXJlZCJdKTt0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2tlbmQ9bnVsbDt0aGlzLmJyZWFrPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5vdmVyZmxvdz1udWxsO3RoaXMuYnJlYWtBZnRlcj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQmVmb3JlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXl9KltyLiRnZXRDb250YWluZWRDaGlsZHJlbl0oKXt5aWVsZCpnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKX1bci4kZ2V0U3ViZm9ybVBhcmVudF0oKXtsZXQgZT10aGlzW3IuJGdldFBhcmVudF0oKTtmb3IoOyEoZSBpbnN0YW5jZW9mIFN1YmZvcm0pOyllPWVbci4kZ2V0UGFyZW50XSgpO3JldHVybiBlfVtyLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfX1jbGFzcyBTdWJqZWN0RE4gZXh0ZW5kcyBvLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwic3ViamVjdEROIik7dGhpcy5kZWxpbWl0ZXI9ZS5kZWxpbWl0ZXJ8fCIsIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7dGhpc1tyLiRjb250ZW50XT1uZXcgTWFwKHRoaXNbci4kY29udGVudF0uc3BsaXQodGhpcy5kZWxpbWl0ZXIpLm1hcCgoZT0+eyhlPWUuc3BsaXQoIj0iLDIpKVswXT1lWzBdLnRyaW0oKTtyZXR1cm4gZX0pKSl9fWNsYXNzIFN1YmplY3RETnMgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJzdWJqZWN0RE5zIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc3ViamVjdEROPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBTdWJtaXQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJzdWJtaXQiLCEwKTt0aGlzLmVtYmVkUERGPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5lbWJlZFBERixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuZm9ybWF0PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmZvcm1hdCxbInhkcCIsImZvcm1kYXRhIiwicGRmIiwidXJsZW5jb2RlZCIsInhmZCIsInhtbCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnRleHRFbmNvZGluZz0oMCxjLmdldEtleXdvcmQpKHtkYXRhOmUudGV4dEVuY29kaW5nP2UudGV4dEVuY29kaW5nLnRvTG93ZXJDYXNlKCk6IiIsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PlsidXRmLTgiLCJiaWctZml2ZSIsImZvbnRzcGVjaWZpYyIsImdiayIsImdiLTE4MDMwIiwiZ2ItMjMxMiIsImtzYy01NjAxIiwibm9uZSIsInNoaWZ0LWppcyIsInVjcy0yIiwidXRmLTE2Il0uaW5jbHVkZXMoZSl8fGUubWF0Y2goL2lzby04ODU5LVxkezJ9Lyl9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy54ZHBDb250ZW50PWUueGRwQ29udGVudHx8IiI7dGhpcy5lbmNyeXB0PW51bGw7dGhpcy5lbmNyeXB0RGF0YT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnNpZ25EYXRhPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBUZW1wbGF0ZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInRlbXBsYXRlIiwhMCk7dGhpcy5iYXNlUHJvZmlsZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5iYXNlUHJvZmlsZSxbImZ1bGwiLCJpbnRlcmFjdGl2ZUZvcm1zIl0pO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5zdWJmb3JtPW5ldyBvLlhGQU9iamVjdEFycmF5fVtyLiRmaW5hbGl6ZV0oKXswPT09dGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCYmKDAsbC53YXJuKSgiWEZBIC0gTm8gc3ViZm9ybXMgaW4gdGVtcGxhdGUgbm9kZS4iKTt0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0yJiYoMCxsLndhcm4pKCJYRkEgLSBTZXZlcmFsIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGU6IHBsZWFzZSBmaWxlIGEgYnVnLiIpO3RoaXNbci4kdGFiSW5kZXhdPTVlM31bci4kaXNTcGxpdHRhYmxlXSgpe3JldHVybiEwfVtyLiRzZWFyY2hOb2RlXShlLHQpe3JldHVybiBlLnN0YXJ0c1dpdGgoIiMiKT9bdGhpc1tyLiRpZHNdLmdldChlLnNsaWNlKDEpKV06KDAsZC5zZWFyY2hOb2RlKSh0aGlzLHQsZSwhMCwhMCl9KltyLiR0b1BhZ2VzXSgpe2lmKCF0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoKXJldHVybiBjLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXX0pO3RoaXNbci4kZXh0cmFdPXtvdmVyZmxvd05vZGU6bnVsbCxmaXJzdFVuc3BsaXR0YWJsZTpudWxsLGN1cnJlbnRDb250ZW50QXJlYTpudWxsLGN1cnJlbnRQYWdlQXJlYTpudWxsLG5vTGF5b3V0RmFpbHVyZTohMSxwYWdlTnVtYmVyOjEscGFnZVBvc2l0aW9uOiJmaXJzdCIsb2RkT3JFdmVuOiJvZGQiLGJsYW5rT3JOb3RCbGFuazoibm9uQmxhbmsiLHBhcmFTdGFjazpbXX07Y29uc3QgZT10aGlzLnN1YmZvcm0uY2hpbGRyZW5bMF07ZS5wYWdlU2V0W3IuJGNsZWFuUGFnZV0oKTtjb25zdCB0PWUucGFnZVNldC5wYWdlQXJlYS5jaGlsZHJlbixhPXtuYW1lOiJkaXYiLGNoaWxkcmVuOltdfTtsZXQgbj1udWxsLGk9bnVsbCxzPW51bGw7aWYoZS5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTEpe2k9ZS5icmVha0JlZm9yZS5jaGlsZHJlblswXTtzPWkudGFyZ2V0fWVsc2UgaWYoZS5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aD49MSYmZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD49MSl7aT1lLnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW5bMF07cz1pLnRhcmdldH1lbHNlIGlmKGUuYnJlYWs/LmJlZm9yZVRhcmdldCl7aT1lLmJyZWFrO3M9aS5iZWZvcmVUYXJnZXR9ZWxzZSBpZihlLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0xJiZlLnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWs/LmJlZm9yZVRhcmdldCl7aT1lLnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWs7cz1pLmJlZm9yZVRhcmdldH1pZihpKXtjb25zdCBlPXRoaXNbci4kc2VhcmNoTm9kZV0ocyxpW3IuJGdldFBhcmVudF0oKSk7aWYoZSBpbnN0YW5jZW9mIFBhZ2VBcmVhKXtuPWU7aVtyLiRleHRyYV09e319fW58fChuPXRbMF0pO25bci4kZXh0cmFdPXtudW1iZXJPZlVzZToxfTtjb25zdCBvPW5bci4kZ2V0UGFyZW50XSgpO29bci4kZXh0cmFdPXtudW1iZXJPZlVzZToxLHBhZ2VJbmRleDpvLnBhZ2VBcmVhLmNoaWxkcmVuLmluZGV4T2YobikscGFnZVNldEluZGV4OjB9O2xldCBoLHU9bnVsbCxkPW51bGwsZj0hMCxnPTAscD0wO2Zvcig7Oyl7aWYoZilnPTA7ZWxzZXthLmNoaWxkcmVuLnBvcCgpO2lmKDM9PSsrZyl7KDAsbC53YXJuKSgiWEZBIC0gU29tZXRoaW5nIGdvZXMgd3Jvbmc6IHBsZWFzZSBmaWxlIGEgYnVnLiIpO3JldHVybiBhfX1oPW51bGw7dGhpc1tyLiRleHRyYV0uY3VycmVudFBhZ2VBcmVhPW47Y29uc3QgdD1uW3IuJHRvSFRNTF0oKS5odG1sO2EuY2hpbGRyZW4ucHVzaCh0KTtpZih1KXt0aGlzW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITA7dC5jaGlsZHJlbi5wdXNoKHVbci4kdG9IVE1MXShuW3IuJGV4dHJhXS5zcGFjZSkuaHRtbCk7dT1udWxsfWlmKGQpe3RoaXNbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMDt0LmNoaWxkcmVuLnB1c2goZFtyLiR0b0hUTUxdKG5bci4kZXh0cmFdLnNwYWNlKS5odG1sKTtkPW51bGx9Y29uc3QgaT1uLmNvbnRlbnRBcmVhLmNoaWxkcmVuLHM9dC5jaGlsZHJlbi5maWx0ZXIoKGU9PmUuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygieGZhQ29udGVudGFyZWEiKSkpO2Y9ITE7dGhpc1tyLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGU9bnVsbDt0aGlzW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITE7Y29uc3QgZmx1c2g9dD0+e2NvbnN0IGE9ZVtyLiRmbHVzaEhUTUxdKCk7aWYoYSl7Znx8PWEuY2hpbGRyZW4/Lmxlbmd0aD4wO3NbdF0uY2hpbGRyZW4ucHVzaChhKX19O2ZvcihsZXQgdD1wLG49aS5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj10aGlzW3IuJGV4dHJhXS5jdXJyZW50Q29udGVudEFyZWE9aVt0XSxvPXt3aWR0aDpuLncsaGVpZ2h0Om4uaH07cD0wO2lmKHUpe3NbdF0uY2hpbGRyZW4ucHVzaCh1W3IuJHRvSFRNTF0obykuaHRtbCk7dT1udWxsfWlmKGQpe3NbdF0uY2hpbGRyZW4ucHVzaChkW3IuJHRvSFRNTF0obykuaHRtbCk7ZD1udWxsfWNvbnN0IGM9ZVtyLiR0b0hUTUxdKG8pO2lmKGMuc3VjY2Vzcyl7aWYoYy5odG1sKXtmfHw9Yy5odG1sLmNoaWxkcmVuPy5sZW5ndGg+MDtzW3RdLmNoaWxkcmVuLnB1c2goYy5odG1sKX1lbHNlIWYmJmEuY2hpbGRyZW4ubGVuZ3RoPjEmJmEuY2hpbGRyZW4ucG9wKCk7cmV0dXJuIGF9aWYoYy5pc0JyZWFrKCkpe2NvbnN0IGU9Yy5icmVha05vZGU7Zmx1c2godCk7aWYoImF1dG8iPT09ZS50YXJnZXRUeXBlKWNvbnRpbnVlO2lmKGUubGVhZGVyKXt1PXRoaXNbci4kc2VhcmNoTm9kZV0oZS5sZWFkZXIsZVtyLiRnZXRQYXJlbnRdKCkpO3U9dT91WzBdOm51bGx9aWYoZS50cmFpbGVyKXtkPXRoaXNbci4kc2VhcmNoTm9kZV0oZS50cmFpbGVyLGVbci4kZ2V0UGFyZW50XSgpKTtkPWQ/ZFswXTpudWxsfWlmKCJwYWdlQXJlYSI9PT1lLnRhcmdldFR5cGUpe2g9ZVtyLiRleHRyYV0udGFyZ2V0O3Q9MS8wfWVsc2UgaWYoZVtyLiRleHRyYV0udGFyZ2V0KXtoPWVbci4kZXh0cmFdLnRhcmdldDtwPWVbci4kZXh0cmFdLmluZGV4KzE7dD0xLzB9ZWxzZSB0PWVbci4kZXh0cmFdLmluZGV4fWVsc2UgaWYodGhpc1tyLiRleHRyYV0ub3ZlcmZsb3dOb2RlKXtjb25zdCBlPXRoaXNbci4kZXh0cmFdLm92ZXJmbG93Tm9kZTt0aGlzW3IuJGV4dHJhXS5vdmVyZmxvd05vZGU9bnVsbDtjb25zdCBhPWVbci4kZ2V0RXh0cmFdKCksbj1hLnRhcmdldDthLmFkZExlYWRlcj1udWxsIT09YS5sZWFkZXI7YS5hZGRUcmFpbGVyPW51bGwhPT1hLnRyYWlsZXI7Zmx1c2godCk7Y29uc3Qgcz10O3Q9MS8wO2lmKG4gaW5zdGFuY2VvZiBQYWdlQXJlYSloPW47ZWxzZSBpZihuIGluc3RhbmNlb2YgQ29udGVudEFyZWEpe2NvbnN0IGU9aS5pbmRleE9mKG4pO2lmKC0xIT09ZSllPnM/dD1lLTE6cD1lO2Vsc2V7aD1uW3IuJGdldFBhcmVudF0oKTtwPWguY29udGVudEFyZWEuY2hpbGRyZW4uaW5kZXhPZihuKX19fWVsc2UgZmx1c2godCl9dGhpc1tyLiRleHRyYV0ucGFnZU51bWJlcis9MTtoJiYoaFtyLiRpc1VzYWJsZV0oKT9oW3IuJGV4dHJhXS5udW1iZXJPZlVzZSs9MTpoPW51bGwpO249aHx8bltyLiRnZXROZXh0UGFnZV0oKTt5aWVsZCBudWxsfX19dC5UZW1wbGF0ZT1UZW1wbGF0ZTtjbGFzcyBUZXh0IGV4dGVuZHMgby5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInRleHQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubWF4Q2hhcnM9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heENoYXJzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJpZD1lLnJpZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRhY2NlcHRXaGl0ZXNwYWNlXSgpe3JldHVybiEwfVtyLiRvbkNoaWxkXShlKXtpZihlW3IuJG5hbWVzcGFjZUlkXT09PW4uTmFtZXNwYWNlSWRzLnhodG1sLmlkKXt0aGlzW3IuJGNvbnRlbnRdPWU7cmV0dXJuITB9KDAsbC53YXJuKShgWEZBIC0gSW52YWxpZCBjb250ZW50IGluIFRleHQ6ICR7ZVtyLiRub2RlTmFtZV19LmApO3JldHVybiExfVtyLiRvblRleHRdKGUpe3RoaXNbci4kY29udGVudF1pbnN0YW5jZW9mIG8uWEZBT2JqZWN0fHxzdXBlcltyLiRvblRleHRdKGUpfVtyLiRmaW5hbGl6ZV0oKXsic3RyaW5nIj09dHlwZW9mIHRoaXNbci4kY29udGVudF0mJih0aGlzW3IuJGNvbnRlbnRdPXRoaXNbci4kY29udGVudF0ucmVwbGFjZUFsbCgiXHJcbiIsIlxuIikpfVtyLiRnZXRFeHRyYV0oKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS5zcGxpdCgvW1x1MjAyOVx1MjAyOFxuXS8pLnJlZHVjZSgoKGUsdCk9Pnt0JiZlLnB1c2godCk7cmV0dXJuIGV9KSxbXSkuam9pbigiXG4iKTp0aGlzW3IuJGNvbnRlbnRdW3IuJHRleHRdKCl9W3IuJHRvSFRNTF0oZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzW3IuJGNvbnRlbnRdKXtjb25zdCBlPXZhbHVlVG9IdG1sKHRoaXNbci4kY29udGVudF0pLmh0bWw7aWYodGhpc1tyLiRjb250ZW50XS5pbmNsdWRlcygiXHUyMDI5Iikpe2UubmFtZT0iZGl2IjtlLmNoaWxkcmVuPVtdO3RoaXNbci4kY29udGVudF0uc3BsaXQoIlx1MjAyOSIpLm1hcCgoZT0+ZS5zcGxpdCgvW1x1MjAyOFxuXS8pLnJlZHVjZSgoKGUsdCk9PntlLnB1c2goe25hbWU6InNwYW4iLHZhbHVlOnR9LHtuYW1lOiJiciJ9KTtyZXR1cm4gZX0pLFtdKSkpLmZvckVhY2goKHQ9PntlLmNoaWxkcmVuLnB1c2goe25hbWU6InAiLGNoaWxkcmVuOnR9KX0pKX1lbHNlIGlmKC9bXHUyMDI4XG5dLy50ZXN0KHRoaXNbci4kY29udGVudF0pKXtlLm5hbWU9ImRpdiI7ZS5jaGlsZHJlbj1bXTt0aGlzW3IuJGNvbnRlbnRdLnNwbGl0KC9bXHUyMDI4XG5dLykuZm9yRWFjaCgodD0+e2UuY2hpbGRyZW4ucHVzaCh7bmFtZToic3BhbiIsdmFsdWU6dH0se25hbWU6ImJyIn0pfSkpfXJldHVybiBjLkhUTUxSZXN1bHQuc3VjY2VzcyhlKX1yZXR1cm4gdGhpc1tyLiRjb250ZW50XVtyLiR0b0hUTUxdKGUpfX10LlRleHQ9VGV4dDtjbGFzcyBUZXh0RWRpdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInRleHRFZGl0IiwhMCk7dGhpcy5hbGxvd1JpY2hUZXh0PSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5hbGxvd1JpY2hUZXh0LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5oU2Nyb2xsUG9saWN5PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm11bHRpTGluZT0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUubXVsdGlMaW5lLGRlZmF1bHRWYWx1ZToiIix2YWxpZGF0ZTplPT4wPT09ZXx8MT09PWV9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy52U2Nyb2xsUG9saWN5PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnZTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSk7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNvbWI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD0oMCxzLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsImZvbnQiLCJtYXJnaW4iKTtsZXQgYTtjb25zdCBuPXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKTsiIj09PXRoaXMubXVsdGlMaW5lJiYodGhpcy5tdWx0aUxpbmU9biBpbnN0YW5jZW9mIERyYXc/MTowKTthPTE9PT10aGlzLm11bHRpTGluZT97bmFtZToidGV4dGFyZWEiLGF0dHJpYnV0ZXM6e2RhdGFJZDpuW3IuJGRhdGFdPy5bci4kdWlkXXx8bltyLiR1aWRdLGZpZWxkSWQ6bltyLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6dCwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKG4pLCJhcmlhLXJlcXVpcmVkIjohMX19OntuYW1lOiJpbnB1dCIsYXR0cmlidXRlczp7dHlwZToidGV4dCIsZGF0YUlkOm5bci4kZGF0YV0/LltyLiR1aWRdfHxuW3IuJHVpZF0sZmllbGRJZDpuW3IuJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwobiksImFyaWEtcmVxdWlyZWQiOiExfX07aWYoaXNSZXF1aXJlZChuKSl7YS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITA7YS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwfXJldHVybiBjLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W2FdfSl9fWNsYXNzIFRpbWUgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJ0aW1lIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGZpbmFsaXplXSgpe2NvbnN0IGU9dGhpc1tyLiRjb250ZW50XS50cmltKCk7dGhpc1tyLiRjb250ZW50XT1lP25ldyBEYXRlKGUpOm51bGx9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgVGltZVN0YW1wIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwidGltZVN0YW1wIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnNlcnZlcj1lLnNlcnZlcnx8IiI7dGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgVG9vbFRpcCBleHRlbmRzIG8uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInRvb2xUaXAiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucmlkPWUucmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFRyYXZlcnNhbCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInRyYXZlcnNhbCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy50cmF2ZXJzZT1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgVHJhdmVyc2UgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJ0cmF2ZXJzZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVyYXRpb249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUub3BlcmF0aW9uLFsibmV4dCIsImJhY2siLCJkb3duIiwiZmlyc3QiLCJsZWZ0IiwicmlnaHQiLCJ1cCJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5zY3JpcHQ9bnVsbH1nZXQgbmFtZSgpe3JldHVybiB0aGlzLm9wZXJhdGlvbn1bci4kaXNUcmFuc3BhcmVudF0oKXtyZXR1cm4hMX19Y2xhc3MgVWkgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJ1aSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5waWN0dXJlPW51bGw7dGhpcy5iYXJjb2RlPW51bGw7dGhpcy5idXR0b249bnVsbDt0aGlzLmNoZWNrQnV0dG9uPW51bGw7dGhpcy5jaG9pY2VMaXN0PW51bGw7dGhpcy5kYXRlVGltZUVkaXQ9bnVsbDt0aGlzLmRlZmF1bHRVaT1udWxsO3RoaXMuaW1hZ2VFZGl0PW51bGw7dGhpcy5udW1lcmljRWRpdD1udWxsO3RoaXMucGFzc3dvcmRFZGl0PW51bGw7dGhpcy5zaWduYXR1cmU9bnVsbDt0aGlzLnRleHRFZGl0PW51bGx9W3IuJGdldEV4dHJhXSgpe2lmKHZvaWQgMD09PXRoaXNbci4kZXh0cmFdKXtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYoImV4dHJhcyI9PT1lfHwicGljdHVyZSI9PT1lKWNvbnRpbnVlO2NvbnN0IHQ9dGhpc1tlXTtpZih0IGluc3RhbmNlb2Ygby5YRkFPYmplY3Qpe3RoaXNbci4kZXh0cmFdPXQ7cmV0dXJuIHR9fXRoaXNbci4kZXh0cmFdPW51bGx9cmV0dXJuIHRoaXNbci4kZXh0cmFdfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9dGhpc1tyLiRnZXRFeHRyYV0oKTtyZXR1cm4gdD90W3IuJHRvSFRNTF0oZSk6Yy5IVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBWYWxpZGF0ZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInZhbGlkYXRlIiwhMCk7dGhpcy5mb3JtYXRUZXN0PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmZvcm1hdFRlc3QsWyJ3YXJuaW5nIiwiZGlzYWJsZWQiLCJlcnJvciJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubnVsbFRlc3Q9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUubnVsbFRlc3QsWyJkaXNhYmxlZCIsImVycm9yIiwid2FybmluZyJdKTt0aGlzLnNjcmlwdFRlc3Q9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuc2NyaXB0VGVzdCxbImVycm9yIiwiZGlzYWJsZWQiLCJ3YXJuaW5nIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWVzc2FnZT1udWxsO3RoaXMucGljdHVyZT1udWxsO3RoaXMuc2NyaXB0PW51bGx9fWNsYXNzIFZhbHVlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwidmFsdWUiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3ZlcnJpZGU9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm92ZXJyaWRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5yZWxldmFudD0oMCxjLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5hcmM9bnVsbDt0aGlzLmJvb2xlYW49bnVsbDt0aGlzLmRhdGU9bnVsbDt0aGlzLmRhdGVUaW1lPW51bGw7dGhpcy5kZWNpbWFsPW51bGw7dGhpcy5leERhdGE9bnVsbDt0aGlzLmZsb2F0PW51bGw7dGhpcy5pbWFnZT1udWxsO3RoaXMuaW50ZWdlcj1udWxsO3RoaXMubGluZT1udWxsO3RoaXMucmVjdGFuZ2xlPW51bGw7dGhpcy50ZXh0PW51bGw7dGhpcy50aW1lPW51bGx9W3IuJHNldFZhbHVlXShlKXtjb25zdCB0PXRoaXNbci4kZ2V0UGFyZW50XSgpO2lmKHQgaW5zdGFuY2VvZiBGaWVsZCYmdC51aT8uaW1hZ2VFZGl0KXtpZighdGhpcy5pbWFnZSl7dGhpcy5pbWFnZT1uZXcgSW1hZ2Uoe30pO3RoaXNbci4kYXBwZW5kQ2hpbGRdKHRoaXMuaW1hZ2UpfXRoaXMuaW1hZ2Vbci4kY29udGVudF09ZVtyLiRjb250ZW50XTtyZXR1cm59Y29uc3QgYT1lW3IuJG5vZGVOYW1lXTtpZihudWxsPT09dGhpc1thXSl7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2NvbnN0IHQ9dGhpc1tlXTtpZih0IGluc3RhbmNlb2Ygby5YRkFPYmplY3Qpe3RoaXNbZV09bnVsbDt0aGlzW3IuJHJlbW92ZUNoaWxkXSh0KX19dGhpc1tlW3IuJG5vZGVOYW1lXV09ZTt0aGlzW3IuJGFwcGVuZENoaWxkXShlKX1lbHNlIHRoaXNbYV1bci4kY29udGVudF09ZVtyLiRjb250ZW50XX1bci4kdGV4dF0oKXtpZih0aGlzLmV4RGF0YSlyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHRoaXMuZXhEYXRhW3IuJGNvbnRlbnRdP3RoaXMuZXhEYXRhW3IuJGNvbnRlbnRdLnRyaW0oKTp0aGlzLmV4RGF0YVtyLiRjb250ZW50XVtyLiR0ZXh0XSgpLnRyaW0oKTtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYoImltYWdlIj09PWUpY29udGludWU7Y29uc3QgdD10aGlzW2VdO2lmKHQgaW5zdGFuY2VvZiBvLlhGQU9iamVjdClyZXR1cm4odFtyLiRjb250ZW50XXx8IiIpLnRvU3RyaW5nKCkudHJpbSgpfXJldHVybiBudWxsfVtyLiR0b0hUTUxdKGUpe2Zvcihjb25zdCB0IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtjb25zdCBhPXRoaXNbdF07aWYoYSBpbnN0YW5jZW9mIG8uWEZBT2JqZWN0KXJldHVybiBhW3IuJHRvSFRNTF0oZSl9cmV0dXJuIGMuSFRNTFJlc3VsdC5FTVBUWX19dC5WYWx1ZT1WYWx1ZTtjbGFzcyBWYXJpYWJsZXMgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJ2YXJpYWJsZXMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2xlYW49bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZmxvYXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5tYW5pZmVzdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnNjcmlwdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyBvLlhGQU9iamVjdEFycmF5fVtyLiRpc1RyYW5zcGFyZW50XSgpe3JldHVybiEwfX1jbGFzcyBUZW1wbGF0ZU5hbWVzcGFjZXtzdGF0aWNbbi4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoVGVtcGxhdGVOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpe2NvbnN0IGE9VGVtcGxhdGVOYW1lc3BhY2VbZV0odCk7YVtyLiRzZXRTZXRBdHRyaWJ1dGVzXSh0KTtyZXR1cm4gYX19c3RhdGljIGFwcGVhcmFuY2VGaWx0ZXIoZSl7cmV0dXJuIG5ldyBBcHBlYXJhbmNlRmlsdGVyKGUpfXN0YXRpYyBhcmMoZSl7cmV0dXJuIG5ldyBBcmMoZSl9c3RhdGljIGFyZWEoZSl7cmV0dXJuIG5ldyBBcmVhKGUpfXN0YXRpYyBhc3Npc3QoZSl7cmV0dXJuIG5ldyBBc3Npc3QoZSl9c3RhdGljIGJhcmNvZGUoZSl7cmV0dXJuIG5ldyBCYXJjb2RlKGUpfXN0YXRpYyBiaW5kKGUpe3JldHVybiBuZXcgQmluZChlKX1zdGF0aWMgYmluZEl0ZW1zKGUpe3JldHVybiBuZXcgQmluZEl0ZW1zKGUpfXN0YXRpYyBib29rZW5kKGUpe3JldHVybiBuZXcgQm9va2VuZChlKX1zdGF0aWMgYm9vbGVhbihlKXtyZXR1cm4gbmV3IEJvb2xlYW5FbGVtZW50KGUpfXN0YXRpYyBib3JkZXIoZSl7cmV0dXJuIG5ldyBCb3JkZXIoZSl9c3RhdGljIGJyZWFrKGUpe3JldHVybiBuZXcgQnJlYWsoZSl9c3RhdGljIGJyZWFrQWZ0ZXIoZSl7cmV0dXJuIG5ldyBCcmVha0FmdGVyKGUpfXN0YXRpYyBicmVha0JlZm9yZShlKXtyZXR1cm4gbmV3IEJyZWFrQmVmb3JlKGUpfXN0YXRpYyBidXR0b24oZSl7cmV0dXJuIG5ldyBCdXR0b24oZSl9c3RhdGljIGNhbGN1bGF0ZShlKXtyZXR1cm4gbmV3IENhbGN1bGF0ZShlKX1zdGF0aWMgY2FwdGlvbihlKXtyZXR1cm4gbmV3IENhcHRpb24oZSl9c3RhdGljIGNlcnRpZmljYXRlKGUpe3JldHVybiBuZXcgQ2VydGlmaWNhdGUoZSl9c3RhdGljIGNlcnRpZmljYXRlcyhlKXtyZXR1cm4gbmV3IENlcnRpZmljYXRlcyhlKX1zdGF0aWMgY2hlY2tCdXR0b24oZSl7cmV0dXJuIG5ldyBDaGVja0J1dHRvbihlKX1zdGF0aWMgY2hvaWNlTGlzdChlKXtyZXR1cm4gbmV3IENob2ljZUxpc3QoZSl9c3RhdGljIGNvbG9yKGUpe3JldHVybiBuZXcgQ29sb3IoZSl9c3RhdGljIGNvbWIoZSl7cmV0dXJuIG5ldyBDb21iKGUpfXN0YXRpYyBjb25uZWN0KGUpe3JldHVybiBuZXcgQ29ubmVjdChlKX1zdGF0aWMgY29udGVudEFyZWEoZSl7cmV0dXJuIG5ldyBDb250ZW50QXJlYShlKX1zdGF0aWMgY29ybmVyKGUpe3JldHVybiBuZXcgQ29ybmVyKGUpfXN0YXRpYyBkYXRlKGUpe3JldHVybiBuZXcgRGF0ZUVsZW1lbnQoZSl9c3RhdGljIGRhdGVUaW1lKGUpe3JldHVybiBuZXcgRGF0ZVRpbWUoZSl9c3RhdGljIGRhdGVUaW1lRWRpdChlKXtyZXR1cm4gbmV3IERhdGVUaW1lRWRpdChlKX1zdGF0aWMgZGVjaW1hbChlKXtyZXR1cm4gbmV3IERlY2ltYWwoZSl9c3RhdGljIGRlZmF1bHRVaShlKXtyZXR1cm4gbmV3IERlZmF1bHRVaShlKX1zdGF0aWMgZGVzYyhlKXtyZXR1cm4gbmV3IERlc2MoZSl9c3RhdGljIGRpZ2VzdE1ldGhvZChlKXtyZXR1cm4gbmV3IERpZ2VzdE1ldGhvZChlKX1zdGF0aWMgZGlnZXN0TWV0aG9kcyhlKXtyZXR1cm4gbmV3IERpZ2VzdE1ldGhvZHMoZSl9c3RhdGljIGRyYXcoZSl7cmV0dXJuIG5ldyBEcmF3KGUpfXN0YXRpYyBlZGdlKGUpe3JldHVybiBuZXcgRWRnZShlKX1zdGF0aWMgZW5jb2RpbmcoZSl7cmV0dXJuIG5ldyBFbmNvZGluZyhlKX1zdGF0aWMgZW5jb2RpbmdzKGUpe3JldHVybiBuZXcgRW5jb2RpbmdzKGUpfXN0YXRpYyBlbmNyeXB0KGUpe3JldHVybiBuZXcgRW5jcnlwdChlKX1zdGF0aWMgZW5jcnlwdERhdGEoZSl7cmV0dXJuIG5ldyBFbmNyeXB0RGF0YShlKX1zdGF0aWMgZW5jcnlwdGlvbihlKXtyZXR1cm4gbmV3IEVuY3J5cHRpb24oZSl9c3RhdGljIGVuY3J5cHRpb25NZXRob2QoZSl7cmV0dXJuIG5ldyBFbmNyeXB0aW9uTWV0aG9kKGUpfXN0YXRpYyBlbmNyeXB0aW9uTWV0aG9kcyhlKXtyZXR1cm4gbmV3IEVuY3J5cHRpb25NZXRob2RzKGUpfXN0YXRpYyBldmVudChlKXtyZXR1cm4gbmV3IEV2ZW50KGUpfXN0YXRpYyBleERhdGEoZSl7cmV0dXJuIG5ldyBFeERhdGEoZSl9c3RhdGljIGV4T2JqZWN0KGUpe3JldHVybiBuZXcgRXhPYmplY3QoZSl9c3RhdGljIGV4Y2xHcm91cChlKXtyZXR1cm4gbmV3IEV4Y2xHcm91cChlKX1zdGF0aWMgZXhlY3V0ZShlKXtyZXR1cm4gbmV3IEV4ZWN1dGUoZSl9c3RhdGljIGV4dHJhcyhlKXtyZXR1cm4gbmV3IEV4dHJhcyhlKX1zdGF0aWMgZmllbGQoZSl7cmV0dXJuIG5ldyBGaWVsZChlKX1zdGF0aWMgZmlsbChlKXtyZXR1cm4gbmV3IEZpbGwoZSl9c3RhdGljIGZpbHRlcihlKXtyZXR1cm4gbmV3IEZpbHRlcihlKX1zdGF0aWMgZmxvYXQoZSl7cmV0dXJuIG5ldyBGbG9hdChlKX1zdGF0aWMgZm9udChlKXtyZXR1cm4gbmV3IEZvbnQoZSl9c3RhdGljIGZvcm1hdChlKXtyZXR1cm4gbmV3IEZvcm1hdChlKX1zdGF0aWMgaGFuZGxlcihlKXtyZXR1cm4gbmV3IEhhbmRsZXIoZSl9c3RhdGljIGh5cGhlbmF0aW9uKGUpe3JldHVybiBuZXcgSHlwaGVuYXRpb24oZSl9c3RhdGljIGltYWdlKGUpe3JldHVybiBuZXcgSW1hZ2UoZSl9c3RhdGljIGltYWdlRWRpdChlKXtyZXR1cm4gbmV3IEltYWdlRWRpdChlKX1zdGF0aWMgaW50ZWdlcihlKXtyZXR1cm4gbmV3IEludGVnZXIoZSl9c3RhdGljIGlzc3VlcnMoZSl7cmV0dXJuIG5ldyBJc3N1ZXJzKGUpfXN0YXRpYyBpdGVtcyhlKXtyZXR1cm4gbmV3IEl0ZW1zKGUpfXN0YXRpYyBrZWVwKGUpe3JldHVybiBuZXcgS2VlcChlKX1zdGF0aWMga2V5VXNhZ2UoZSl7cmV0dXJuIG5ldyBLZXlVc2FnZShlKX1zdGF0aWMgbGluZShlKXtyZXR1cm4gbmV3IExpbmUoZSl9c3RhdGljIGxpbmVhcihlKXtyZXR1cm4gbmV3IExpbmVhcihlKX1zdGF0aWMgbG9ja0RvY3VtZW50KGUpe3JldHVybiBuZXcgTG9ja0RvY3VtZW50KGUpfXN0YXRpYyBtYW5pZmVzdChlKXtyZXR1cm4gbmV3IE1hbmlmZXN0KGUpfXN0YXRpYyBtYXJnaW4oZSl7cmV0dXJuIG5ldyBNYXJnaW4oZSl9c3RhdGljIG1kcChlKXtyZXR1cm4gbmV3IE1kcChlKX1zdGF0aWMgbWVkaXVtKGUpe3JldHVybiBuZXcgTWVkaXVtKGUpfXN0YXRpYyBtZXNzYWdlKGUpe3JldHVybiBuZXcgTWVzc2FnZShlKX1zdGF0aWMgbnVtZXJpY0VkaXQoZSl7cmV0dXJuIG5ldyBOdW1lcmljRWRpdChlKX1zdGF0aWMgb2NjdXIoZSl7cmV0dXJuIG5ldyBPY2N1cihlKX1zdGF0aWMgb2lkKGUpe3JldHVybiBuZXcgT2lkKGUpfXN0YXRpYyBvaWRzKGUpe3JldHVybiBuZXcgT2lkcyhlKX1zdGF0aWMgb3ZlcmZsb3coZSl7cmV0dXJuIG5ldyBPdmVyZmxvdyhlKX1zdGF0aWMgcGFnZUFyZWEoZSl7cmV0dXJuIG5ldyBQYWdlQXJlYShlKX1zdGF0aWMgcGFnZVNldChlKXtyZXR1cm4gbmV3IFBhZ2VTZXQoZSl9c3RhdGljIHBhcmEoZSl7cmV0dXJuIG5ldyBQYXJhKGUpfXN0YXRpYyBwYXNzd29yZEVkaXQoZSl7cmV0dXJuIG5ldyBQYXNzd29yZEVkaXQoZSl9c3RhdGljIHBhdHRlcm4oZSl7cmV0dXJuIG5ldyBQYXR0ZXJuKGUpfXN0YXRpYyBwaWN0dXJlKGUpe3JldHVybiBuZXcgUGljdHVyZShlKX1zdGF0aWMgcHJvdG8oZSl7cmV0dXJuIG5ldyBQcm90byhlKX1zdGF0aWMgcmFkaWFsKGUpe3JldHVybiBuZXcgUmFkaWFsKGUpfXN0YXRpYyByZWFzb24oZSl7cmV0dXJuIG5ldyBSZWFzb24oZSl9c3RhdGljIHJlYXNvbnMoZSl7cmV0dXJuIG5ldyBSZWFzb25zKGUpfXN0YXRpYyByZWN0YW5nbGUoZSl7cmV0dXJuIG5ldyBSZWN0YW5nbGUoZSl9c3RhdGljIHJlZihlKXtyZXR1cm4gbmV3IFJlZkVsZW1lbnQoZSl9c3RhdGljIHNjcmlwdChlKXtyZXR1cm4gbmV3IFNjcmlwdChlKX1zdGF0aWMgc2V0UHJvcGVydHkoZSl7cmV0dXJuIG5ldyBTZXRQcm9wZXJ0eShlKX1zdGF0aWMgc2lnbkRhdGEoZSl7cmV0dXJuIG5ldyBTaWduRGF0YShlKX1zdGF0aWMgc2lnbmF0dXJlKGUpe3JldHVybiBuZXcgU2lnbmF0dXJlKGUpfXN0YXRpYyBzaWduaW5nKGUpe3JldHVybiBuZXcgU2lnbmluZyhlKX1zdGF0aWMgc29saWQoZSl7cmV0dXJuIG5ldyBTb2xpZChlKX1zdGF0aWMgc3BlYWsoZSl7cmV0dXJuIG5ldyBTcGVhayhlKX1zdGF0aWMgc3RpcHBsZShlKXtyZXR1cm4gbmV3IFN0aXBwbGUoZSl9c3RhdGljIHN1YmZvcm0oZSl7cmV0dXJuIG5ldyBTdWJmb3JtKGUpfXN0YXRpYyBzdWJmb3JtU2V0KGUpe3JldHVybiBuZXcgU3ViZm9ybVNldChlKX1zdGF0aWMgc3ViamVjdEROKGUpe3JldHVybiBuZXcgU3ViamVjdEROKGUpfXN0YXRpYyBzdWJqZWN0RE5zKGUpe3JldHVybiBuZXcgU3ViamVjdEROcyhlKX1zdGF0aWMgc3VibWl0KGUpe3JldHVybiBuZXcgU3VibWl0KGUpfXN0YXRpYyB0ZW1wbGF0ZShlKXtyZXR1cm4gbmV3IFRlbXBsYXRlKGUpfXN0YXRpYyB0ZXh0KGUpe3JldHVybiBuZXcgVGV4dChlKX1zdGF0aWMgdGV4dEVkaXQoZSl7cmV0dXJuIG5ldyBUZXh0RWRpdChlKX1zdGF0aWMgdGltZShlKXtyZXR1cm4gbmV3IFRpbWUoZSl9c3RhdGljIHRpbWVTdGFtcChlKXtyZXR1cm4gbmV3IFRpbWVTdGFtcChlKX1zdGF0aWMgdG9vbFRpcChlKXtyZXR1cm4gbmV3IFRvb2xUaXAoZSl9c3RhdGljIHRyYXZlcnNhbChlKXtyZXR1cm4gbmV3IFRyYXZlcnNhbChlKX1zdGF0aWMgdHJhdmVyc2UoZSl7cmV0dXJuIG5ldyBUcmF2ZXJzZShlKX1zdGF0aWMgdWkoZSl7cmV0dXJuIG5ldyBVaShlKX1zdGF0aWMgdmFsaWRhdGUoZSl7cmV0dXJuIG5ldyBWYWxpZGF0ZShlKX1zdGF0aWMgdmFsdWUoZSl7cmV0dXJuIG5ldyBWYWx1ZShlKX1zdGF0aWMgdmFyaWFibGVzKGUpe3JldHVybiBuZXcgVmFyaWFibGVzKGUpfX10LlRlbXBsYXRlTmFtZXNwYWNlPVRlbXBsYXRlTmFtZXNwYWNlfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk5hbWVzcGFjZUlkcz10LiRidWlsZFhGQU9iamVjdD12b2lkIDA7Y29uc3QgYT1TeW1ib2woKTt0LiRidWlsZFhGQU9iamVjdD1hO3QuTmFtZXNwYWNlSWRzPXtjb25maWc6e2lkOjAsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hjaS8iKX0sY29ubmVjdGlvblNldDp7aWQ6MSxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWNvbm5lY3Rpb24tc2V0LyIpfSxkYXRhc2V0czp7aWQ6MixjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWRhdGEvIil9LGZvcm06e2lkOjMsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1mb3JtLyIpfSxsb2NhbGVTZXQ6e2lkOjQsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1sb2NhbGUtc2V0LyIpfSxwZGY6e2lkOjUsY2hlY2s6ZT0+Imh0dHA6Ly9ucy5hZG9iZS5jb20veGRwL3BkZi8iPT09ZX0sc2lnbmF0dXJlOntpZDo2LGNoZWNrOmU9PiJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj09PWV9LHNvdXJjZVNldDp7aWQ6NyxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXNvdXJjZS1zZXQvIil9LHN0eWxlc2hlZXQ6e2lkOjgsY2hlY2s6ZT0+Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI9PT1lfSx0ZW1wbGF0ZTp7aWQ6OSxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXRlbXBsYXRlLyIpfSx4ZGM6e2lkOjEwLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZGMvIil9LHhkcDp7aWQ6MTEsY2hlY2s6ZT0+Imh0dHA6Ly9ucy5hZG9iZS5jb20veGRwLyI9PT1lfSx4ZmRmOntpZDoxMixjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94ZmRmLyI9PT1lfSx4aHRtbDp7aWQ6MTMsY2hlY2s6ZT0+Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPT09ZX0seG1wbWV0YTp7aWQ6MTQsY2hlY2s6ZT0+Imh0dHA6Ly9ucy5hZG9iZS5jb20veG1wbWV0YS8iPT09ZX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuYWRkSFRNTD1mdW5jdGlvbiBhZGRIVE1MKGUsdCxhKXtjb25zdCBpPWVbci4kZXh0cmFdLHM9aS5hdmFpbGFibGVTcGFjZSxbbyxjLGwsaF09YTtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UicG9zaXRpb24iOmkud2lkdGg9TWF0aC5tYXgoaS53aWR0aCxvK2wpO2kuaGVpZ2h0PU1hdGgubWF4KGkuaGVpZ2h0LGMraCk7aS5jaGlsZHJlbi5wdXNoKHQpO2JyZWFrO2Nhc2UibHItdGIiOmNhc2UicmwtdGIiOmlmKCFpLmxpbmV8fDE9PT1pLmF0dGVtcHQpe2kubGluZT1jcmVhdGVMaW5lKGUsW10pO2kuY2hpbGRyZW4ucHVzaChpLmxpbmUpO2kubnVtYmVySW5MaW5lPTB9aS5udW1iZXJJbkxpbmUrPTE7aS5saW5lLmNoaWxkcmVuLnB1c2godCk7aWYoMD09PWkuYXR0ZW1wdCl7aS5jdXJyZW50V2lkdGgrPWw7aS5oZWlnaHQ9TWF0aC5tYXgoaS5oZWlnaHQsaS5wcmV2SGVpZ2h0K2gpfWVsc2V7aS5jdXJyZW50V2lkdGg9bDtpLnByZXZIZWlnaHQ9aS5oZWlnaHQ7aS5oZWlnaHQrPWg7aS5hdHRlbXB0PTB9aS53aWR0aD1NYXRoLm1heChpLndpZHRoLGkuY3VycmVudFdpZHRoKTticmVhaztjYXNlInJsLXJvdyI6Y2FzZSJyb3ciOntpLmNoaWxkcmVuLnB1c2godCk7aS53aWR0aCs9bDtpLmhlaWdodD1NYXRoLm1heChpLmhlaWdodCxoKTtjb25zdCBlPSgwLG4ubWVhc3VyZVRvU3RyaW5nKShpLmhlaWdodCk7Zm9yKGNvbnN0IHQgb2YgaS5jaGlsZHJlbil0LmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PWU7YnJlYWt9Y2FzZSJ0YWJsZSI6Y2FzZSJ0YiI6aS53aWR0aD1NYXRoLm1pbihzLndpZHRoLE1hdGgubWF4KGkud2lkdGgsbCkpO2kuaGVpZ2h0Kz1oO2kuY2hpbGRyZW4ucHVzaCh0KX19O3QuY2hlY2tEaW1lbnNpb25zPWZ1bmN0aW9uIGNoZWNrRGltZW5zaW9ucyhlLHQpe2lmKG51bGw9PT1lW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGUpcmV0dXJuITA7aWYoMD09PWUud3x8MD09PWUuaClyZXR1cm4hMDtjb25zdCBhPWVbci4kZ2V0U3ViZm9ybVBhcmVudF0oKSxuPWFbci4kZXh0cmFdPy5hdHRlbXB0fHwwLFssaSxzLG9dPWZ1bmN0aW9uIGdldFRyYW5zZm9ybWVkQkJveChlKXtsZXQgdCxhLHI9IiI9PT1lLnc/TmFOOmUudyxuPSIiPT09ZS5oP05hTjplLmgsW2ksc109WzAsMF07c3dpdGNoKGUuYW5jaG9yVHlwZXx8IiIpe2Nhc2UiYm90dG9tQ2VudGVyIjpbaSxzXT1bci8yLG5dO2JyZWFrO2Nhc2UiYm90dG9tTGVmdCI6W2ksc109WzAsbl07YnJlYWs7Y2FzZSJib3R0b21SaWdodCI6W2ksc109W3Isbl07YnJlYWs7Y2FzZSJtaWRkbGVDZW50ZXIiOltpLHNdPVtyLzIsbi8yXTticmVhaztjYXNlIm1pZGRsZUxlZnQiOltpLHNdPVswLG4vMl07YnJlYWs7Y2FzZSJtaWRkbGVSaWdodCI6W2ksc109W3Isbi8yXTticmVhaztjYXNlInRvcENlbnRlciI6W2ksc109W3IvMiwwXTticmVhaztjYXNlInRvcFJpZ2h0IjpbaSxzXT1bciwwXX1zd2l0Y2goZS5yb3RhdGV8fDApe2Nhc2UgMDpbdCxhXT1bLWksLXNdO2JyZWFrO2Nhc2UgOTA6W3QsYV09Wy1zLGldO1tyLG5dPVtuLC1yXTticmVhaztjYXNlIDE4MDpbdCxhXT1baSxzXTtbcixuXT1bLXIsLW5dO2JyZWFrO2Nhc2UgMjcwOlt0LGFdPVtzLC1pXTtbcixuXT1bLW4scl19cmV0dXJuW2UueCt0K01hdGgubWluKDAsciksZS55K2ErTWF0aC5taW4oMCxuKSxNYXRoLmFicyhyKSxNYXRoLmFicyhuKV19KGUpO3N3aXRjaChhLmxheW91dCl7Y2FzZSJsci10YiI6Y2FzZSJybC10YiI6cmV0dXJuIDA9PT1uP2Vbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU/IiIhPT1lLnc/TWF0aC5yb3VuZChzLXQud2lkdGgpPD0yOnQud2lkdGg+MjohKCIiIT09ZS5oJiZNYXRoLnJvdW5kKG8tdC5oZWlnaHQpPjIpJiYoIiIhPT1lLnc/TWF0aC5yb3VuZChzLXQud2lkdGgpPD0yfHwwPT09YVtyLiRleHRyYV0ubnVtYmVySW5MaW5lJiZ0LmhlaWdodD4yOnQud2lkdGg+Mik6ISFlW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlfHwhKCIiIT09ZS5oJiZNYXRoLnJvdW5kKG8tdC5oZWlnaHQpPjIpJiYoKCIiPT09ZS53fHxNYXRoLnJvdW5kKHMtdC53aWR0aCk8PTJ8fCFhW3IuJGlzVGhlcmVNb3JlV2lkdGhdKCkpJiZ0LmhlaWdodD4yKTtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm4hIWVbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCgiIj09PWUuaHx8ZVtyLiRpc1NwbGl0dGFibGVdKCk/KCIiPT09ZS53fHxNYXRoLnJvdW5kKHMtdC53aWR0aCk8PTJ8fCFhW3IuJGlzVGhlcmVNb3JlV2lkdGhdKCkpJiZ0LmhlaWdodD4yOk1hdGgucm91bmQoby10LmhlaWdodCk8PTIpO2Nhc2UicG9zaXRpb24iOmlmKGVbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpcmV0dXJuITA7aWYoIiI9PT1lLmh8fE1hdGgucm91bmQobytpLXQuaGVpZ2h0KTw9MilyZXR1cm4hMDtyZXR1cm4gbytpPmVbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5jdXJyZW50Q29udGVudEFyZWEuaDtjYXNlInJsLXJvdyI6Y2FzZSJyb3ciOnJldHVybiEhZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8KCIiPT09ZS5ofHxNYXRoLnJvdW5kKG8tdC5oZWlnaHQpPD0yKTtkZWZhdWx0OnJldHVybiEwfX07dC5mbHVzaEhUTUw9ZnVuY3Rpb24gZmx1c2hIVE1MKGUpe2lmKCFlW3IuJGV4dHJhXSlyZXR1cm4gbnVsbDtjb25zdCB0PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZVtyLiRleHRyYV0uYXR0cmlidXRlcyxjaGlsZHJlbjplW3IuJGV4dHJhXS5jaGlsZHJlbn07aWYoZVtyLiRleHRyYV0uZmFpbGluZ05vZGUpe2NvbnN0IGE9ZVtyLiRleHRyYV0uZmFpbGluZ05vZGVbci4kZmx1c2hIVE1MXSgpO2EmJihlLmxheW91dC5lbmRzV2l0aCgiLXRiIik/dC5jaGlsZHJlbi5wdXNoKGNyZWF0ZUxpbmUoZSxbYV0pKTp0LmNoaWxkcmVuLnB1c2goYSkpfWlmKDA9PT10LmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gbnVsbDtyZXR1cm4gdH07dC5nZXRBdmFpbGFibGVTcGFjZT1mdW5jdGlvbiBnZXRBdmFpbGFibGVTcGFjZShlKXtjb25zdCB0PWVbci4kZXh0cmFdLmF2YWlsYWJsZVNwYWNlLGE9ZS5tYXJnaW4/ZS5tYXJnaW4udG9wSW5zZXQrZS5tYXJnaW4uYm90dG9tSW5zZXQ6MCxuPWUubWFyZ2luP2UubWFyZ2luLmxlZnRJbnNldCtlLm1hcmdpbi5yaWdodEluc2V0OjA7c3dpdGNoKGUubGF5b3V0KXtjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpyZXR1cm4gMD09PWVbci4kZXh0cmFdLmF0dGVtcHQ/e3dpZHRoOnQud2lkdGgtbi1lW3IuJGV4dHJhXS5jdXJyZW50V2lkdGgsaGVpZ2h0OnQuaGVpZ2h0LWEtZVtyLiRleHRyYV0ucHJldkhlaWdodH06e3dpZHRoOnQud2lkdGgtbixoZWlnaHQ6dC5oZWlnaHQtYS1lW3IuJGV4dHJhXS5oZWlnaHR9O2Nhc2Uicmwtcm93IjpjYXNlInJvdyI6cmV0dXJue3dpZHRoOmVbci4kZXh0cmFdLmNvbHVtbldpZHRocy5zbGljZShlW3IuJGV4dHJhXS5jdXJyZW50Q29sdW1uKS5yZWR1Y2UoKChlLHQpPT5lK3QpKSxoZWlnaHQ6dC5oZWlnaHQtbn07Y2FzZSJ0YWJsZSI6Y2FzZSJ0YiI6cmV0dXJue3dpZHRoOnQud2lkdGgtbixoZWlnaHQ6dC5oZWlnaHQtYS1lW3IuJGV4dHJhXS5oZWlnaHR9O2RlZmF1bHQ6cmV0dXJuIHR9fTt2YXIgcj1hKDc4KSxuPWEoODMpO2Z1bmN0aW9uIGNyZWF0ZUxpbmUoZSx0KXtyZXR1cm57bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpbImxyLXRiIj09PWUubGF5b3V0PyJ4ZmFMciI6InhmYVJsIl19LGNoaWxkcmVuOnR9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmNvbXB1dGVCYm94PWZ1bmN0aW9uIGNvbXB1dGVCYm94KGUsdCxhKXtsZXQgbjtpZigiIiE9PWUudyYmIiIhPT1lLmgpbj1bZS54LGUueSxlLncsZS5oXTtlbHNle2lmKCFhKXJldHVybiBudWxsO2xldCBpPWUudztpZigiIj09PWkpe2lmKDA9PT1lLm1heFcpe2NvbnN0IHQ9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2k9InBvc2l0aW9uIj09PXQubGF5b3V0JiYiIiE9PXQudz8wOmUubWluV31lbHNlIGk9TWF0aC5taW4oZS5tYXhXLGEud2lkdGgpO3QuYXR0cmlidXRlcy5zdHlsZS53aWR0aD1tZWFzdXJlVG9TdHJpbmcoaSl9bGV0IHM9ZS5oO2lmKCIiPT09cyl7aWYoMD09PWUubWF4SCl7Y29uc3QgdD1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7cz0icG9zaXRpb24iPT09dC5sYXlvdXQmJiIiIT09dC5oPzA6ZS5taW5IfWVsc2Ugcz1NYXRoLm1pbihlLm1heEgsYS5oZWlnaHQpO3QuYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9bWVhc3VyZVRvU3RyaW5nKHMpfW49W2UueCxlLnksaSxzXX1yZXR1cm4gbn07dC5jcmVhdGVXcmFwcGVyPWZ1bmN0aW9uIGNyZWF0ZVdyYXBwZXIoZSx0KXtjb25zdHthdHRyaWJ1dGVzOmF9PXQse3N0eWxlOm59PWEsaT17bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpbInhmYVdyYXBwZXIiXSxzdHlsZTpPYmplY3QuY3JlYXRlKG51bGwpfSxjaGlsZHJlbjpbXX07YS5jbGFzcy5wdXNoKCJ4ZmFXcmFwcGVkIik7aWYoZS5ib3JkZXIpe2NvbnN0e3dpZHRoczphLGluc2V0czpzfT1lLmJvcmRlcltyLiRleHRyYV07bGV0IG8sYyxsPXNbMF0saD1zWzNdO2NvbnN0IHU9c1swXStzWzJdLGQ9c1sxXStzWzNdO3N3aXRjaChlLmJvcmRlci5oYW5kKXtjYXNlImV2ZW4iOmwtPWFbMF0vMjtoLT1hWzNdLzI7bz1gY2FsYygxMDAlICsgJHsoYVsxXSthWzNdKS8yLWR9cHgpYDtjPWBjYWxjKDEwMCUgKyAkeyhhWzBdK2FbMl0pLzItdX1weClgO2JyZWFrO2Nhc2UibGVmdCI6bC09YVswXTtoLT1hWzNdO289YGNhbGMoMTAwJSArICR7YVsxXSthWzNdLWR9cHgpYDtjPWBjYWxjKDEwMCUgKyAke2FbMF0rYVsyXS11fXB4KWA7YnJlYWs7Y2FzZSJyaWdodCI6bz1kP2BjYWxjKDEwMCUgLSAke2R9cHgpYDoiMTAwJSI7Yz11P2BjYWxjKDEwMCUgLSAke3V9cHgpYDoiMTAwJSJ9Y29uc3QgZj1bInhmYUJvcmRlciJdO2lzUHJpbnRPbmx5KGUuYm9yZGVyKSYmZi5wdXNoKCJ4ZmFQcmludE9ubHkiKTtjb25zdCBnPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOmYsc3R5bGU6e3RvcDpgJHtsfXB4YCxsZWZ0OmAke2h9cHhgLHdpZHRoOm8saGVpZ2h0OmN9fSxjaGlsZHJlbjpbXX07Zm9yKGNvbnN0IGUgb2ZbImJvcmRlciIsImJvcmRlcldpZHRoIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJTdHlsZSJdKWlmKHZvaWQgMCE9PW5bZV0pe2cuYXR0cmlidXRlcy5zdHlsZVtlXT1uW2VdO2RlbGV0ZSBuW2VdfWkuY2hpbGRyZW4ucHVzaChnLHQpfWVsc2UgaS5jaGlsZHJlbi5wdXNoKHQpO2Zvcihjb25zdCBlIG9mWyJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZENsaXAiLCJ0b3AiLCJsZWZ0Iiwid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtT3JpZ2luIiwidmlzaWJpbGl0eSJdKWlmKHZvaWQgMCE9PW5bZV0pe2kuYXR0cmlidXRlcy5zdHlsZVtlXT1uW2VdO2RlbGV0ZSBuW2VdfWkuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiPT09bi5wb3NpdGlvbj8iYWJzb2x1dGUiOiJyZWxhdGl2ZSI7ZGVsZXRlIG4ucG9zaXRpb247aWYobi5hbGlnblNlbGYpe2kuYXR0cmlidXRlcy5zdHlsZS5hbGlnblNlbGY9bi5hbGlnblNlbGY7ZGVsZXRlIG4uYWxpZ25TZWxmfXJldHVybiBpfTt0LmZpeERpbWVuc2lvbnM9ZnVuY3Rpb24gZml4RGltZW5zaW9ucyhlKXtjb25zdCB0PWVbci4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpZih0LmxheW91dD8uaW5jbHVkZXMoInJvdyIpKXtjb25zdCBhPXRbci4kZXh0cmFdLG49ZS5jb2xTcGFuO2xldCBpO2k9LTE9PT1uP2EuY29sdW1uV2lkdGhzLnNsaWNlKGEuY3VycmVudENvbHVtbikucmVkdWNlKCgoZSx0KT0+ZSt0KSwwKTphLmNvbHVtbldpZHRocy5zbGljZShhLmN1cnJlbnRDb2x1bW4sYS5jdXJyZW50Q29sdW1uK24pLnJlZHVjZSgoKGUsdCk9PmUrdCksMCk7aXNOYU4oaSl8fChlLnc9aSl9dC5sYXlvdXQmJiJwb3NpdGlvbiIhPT10LmxheW91dCYmKGUueD1lLnk9MCk7InRhYmxlIj09PWUubGF5b3V0JiYiIj09PWUudyYmQXJyYXkuaXNBcnJheShlLmNvbHVtbldpZHRocykmJihlLnc9ZS5jb2x1bW5XaWR0aHMucmVkdWNlKCgoZSx0KT0+ZSt0KSwwKSl9O3QuZml4VGV4dEluZGVudD1mdW5jdGlvbiBmaXhUZXh0SW5kZW50KGUpe2NvbnN0IHQ9KDAsaS5nZXRNZWFzdXJlbWVudCkoZS50ZXh0SW5kZW50LCIwcHgiKTtpZih0Pj0wKXJldHVybjtjb25zdCBhPSJwYWRkaW5nIisoImxlZnQiPT0oInJpZ2h0Ij09PWUudGV4dEFsaWduPyJyaWdodCI6ImxlZnQiKT8iTGVmdCI6IlJpZ2h0Iikscj0oMCxpLmdldE1lYXN1cmVtZW50KShlW2FdLCIwcHgiKTtlW2FdPXItdCsicHgifTt0LmZpeFVSTD1mdW5jdGlvbiBmaXhVUkwoZSl7Y29uc3QgdD0oMCxuLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGUsbnVsbCx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pO3JldHVybiB0P3QuaHJlZjpudWxsfTt0LmlzUHJpbnRPbmx5PWlzUHJpbnRPbmx5O3QubGF5b3V0Q2xhc3M9ZnVuY3Rpb24gbGF5b3V0Q2xhc3MoZSl7c3dpdGNoKGUubGF5b3V0KXtjYXNlInBvc2l0aW9uIjpkZWZhdWx0OnJldHVybiJ4ZmFQb3NpdGlvbiI7Y2FzZSJsci10YiI6cmV0dXJuInhmYUxyVGIiO2Nhc2Uicmwtcm93IjpyZXR1cm4ieGZhUmxSb3ciO2Nhc2UicmwtdGIiOnJldHVybiJ4ZmFSbFRiIjtjYXNlInJvdyI6cmV0dXJuInhmYVJvdyI7Y2FzZSJ0YWJsZSI6cmV0dXJuInhmYVRhYmxlIjtjYXNlInRiIjpyZXR1cm4ieGZhVGIifX07dC5sYXlvdXROb2RlPWZ1bmN0aW9uIGxheW91dE5vZGUoZSx0KXtsZXQgYT1udWxsLG49bnVsbCxpPSExO2lmKCghZS53fHwhZS5oKSYmZS52YWx1ZSl7bGV0IHM9MCxvPTA7aWYoZS5tYXJnaW4pe3M9ZS5tYXJnaW4ubGVmdEluc2V0K2UubWFyZ2luLnJpZ2h0SW5zZXQ7bz1lLm1hcmdpbi50b3BJbnNldCtlLm1hcmdpbi5ib3R0b21JbnNldH1sZXQgYz1udWxsLGw9bnVsbDtpZihlLnBhcmEpe2w9T2JqZWN0LmNyZWF0ZShudWxsKTtjPSIiPT09ZS5wYXJhLmxpbmVIZWlnaHQ/bnVsbDplLnBhcmEubGluZUhlaWdodDtsLnRvcD0iIj09PWUucGFyYS5zcGFjZUFib3ZlPzA6ZS5wYXJhLnNwYWNlQWJvdmU7bC5ib3R0b209IiI9PT1lLnBhcmEuc3BhY2VCZWxvdz8wOmUucGFyYS5zcGFjZUJlbG93O2wubGVmdD0iIj09PWUucGFyYS5tYXJnaW5MZWZ0PzA6ZS5wYXJhLm1hcmdpbkxlZnQ7bC5yaWdodD0iIj09PWUucGFyYS5tYXJnaW5SaWdodD8wOmUucGFyYS5tYXJnaW5SaWdodH1sZXQgaD1lLmZvbnQ7aWYoIWgpe2NvbnN0IHQ9ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKCk7bGV0IGE9ZVtyLiRnZXRQYXJlbnRdKCk7Zm9yKDthJiZhIT09dDspe2lmKGEuZm9udCl7aD1hLmZvbnQ7YnJlYWt9YT1hW3IuJGdldFBhcmVudF0oKX19Y29uc3QgdT0oZS53fHx0LndpZHRoKS1zLGQ9ZVtyLiRnbG9iYWxEYXRhXS5mb250RmluZGVyO2lmKGUudmFsdWUuZXhEYXRhJiZlLnZhbHVlLmV4RGF0YVtyLiRjb250ZW50XSYmInRleHQvaHRtbCI9PT1lLnZhbHVlLmV4RGF0YS5jb250ZW50VHlwZSl7Y29uc3QgdD1sYXlvdXRUZXh0KGUudmFsdWUuZXhEYXRhW3IuJGNvbnRlbnRdLGgsbCxjLGQsdSk7bj10LndpZHRoO2E9dC5oZWlnaHQ7aT10LmlzQnJva2VufWVsc2V7Y29uc3QgdD1lLnZhbHVlW3IuJHRleHRdKCk7aWYodCl7Y29uc3QgZT1sYXlvdXRUZXh0KHQsaCxsLGMsZCx1KTtuPWUud2lkdGg7YT1lLmhlaWdodDtpPWUuaXNCcm9rZW59fW51bGw9PT1ufHxlLnd8fChuKz1zKTtudWxsPT09YXx8ZS5ofHwoYSs9byl9cmV0dXJue3c6bixoOmEsaXNCcm9rZW46aX19O3QubWVhc3VyZVRvU3RyaW5nPW1lYXN1cmVUb1N0cmluZzt0LnNldEFjY2Vzcz1mdW5jdGlvbiBzZXRBY2Nlc3MoZSx0KXtzd2l0Y2goZS5hY2Nlc3Mpe2Nhc2Uibm9uSW50ZXJhY3RpdmUiOnQucHVzaCgieGZhTm9uSW50ZXJhY3RpdmUiKTticmVhaztjYXNlInJlYWRPbmx5Ijp0LnB1c2goInhmYVJlYWRPbmx5Iik7YnJlYWs7Y2FzZSJwcm90ZWN0ZWQiOnQucHVzaCgieGZhRGlzYWJsZWQiKX19O3Quc2V0Rm9udEZhbWlseT1mdW5jdGlvbiBzZXRGb250RmFtaWx5KGUsdCxhLHIpe2lmKCFhKXtkZWxldGUgci5mb250RmFtaWx5O3JldHVybn1jb25zdCBuPSgwLGkuc3RyaXBRdW90ZXMpKGUudHlwZWZhY2UpO3IuZm9udEZhbWlseT1gIiR7bn0iYDtjb25zdCBvPWEuZmluZChuKTtpZihvKXtjb25zdHtmb250RmFtaWx5OmF9PW8ucmVndWxhci5jc3NGb250SW5mbzthIT09biYmKHIuZm9udEZhbWlseT1gIiR7YX0iYCk7Y29uc3QgaT1nZXRDdXJyZW50UGFyYSh0KTtpZihpJiYiIiE9PWkubGluZUhlaWdodClyZXR1cm47aWYoci5saW5lSGVpZ2h0KXJldHVybjtjb25zdCBjPSgwLHMuc2VsZWN0Rm9udCkoZSxvKTtjJiYoci5saW5lSGVpZ2h0PU1hdGgubWF4KDEuMixjLmxpbmVIZWlnaHQpKX19O3Quc2V0TWluTWF4RGltZW5zaW9ucz1mdW5jdGlvbiBzZXRNaW5NYXhEaW1lbnNpb25zKGUsdCl7aWYoInBvc2l0aW9uIj09PWVbci4kZ2V0U3ViZm9ybVBhcmVudF0oKS5sYXlvdXQpe2UubWluVz4wJiYodC5taW5XaWR0aD1tZWFzdXJlVG9TdHJpbmcoZS5taW5XKSk7ZS5tYXhXPjAmJih0Lm1heFdpZHRoPW1lYXN1cmVUb1N0cmluZyhlLm1heFcpKTtlLm1pbkg+MCYmKHQubWluSGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhlLm1pbkgpKTtlLm1heEg+MCYmKHQubWF4SGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhlLm1heEgpKX19O3Quc2V0UGFyYT1mdW5jdGlvbiBzZXRQYXJhKGUsdCxhKXtpZihhLmF0dHJpYnV0ZXMuY2xhc3M/LmluY2x1ZGVzKCJ4ZmFSaWNoIikpe2lmKHQpeyIiPT09ZS5oJiYodC5oZWlnaHQ9ImF1dG8iKTsiIj09PWUudyYmKHQud2lkdGg9ImF1dG8iKX1jb25zdCBuPWdldEN1cnJlbnRQYXJhKGUpO2lmKG4pe2NvbnN0IGU9YS5hdHRyaWJ1dGVzLnN0eWxlO2UuZGlzcGxheT0iZmxleCI7ZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iO3N3aXRjaChuLnZBbGlnbil7Y2FzZSJ0b3AiOmUuanVzdGlmeUNvbnRlbnQ9InN0YXJ0IjticmVhaztjYXNlImJvdHRvbSI6ZS5qdXN0aWZ5Q29udGVudD0iZW5kIjticmVhaztjYXNlIm1pZGRsZSI6ZS5qdXN0aWZ5Q29udGVudD0iY2VudGVyIn1jb25zdCB0PW5bci4kdG9TdHlsZV0oKTtmb3IoY29uc3RbYSxyXW9mIE9iamVjdC5lbnRyaWVzKHQpKWEgaW4gZXx8KGVbYV09cil9fX07dC50b1N0eWxlPWZ1bmN0aW9uIHRvU3R5bGUoZSwuLi50KXtjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0IGkgb2YgdCl7Y29uc3QgdD1lW2ldO2lmKG51bGwhPT10KWlmKGwuaGFzT3duUHJvcGVydHkoaSkpbFtpXShlLGEpO2Vsc2UgaWYodCBpbnN0YW5jZW9mIGMuWEZBT2JqZWN0KXtjb25zdCBlPXRbci4kdG9TdHlsZV0oKTtlP09iamVjdC5hc3NpZ24oYSxlKTooMCxuLndhcm4pKGAoREVCVUcpIC0gWEZBIC0gc3R5bGUgZm9yICR7aX0gbm90IGltcGxlbWVudGVkIHlldGApfX1yZXR1cm4gYX07dmFyIHI9YSg3OCksbj1hKDIpLGk9YSg4NCkscz1hKDg1KSxvPWEoODYpLGM9YSg4Nyk7ZnVuY3Rpb24gbWVhc3VyZVRvU3RyaW5nKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT8iMHB4IjpOdW1iZXIuaXNJbnRlZ2VyKGUpP2Ake2V9cHhgOmAke2UudG9GaXhlZCgyKX1weGB9Y29uc3QgbD17YW5jaG9yVHlwZShlLHQpe2NvbnN0IGE9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKGEmJighYS5sYXlvdXR8fCJwb3NpdGlvbiI9PT1hLmxheW91dCkpeyJ0cmFuc2Zvcm0iaW4gdHx8KHQudHJhbnNmb3JtPSIiKTtzd2l0Y2goZS5hbmNob3JUeXBlKXtjYXNlImJvdHRvbUNlbnRlciI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTUwJSwgLTEwMCUpIjticmVhaztjYXNlImJvdHRvbUxlZnQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKDAsLTEwMCUpIjticmVhaztjYXNlImJvdHRvbVJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwtMTAwJSkiO2JyZWFrO2Nhc2UibWlkZGxlQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLC01MCUpIjticmVhaztjYXNlIm1pZGRsZUxlZnQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKDAsLTUwJSkiO2JyZWFrO2Nhc2UibWlkZGxlUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLC01MCUpIjticmVhaztjYXNlInRvcENlbnRlciI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTUwJSwwKSI7YnJlYWs7Y2FzZSJ0b3BSaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsMCkifX19LGRpbWVuc2lvbnMoZSx0KXtjb25zdCBhPWVbci4kZ2V0U3ViZm9ybVBhcmVudF0oKTtsZXQgbj1lLnc7Y29uc3QgaT1lLmg7aWYoYS5sYXlvdXQ/LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgdD1hW3IuJGV4dHJhXSxpPWUuY29sU3BhbjtsZXQgcztpZigtMT09PWkpe3M9dC5jb2x1bW5XaWR0aHMuc2xpY2UodC5jdXJyZW50Q29sdW1uKS5yZWR1Y2UoKChlLHQpPT5lK3QpLDApO3QuY3VycmVudENvbHVtbj0wfWVsc2V7cz10LmNvbHVtbldpZHRocy5zbGljZSh0LmN1cnJlbnRDb2x1bW4sdC5jdXJyZW50Q29sdW1uK2kpLnJlZHVjZSgoKGUsdCk9PmUrdCksMCk7dC5jdXJyZW50Q29sdW1uPSh0LmN1cnJlbnRDb2x1bW4rZS5jb2xTcGFuKSV0LmNvbHVtbldpZHRocy5sZW5ndGh9aXNOYU4ocyl8fChuPWUudz1zKX10LndpZHRoPSIiIT09bj9tZWFzdXJlVG9TdHJpbmcobik6ImF1dG8iO3QuaGVpZ2h0PSIiIT09aT9tZWFzdXJlVG9TdHJpbmcoaSk6ImF1dG8ifSxwb3NpdGlvbihlLHQpe2NvbnN0IGE9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKCFhPy5sYXlvdXR8fCJwb3NpdGlvbiI9PT1hLmxheW91dCl7dC5wb3NpdGlvbj0iYWJzb2x1dGUiO3QubGVmdD1tZWFzdXJlVG9TdHJpbmcoZS54KTt0LnRvcD1tZWFzdXJlVG9TdHJpbmcoZS55KX19LHJvdGF0ZShlLHQpe2lmKGUucm90YXRlKXsidHJhbnNmb3JtImluIHR8fCh0LnRyYW5zZm9ybT0iIik7dC50cmFuc2Zvcm0rPWByb3RhdGUoLSR7ZS5yb3RhdGV9ZGVnKWA7dC50cmFuc2Zvcm1PcmlnaW49InRvcCBsZWZ0In19LHByZXNlbmNlKGUsdCl7c3dpdGNoKGUucHJlc2VuY2Upe2Nhc2UiaW52aXNpYmxlIjp0LnZpc2liaWxpdHk9ImhpZGRlbiI7YnJlYWs7Y2FzZSJoaWRkZW4iOmNhc2UiaW5hY3RpdmUiOnQuZGlzcGxheT0ibm9uZSJ9fSxoQWxpZ24oZSx0KXtpZigicGFyYSI9PT1lW3IuJG5vZGVOYW1lXSlzd2l0Y2goZS5oQWxpZ24pe2Nhc2UianVzdGlmeUFsbCI6dC50ZXh0QWxpZ249Imp1c3RpZnktYWxsIjticmVhaztjYXNlInJhZGl4Ijp0LnRleHRBbGlnbj0ibGVmdCI7YnJlYWs7ZGVmYXVsdDp0LnRleHRBbGlnbj1lLmhBbGlnbn1lbHNlIHN3aXRjaChlLmhBbGlnbil7Y2FzZSJsZWZ0Ijp0LmFsaWduU2VsZj0ic3RhcnQiO2JyZWFrO2Nhc2UiY2VudGVyIjp0LmFsaWduU2VsZj0iY2VudGVyIjticmVhaztjYXNlInJpZ2h0Ijp0LmFsaWduU2VsZj0iZW5kIn19LG1hcmdpbihlLHQpe2UubWFyZ2luJiYodC5tYXJnaW49ZS5tYXJnaW5bci4kdG9TdHlsZV0oKS5tYXJnaW4pfX07ZnVuY3Rpb24gbGF5b3V0VGV4dChlLHQsYSxuLGkscyl7Y29uc3QgYz1uZXcgby5UZXh0TWVhc3VyZSh0LGEsbixpKTsic3RyaW5nIj09dHlwZW9mIGU/Yy5hZGRTdHJpbmcoZSk6ZVtyLiRwdXNoR2x5cGhzXShjKTtyZXR1cm4gYy5jb21wdXRlKHMpfWZ1bmN0aW9uIGlzUHJpbnRPbmx5KGUpe3JldHVybiBlLnJlbGV2YW50Lmxlbmd0aD4wJiYhZS5yZWxldmFudFswXS5leGNsdWRlZCYmInByaW50Ij09PWUucmVsZXZhbnRbMF0udmlld25hbWV9ZnVuY3Rpb24gZ2V0Q3VycmVudFBhcmEoZSl7Y29uc3QgdD1lW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ucGFyYVN0YWNrO3JldHVybiB0Lmxlbmd0aD90LmF0KC0xKTpudWxsfX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkhUTUxSZXN1bHQ9dm9pZCAwO3QuZ2V0QkJveD1mdW5jdGlvbiBnZXRCQm94KGUpe2NvbnN0IHQ9LTE7aWYoIWUpcmV0dXJue3g6dCx5OnQsd2lkdGg6dCxoZWlnaHQ6dH07Y29uc3QgYT1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZT0+Z2V0TWVhc3VyZW1lbnQoZSwiLTEiKSkpO2lmKGEubGVuZ3RoPDR8fGFbMl08MHx8YVszXTwwKXJldHVybnt4OnQseTp0LHdpZHRoOnQsaGVpZ2h0OnR9O2NvbnN0W3IsbixpLHNdPWE7cmV0dXJue3g6cix5Om4sd2lkdGg6aSxoZWlnaHQ6c319O3QuZ2V0Q29sb3I9ZnVuY3Rpb24gZ2V0Q29sb3IoZSx0PVswLDAsMF0pe2xldFthLHIsbl09dDtpZighZSlyZXR1cm57cjphLGc6cixiOm59O2NvbnN0IGk9ZS50cmltKCkuc3BsaXQoL1xzKixccyovKS5tYXAoKGU9Pk1hdGgubWluKE1hdGgubWF4KDAscGFyc2VJbnQoZS50cmltKCksMTApKSwyNTUpKSkubWFwKChlPT5pc05hTihlKT8wOmUpKTtpZihpLmxlbmd0aDwzKXJldHVybntyOmEsZzpyLGI6bn07W2EscixuXT1pO3JldHVybntyOmEsZzpyLGI6bn19O3QuZ2V0RmxvYXQ9ZnVuY3Rpb24gZ2V0RmxvYXQoe2RhdGE6ZSxkZWZhdWx0VmFsdWU6dCx2YWxpZGF0ZTphfSl7aWYoIWUpcmV0dXJuIHQ7ZT1lLnRyaW0oKTtjb25zdCByPXBhcnNlRmxvYXQoZSk7aWYoIWlzTmFOKHIpJiZhKHIpKXJldHVybiByO3JldHVybiB0fTt0LmdldEludGVnZXI9ZnVuY3Rpb24gZ2V0SW50ZWdlcih7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0LHZhbGlkYXRlOmF9KXtpZighZSlyZXR1cm4gdDtlPWUudHJpbSgpO2NvbnN0IHI9cGFyc2VJbnQoZSwxMCk7aWYoIWlzTmFOKHIpJiZhKHIpKXJldHVybiByO3JldHVybiB0fTt0LmdldEtleXdvcmQ9Z2V0S2V5d29yZDt0LmdldE1lYXN1cmVtZW50PWdldE1lYXN1cmVtZW50O3QuZ2V0UmF0aW89ZnVuY3Rpb24gZ2V0UmF0aW8oZSl7aWYoIWUpcmV0dXJue251bToxLGRlbjoxfTtjb25zdCB0PWUudHJpbSgpLnNwbGl0KC9ccyo6XHMqLykubWFwKChlPT5wYXJzZUZsb2F0KGUpKSkuZmlsdGVyKChlPT4haXNOYU4oZSkpKTsxPT09dC5sZW5ndGgmJnQucHVzaCgxKTtpZigwPT09dC5sZW5ndGgpcmV0dXJue251bToxLGRlbjoxfTtjb25zdFthLHJdPXQ7cmV0dXJue251bTphLGRlbjpyfX07dC5nZXRSZWxldmFudD1mdW5jdGlvbiBnZXRSZWxldmFudChlKXtpZighZSlyZXR1cm5bXTtyZXR1cm4gZS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcCgoZT0+KHtleGNsdWRlZDoiLSI9PT1lWzBdLHZpZXduYW1lOmUuc3Vic3RyaW5nKDEpfSkpKX07dC5nZXRTdHJpbmdPcHRpb249ZnVuY3Rpb24gZ2V0U3RyaW5nT3B0aW9uKGUsdCl7cmV0dXJuIGdldEtleXdvcmQoe2RhdGE6ZSxkZWZhdWx0VmFsdWU6dFswXSx2YWxpZGF0ZTplPT50LmluY2x1ZGVzKGUpfSl9O3Quc3RyaXBRdW90ZXM9ZnVuY3Rpb24gc3RyaXBRdW90ZXMoZSl7aWYoZS5zdGFydHNXaXRoKCInIil8fGUuc3RhcnRzV2l0aCgnIicpKXJldHVybiBlLnNsaWNlKDEsLTEpO3JldHVybiBlfTt2YXIgcj1hKDIpO2NvbnN0IG49e3B0OmU9PmUsY206ZT0+ZS8yLjU0KjcyLG1tOmU9PmUvMjUuNCo3MixpbjplPT43MiplLHB4OmU9PmV9LGk9LyhbKy1dP1xkK1wuP1xkKikoLiopLztmdW5jdGlvbiBnZXRLZXl3b3JkKHtkYXRhOmUsZGVmYXVsdFZhbHVlOnQsdmFsaWRhdGU6YX0pe3JldHVybiBlJiZhKGU9ZS50cmltKCkpP2U6dH1mdW5jdGlvbiBnZXRNZWFzdXJlbWVudChlLHQ9IjAiKXt0fHw9IjAiO2lmKCFlKXJldHVybiBnZXRNZWFzdXJlbWVudCh0KTtjb25zdCBhPWUudHJpbSgpLm1hdGNoKGkpO2lmKCFhKXJldHVybiBnZXRNZWFzdXJlbWVudCh0KTtjb25zdFsscixzXT1hLG89cGFyc2VGbG9hdChyKTtpZihpc05hTihvKSlyZXR1cm4gZ2V0TWVhc3VyZW1lbnQodCk7aWYoMD09PW8pcmV0dXJuIDA7Y29uc3QgYz1uW3NdO3JldHVybiBjP2Mobyk6b31jbGFzcyBIVE1MUmVzdWx0e3N0YXRpYyBnZXQgRkFJTFVSRSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJGQUlMVVJFIixuZXcgSFRNTFJlc3VsdCghMSxudWxsLG51bGwsbnVsbCkpfXN0YXRpYyBnZXQgRU1QVFkoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiRU1QVFkiLG5ldyBIVE1MUmVzdWx0KCEwLG51bGwsbnVsbCxudWxsKSl9Y29uc3RydWN0b3IoZSx0LGEscil7dGhpcy5zdWNjZXNzPWU7dGhpcy5odG1sPXQ7dGhpcy5iYm94PWE7dGhpcy5icmVha05vZGU9cn1pc0JyZWFrKCl7cmV0dXJuISF0aGlzLmJyZWFrTm9kZX1zdGF0aWMgYnJlYWtOb2RlKGUpe3JldHVybiBuZXcgSFRNTFJlc3VsdCghMSxudWxsLG51bGwsZSl9c3RhdGljIHN1Y2Nlc3MoZSx0PW51bGwpe3JldHVybiBuZXcgSFRNTFJlc3VsdCghMCxlLHQsbnVsbCl9fXQuSFRNTFJlc3VsdD1IVE1MUmVzdWx0fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRm9udEZpbmRlcj12b2lkIDA7dC5nZXRNZXRyaWNzPWZ1bmN0aW9uIGdldE1ldHJpY3MoZSx0PSExKXtsZXQgYT1udWxsO2lmKGUpe2NvbnN0IHQ9KDAsbi5zdHJpcFF1b3RlcykoZS50eXBlZmFjZSksaT1lW3IuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIuZmluZCh0KTthPXNlbGVjdEZvbnQoZSxpKX1pZighYSlyZXR1cm57bGluZUhlaWdodDoxMixsaW5lR2FwOjIsbGluZU5vR2FwOjEwfTtjb25zdCBpPWUuc2l6ZXx8MTAscz1hLmxpbmVIZWlnaHQ/TWF0aC5tYXgodD8wOjEuMixhLmxpbmVIZWlnaHQpOjEuMixvPXZvaWQgMD09PWEubGluZUdhcD8uMjphLmxpbmVHYXA7cmV0dXJue2xpbmVIZWlnaHQ6cyppLGxpbmVHYXA6byppLGxpbmVOb0dhcDpNYXRoLm1heCgxLHMtbykqaX19O3Quc2VsZWN0Rm9udD1zZWxlY3RGb250O3ZhciByPWEoNzgpLG49YSg4NCksaT1hKDIpO3QuRm9udEZpbmRlcj1jbGFzcyBGb250RmluZGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuZm9udHM9bmV3IE1hcDt0aGlzLmNhY2hlPW5ldyBNYXA7dGhpcy53YXJuZWQ9bmV3IFNldDt0aGlzLmRlZmF1bHRGb250PW51bGw7dGhpcy5hZGQoZSl9YWRkKGUsdD1udWxsKXtmb3IoY29uc3QgdCBvZiBlKXRoaXMuYWRkUGRmRm9udCh0KTtmb3IoY29uc3QgZSBvZiB0aGlzLmZvbnRzLnZhbHVlcygpKWUucmVndWxhcnx8KGUucmVndWxhcj1lLml0YWxpY3x8ZS5ib2xkfHxlLmJvbGRpdGFsaWMpO2lmKCF0fHwwPT09dC5zaXplKXJldHVybjtjb25zdCBhPXRoaXMuZm9udHMuZ2V0KCJQZGZKUy1GYWxsYmFjay1QZGZKUy1YRkEiKTtmb3IoY29uc3QgZSBvZiB0KXRoaXMuZm9udHMuc2V0KGUsYSl9YWRkUGRmRm9udChlKXtjb25zdCB0PWUuY3NzRm9udEluZm8sYT10LmZvbnRGYW1pbHk7bGV0IHI9dGhpcy5mb250cy5nZXQoYSk7aWYoIXIpe3I9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmZvbnRzLnNldChhLHIpO3RoaXMuZGVmYXVsdEZvbnR8fCh0aGlzLmRlZmF1bHRGb250PXIpfWxldCBuPSIiO2NvbnN0IGk9cGFyc2VGbG9hdCh0LmZvbnRXZWlnaHQpOzAhPT1wYXJzZUZsb2F0KHQuaXRhbGljQW5nbGUpP249aT49NzAwPyJib2xkaXRhbGljIjoiaXRhbGljIjppPj03MDAmJihuPSJib2xkIik7aWYoIW4peyhlLm5hbWUuaW5jbHVkZXMoIkJvbGQiKXx8ZS5wc05hbWU/LmluY2x1ZGVzKCJCb2xkIikpJiYobj0iYm9sZCIpOyhlLm5hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLm5hbWUuZW5kc1dpdGgoIkl0Iil8fGUucHNOYW1lPy5pbmNsdWRlcygiSXRhbGljIil8fGUucHNOYW1lPy5lbmRzV2l0aCgiSXQiKSkmJihuKz0iaXRhbGljIil9bnx8KG49InJlZ3VsYXIiKTtyW25dPWV9Z2V0RGVmYXVsdCgpe3JldHVybiB0aGlzLmRlZmF1bHRGb250fWZpbmQoZSx0PSEwKXtsZXQgYT10aGlzLmZvbnRzLmdldChlKXx8dGhpcy5jYWNoZS5nZXQoZSk7aWYoYSlyZXR1cm4gYTtjb25zdCByPS8sfC18X3wgfGJvbGRpdGFsaWN8Ym9sZHxpdGFsaWN8cmVndWxhcnxpdC9naTtsZXQgbj1lLnJlcGxhY2VBbGwociwiIik7YT10aGlzLmZvbnRzLmdldChuKTtpZihhKXt0aGlzLmNhY2hlLnNldChlLGEpO3JldHVybiBhfW49bi50b0xvd2VyQ2FzZSgpO2NvbnN0IHM9W107Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLmZvbnRzLmVudHJpZXMoKSllLnJlcGxhY2VBbGwociwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG4pJiZzLnB1c2godCk7aWYoMD09PXMubGVuZ3RoKWZvcihjb25zdFssZV1vZiB0aGlzLmZvbnRzLmVudHJpZXMoKSllLnJlZ3VsYXIubmFtZT8ucmVwbGFjZUFsbChyLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobikmJnMucHVzaChlKTtpZigwPT09cy5sZW5ndGgpe249bi5yZXBsYWNlQWxsKC9wc210fG10L2dpLCIiKTtmb3IoY29uc3RbZSx0XW9mIHRoaXMuZm9udHMuZW50cmllcygpKWUucmVwbGFjZUFsbChyLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobikmJnMucHVzaCh0KX1pZigwPT09cy5sZW5ndGgpZm9yKGNvbnN0IGUgb2YgdGhpcy5mb250cy52YWx1ZXMoKSllLnJlZ3VsYXIubmFtZT8ucmVwbGFjZUFsbChyLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobikmJnMucHVzaChlKTtpZihzLmxlbmd0aD49MSl7MSE9PXMubGVuZ3RoJiZ0JiYoMCxpLndhcm4pKGBYRkEgLSBUb28gbWFueSBjaG9pY2VzIHRvIGd1ZXNzIHRoZSBjb3JyZWN0IGZvbnQ6ICR7ZX1gKTt0aGlzLmNhY2hlLnNldChlLHNbMF0pO3JldHVybiBzWzBdfWlmKHQmJiF0aGlzLndhcm5lZC5oYXMoZSkpe3RoaXMud2FybmVkLmFkZChlKTsoMCxpLndhcm4pKGBYRkEgLSBDYW5ub3QgZmluZCB0aGUgZm9udDogJHtlfWApfXJldHVybiBudWxsfX07ZnVuY3Rpb24gc2VsZWN0Rm9udChlLHQpe3JldHVybiJpdGFsaWMiPT09ZS5wb3N0dXJlPyJib2xkIj09PWUud2VpZ2h0P3QuYm9sZGl0YWxpYzp0Lml0YWxpYzoiYm9sZCI9PT1lLndlaWdodD90LmJvbGQ6dC5yZWd1bGFyfX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlRleHRNZWFzdXJlPXZvaWQgMDt2YXIgcj1hKDg1KTtjbGFzcyBGb250SW5mb3tjb25zdHJ1Y3RvcihlLHQsYSxuKXt0aGlzLmxpbmVIZWlnaHQ9YTt0aGlzLnBhcmFNYXJnaW49dHx8e3RvcDowLGJvdHRvbTowLGxlZnQ6MCxyaWdodDowfTtpZighZSl7W3RoaXMucGRmRm9udCx0aGlzLnhmYUZvbnRdPXRoaXMuZGVmYXVsdEZvbnQobik7cmV0dXJufXRoaXMueGZhRm9udD17dHlwZWZhY2U6ZS50eXBlZmFjZSxwb3N0dXJlOmUucG9zdHVyZSx3ZWlnaHQ6ZS53ZWlnaHQsc2l6ZTplLnNpemUsbGV0dGVyU3BhY2luZzplLmxldHRlclNwYWNpbmd9O2NvbnN0IGk9bi5maW5kKGUudHlwZWZhY2UpO2lmKGkpe3RoaXMucGRmRm9udD0oMCxyLnNlbGVjdEZvbnQpKGUsaSk7dGhpcy5wZGZGb250fHwoW3RoaXMucGRmRm9udCx0aGlzLnhmYUZvbnRdPXRoaXMuZGVmYXVsdEZvbnQobikpfWVsc2VbdGhpcy5wZGZGb250LHRoaXMueGZhRm9udF09dGhpcy5kZWZhdWx0Rm9udChuKX1kZWZhdWx0Rm9udChlKXtjb25zdCB0PWUuZmluZCgiSGVsdmV0aWNhIiwhMSl8fGUuZmluZCgiTXlyaWFkIFBybyIsITEpfHxlLmZpbmQoIkFyaWFsIiwhMSl8fGUuZ2V0RGVmYXVsdCgpO2lmKHQ/LnJlZ3VsYXIpe2NvbnN0IGU9dC5yZWd1bGFyO3JldHVybltlLHt0eXBlZmFjZTplLmNzc0ZvbnRJbmZvLmZvbnRGYW1pbHkscG9zdHVyZToibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCIsc2l6ZToxMCxsZXR0ZXJTcGFjaW5nOjB9XX1yZXR1cm5bbnVsbCx7dHlwZWZhY2U6IkNvdXJpZXIiLHBvc3R1cmU6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwiLHNpemU6MTAsbGV0dGVyU3BhY2luZzowfV19fWNsYXNzIEZvbnRTZWxlY3Rvcntjb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLmZvbnRGaW5kZXI9cjt0aGlzLnN0YWNrPVtuZXcgRm9udEluZm8oZSx0LGEscildfXB1c2hEYXRhKGUsdCxhKXtjb25zdCByPXRoaXMuc3RhY2suYXQoLTEpO2Zvcihjb25zdCB0IG9mWyJ0eXBlZmFjZSIsInBvc3R1cmUiLCJ3ZWlnaHQiLCJzaXplIiwibGV0dGVyU3BhY2luZyJdKWVbdF18fChlW3RdPXIueGZhRm9udFt0XSk7Zm9yKGNvbnN0IGUgb2ZbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdKWlzTmFOKHRbZV0pJiYodFtlXT1yLnBhcmFNYXJnaW5bZV0pO2NvbnN0IG49bmV3IEZvbnRJbmZvKGUsdCxhfHxyLmxpbmVIZWlnaHQsdGhpcy5mb250RmluZGVyKTtuLnBkZkZvbnR8fChuLnBkZkZvbnQ9ci5wZGZGb250KTt0aGlzLnN0YWNrLnB1c2gobil9cG9wRm9udCgpe3RoaXMuc3RhY2sucG9wKCl9dG9wRm9udCgpe3JldHVybiB0aGlzLnN0YWNrLmF0KC0xKX19dC5UZXh0TWVhc3VyZT1jbGFzcyBUZXh0TWVhc3VyZXtjb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLmdseXBocz1bXTt0aGlzLmZvbnRTZWxlY3Rvcj1uZXcgRm9udFNlbGVjdG9yKGUsdCxhLHIpO3RoaXMuZXh0cmFIZWlnaHQ9MH1wdXNoRGF0YShlLHQsYSl7dGhpcy5mb250U2VsZWN0b3IucHVzaERhdGEoZSx0LGEpfXBvcEZvbnQoZSl7cmV0dXJuIHRoaXMuZm9udFNlbGVjdG9yLnBvcEZvbnQoKX1hZGRQYXJhKCl7Y29uc3QgZT10aGlzLmZvbnRTZWxlY3Rvci50b3BGb250KCk7dGhpcy5leHRyYUhlaWdodCs9ZS5wYXJhTWFyZ2luLnRvcCtlLnBhcmFNYXJnaW4uYm90dG9tfWFkZFN0cmluZyhlKXtpZighZSlyZXR1cm47Y29uc3QgdD10aGlzLmZvbnRTZWxlY3Rvci50b3BGb250KCksYT10LnhmYUZvbnQuc2l6ZTtpZih0LnBkZkZvbnQpe2NvbnN0IHI9dC54ZmFGb250LmxldHRlclNwYWNpbmcsbj10LnBkZkZvbnQsaT1uLmxpbmVIZWlnaHR8fDEuMixzPXQubGluZUhlaWdodHx8TWF0aC5tYXgoMS4yLGkpKmEsbz1pLSh2b2lkIDA9PT1uLmxpbmVHYXA/LjI6bi5saW5lR2FwKSxjPU1hdGgubWF4KDEsbykqYSxsPWEvMWUzLGg9bi5kZWZhdWx0V2lkdGh8fG4uY2hhcnNUb0dseXBocygiICIpWzBdLndpZHRoO2Zvcihjb25zdCB0IG9mIGUuc3BsaXQoL1tcdTIwMjlcbl0vKSl7Y29uc3QgZT1uLmVuY29kZVN0cmluZyh0KS5qb2luKCIiKSxhPW4uY2hhcnNUb0dseXBocyhlKTtmb3IoY29uc3QgZSBvZiBhKXtjb25zdCB0PWUud2lkdGh8fGg7dGhpcy5nbHlwaHMucHVzaChbdCpsK3IscyxjLGUudW5pY29kZSwhMV0pfXRoaXMuZ2x5cGhzLnB1c2goWzAsMCwwLCJcbiIsITBdKX10aGlzLmdseXBocy5wb3AoKX1lbHNle2Zvcihjb25zdCB0IG9mIGUuc3BsaXQoL1tcdTIwMjlcbl0vKSl7Zm9yKGNvbnN0IGUgb2YgdC5zcGxpdCgiIikpdGhpcy5nbHlwaHMucHVzaChbYSwxLjIqYSxhLGUsITFdKTt0aGlzLmdseXBocy5wdXNoKFswLDAsMCwiXG4iLCEwXSl9dGhpcy5nbHlwaHMucG9wKCl9fWNvbXB1dGUoZSl7bGV0IHQ9LTEsYT0wLHI9MCxuPTAsaT0wLHM9MCxvPSExLGM9ITA7Zm9yKGxldCBsPTAsaD10aGlzLmdseXBocy5sZW5ndGg7bDxoO2wrKyl7Y29uc3RbaCx1LGQsZixnXT10aGlzLmdseXBoc1tsXSxwPSIgIj09PWYsbT1jP2Q6dTtpZihnKXtyPU1hdGgubWF4KHIsaSk7aT0wO24rPXM7cz1tO3Q9LTE7YT0wO2M9ITF9ZWxzZSBpZihwKWlmKGkraD5lKXtyPU1hdGgubWF4KHIsaSk7aT0wO24rPXM7cz1tO3Q9LTE7YT0wO289ITA7Yz0hMX1lbHNle3M9TWF0aC5tYXgobSxzKTthPWk7aSs9aDt0PWx9ZWxzZSBpZihpK2g+ZSl7bis9cztzPW07aWYoLTEhPT10KXtsPXQ7cj1NYXRoLm1heChyLGEpO2k9MDt0PS0xO2E9MH1lbHNle3I9TWF0aC5tYXgocixpKTtpPWh9bz0hMDtjPSExfWVsc2V7aSs9aDtzPU1hdGgubWF4KG0scyl9fXI9TWF0aC5tYXgocixpKTtuKz1zK3RoaXMuZXh0cmFIZWlnaHQ7cmV0dXJue3dpZHRoOjEuMDIqcixoZWlnaHQ6bixpc0Jyb2tlbjpvfX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuWG1sT2JqZWN0PXQuWEZBT2JqZWN0QXJyYXk9dC5YRkFPYmplY3Q9dC5YRkFBdHRyaWJ1dGU9dC5TdHJpbmdPYmplY3Q9dC5PcHRpb25PYmplY3Q9dC5PcHRpb24xMD10Lk9wdGlvbjAxPXQuSW50ZWdlck9iamVjdD10LkNvbnRlbnRPYmplY3Q9dm9pZCAwO3ZhciByPWEoNzgpLG49YSg4NCksaT1hKDIpLHM9YSgzKSxvPWEoODEpLGM9YSg4OCk7Y29uc3QgbD1TeW1ib2woKSxoPVN5bWJvbCgpLHU9U3ltYm9sKCksZD1TeW1ib2woIl9jaGlsZHJlbiIpLGY9U3ltYm9sKCksZz1TeW1ib2woKSxwPVN5bWJvbCgpLG09U3ltYm9sKCksYj1TeW1ib2woKSx5PVN5bWJvbCgpLHc9U3ltYm9sKCksUz1TeW1ib2woKSx4PVN5bWJvbCgpLEM9U3ltYm9sKCJwYXJlbnQiKSxrPVN5bWJvbCgpLHY9U3ltYm9sKCksRj1TeW1ib2woKTtsZXQgTz0wO2NvbnN0IFQ9by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7Y2xhc3MgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhPSExKXt0aGlzW3IuJG5hbWVzcGFjZUlkXT1lO3RoaXNbci4kbm9kZU5hbWVdPXQ7dGhpc1t3XT1hO3RoaXNbQ109bnVsbDt0aGlzW2RdPVtdO3RoaXNbci4kdWlkXT1gJHt0fSR7TysrfWA7dGhpc1tyLiRnbG9iYWxEYXRhXT1udWxsfWdldCBpc1hGQU9iamVjdCgpe3JldHVybiEwfWdldCBpc1hGQU9iamVjdEFycmF5KCl7cmV0dXJuITF9Y3JlYXRlTm9kZXMoZSl7bGV0IHQ9dGhpcyxhPW51bGw7Zm9yKGNvbnN0e25hbWU6bixpbmRleDppfW9mIGUpe2ZvcihsZXQgZT0wLHM9aXNGaW5pdGUoaSk/aTowO2U8PXM7ZSsrKXtjb25zdCBlPXRbci4kbmFtZXNwYWNlSWRdPT09VD8tMTp0W3IuJG5hbWVzcGFjZUlkXTthPW5ldyBYbWxPYmplY3QoZSxuKTt0W3IuJGFwcGVuZENoaWxkXShhKX10PWF9cmV0dXJuIGF9W3IuJG9uQ2hpbGRdKGUpe2lmKCF0aGlzW3ddfHwhdGhpc1tyLiRvbkNoaWxkQ2hlY2tdKGUpKXJldHVybiExO2NvbnN0IHQ9ZVtyLiRub2RlTmFtZV0sYT10aGlzW3RdO2lmKCEoYSBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5KSl7bnVsbCE9PWEmJnRoaXNbci4kcmVtb3ZlQ2hpbGRdKGEpO3RoaXNbdF09ZTt0aGlzW3IuJGFwcGVuZENoaWxkXShlKTtyZXR1cm4hMH1pZihhLnB1c2goZSkpe3RoaXNbci4kYXBwZW5kQ2hpbGRdKGUpO3JldHVybiEwfWxldCBuPSIiO3RoaXMuaWQ/bj1gIChpZDogJHt0aGlzLmlkfSlgOnRoaXMubmFtZSYmKG49YCAobmFtZTogJHt0aGlzLm5hbWV9ICR7dGhpcy5oLnZhbHVlfSlgKTsoMCxpLndhcm4pKGBYRkEgLSBub2RlICIke3RoaXNbci4kbm9kZU5hbWVdfSIke259IGhhcyBhbHJlYWR5IGVub3VnaCAiJHt0fSIhYCk7cmV0dXJuITF9W3IuJG9uQ2hpbGRDaGVja10oZSl7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoZVtyLiRub2RlTmFtZV0pJiZlW3IuJG5hbWVzcGFjZUlkXT09PXRoaXNbci4kbmFtZXNwYWNlSWRdfVtyLiRpc05zQWdub3N0aWNdKCl7cmV0dXJuITF9W3IuJGFjY2VwdFdoaXRlc3BhY2VdKCl7cmV0dXJuITF9W3IuJGlzQ0RBVEFYbWxdKCl7cmV0dXJuITF9W3IuJGlzQmluZGFibGVdKCl7cmV0dXJuITF9W3IuJHBvcFBhcmFdKCl7dGhpcy5wYXJhJiZ0aGlzW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ucGFyYVN0YWNrLnBvcCgpfVtyLiRwdXNoUGFyYV0oKXt0aGlzW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ucGFyYVN0YWNrLnB1c2godGhpcy5wYXJhKX1bci4kc2V0SWRdKGUpe3RoaXMuaWQmJnRoaXNbci4kbmFtZXNwYWNlSWRdPT09by5OYW1lc3BhY2VJZHMudGVtcGxhdGUuaWQmJmUuc2V0KHRoaXMuaWQsdGhpcyl9W3IuJGdldFRlbXBsYXRlUm9vdF0oKXtyZXR1cm4gdGhpc1tyLiRnbG9iYWxEYXRhXS50ZW1wbGF0ZX1bci4kaXNTcGxpdHRhYmxlXSgpe3JldHVybiExfVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpe3JldHVybiExfVtyLiRhcHBlbmRDaGlsZF0oZSl7ZVtDXT10aGlzO3RoaXNbZF0ucHVzaChlKTshZVtyLiRnbG9iYWxEYXRhXSYmdGhpc1tyLiRnbG9iYWxEYXRhXSYmKGVbci4kZ2xvYmFsRGF0YV09dGhpc1tyLiRnbG9iYWxEYXRhXSl9W3IuJHJlbW92ZUNoaWxkXShlKXtjb25zdCB0PXRoaXNbZF0uaW5kZXhPZihlKTt0aGlzW2RdLnNwbGljZSh0LDEpfVtyLiRoYXNTZXR0YWJsZVZhbHVlXSgpe3JldHVybiB0aGlzLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpfVtyLiRzZXRWYWx1ZV0oZSl7fVtyLiRvblRleHRdKGUpe31bci4kZmluYWxpemVdKCl7fVtyLiRjbGVhbl0oZSl7ZGVsZXRlIHRoaXNbd107aWYodGhpc1tyLiRjbGVhbnVwXSl7ZS5jbGVhbih0aGlzW3IuJGNsZWFudXBdKTtkZWxldGUgdGhpc1tyLiRjbGVhbnVwXX19W3IuJGluZGV4T2ZdKGUpe3JldHVybiB0aGlzW2RdLmluZGV4T2YoZSl9W3IuJGluc2VydEF0XShlLHQpe3RbQ109dGhpczt0aGlzW2RdLnNwbGljZShlLDAsdCk7IXRbci4kZ2xvYmFsRGF0YV0mJnRoaXNbci4kZ2xvYmFsRGF0YV0mJih0W3IuJGdsb2JhbERhdGFdPXRoaXNbci4kZ2xvYmFsRGF0YV0pfVtyLiRpc1RyYW5zcGFyZW50XSgpe3JldHVybiF0aGlzLm5hbWV9W3IuJGxhc3RBdHRyaWJ1dGVdKCl7cmV0dXJuIiJ9W3IuJHRleHRdKCl7cmV0dXJuIDA9PT10aGlzW2RdLmxlbmd0aD90aGlzW3IuJGNvbnRlbnRdOnRoaXNbZF0ubWFwKChlPT5lW3IuJHRleHRdKCkpKS5qb2luKCIiKX1nZXRbdV0oKXtjb25zdCBlPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTtpZighZS5fYXR0cmlidXRlcyl7Y29uc3QgdD1lLl9hdHRyaWJ1dGVzPW5ldyBTZXQ7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKG51bGw9PT10aGlzW2VdfHx0aGlzW2VdaW5zdGFuY2VvZiBYRkFPYmplY3R8fHRoaXNbZV1pbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5KWJyZWFrO3QuYWRkKGUpfX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcyx1LGUuX2F0dHJpYnV0ZXMpfVtyLiRpc0Rlc2NlbmRlbnRdKGUpe2xldCB0PXRoaXM7Zm9yKDt0Oyl7aWYodD09PWUpcmV0dXJuITA7dD10W3IuJGdldFBhcmVudF0oKX1yZXR1cm4hMX1bci4kZ2V0UGFyZW50XSgpe3JldHVybiB0aGlzW0NdfVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpe3JldHVybiB0aGlzW3IuJGdldFBhcmVudF0oKX1bci4kZ2V0Q2hpbGRyZW5dKGU9bnVsbCl7cmV0dXJuIGU/dGhpc1tlXTp0aGlzW2RdfVtyLiRkdW1wXSgpe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzW3IuJGNvbnRlbnRdJiYoZS4kY29udGVudD10aGlzW3IuJGNvbnRlbnRdKTtmb3IoY29uc3QgdCBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7Y29uc3QgYT10aGlzW3RdO251bGwhPT1hJiYoYSBpbnN0YW5jZW9mIFhGQU9iamVjdD9lW3RdPWFbci4kZHVtcF0oKTphIGluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXk/YS5pc0VtcHR5KCl8fChlW3RdPWEuZHVtcCgpKTplW3RdPWEpfXJldHVybiBlfVtyLiR0b1N0eWxlXSgpe3JldHVybiBudWxsfVtyLiR0b0hUTUxdKCl7cmV0dXJuIG4uSFRNTFJlc3VsdC5FTVBUWX0qW3IuJGdldENvbnRhaW5lZENoaWxkcmVuXSgpe2Zvcihjb25zdCBlIG9mIHRoaXNbci4kZ2V0Q2hpbGRyZW5dKCkpeWllbGQgZX0qW21dKGUsdCl7Zm9yKGNvbnN0IGEgb2YgdGhpc1tyLiRnZXRDb250YWluZWRDaGlsZHJlbl0oKSlpZighZXx8dD09PWUuaGFzKGFbci4kbm9kZU5hbWVdKSl7Y29uc3QgZT10aGlzW3IuJGdldEF2YWlsYWJsZVNwYWNlXSgpLHQ9YVtyLiR0b0hUTUxdKGUpO3Quc3VjY2Vzc3x8KHRoaXNbci4kZXh0cmFdLmZhaWxpbmdOb2RlPWEpO3lpZWxkIHR9fVtyLiRmbHVzaEhUTUxdKCl7cmV0dXJuIG51bGx9W3IuJGFkZEhUTUxdKGUsdCl7dGhpc1tyLiRleHRyYV0uY2hpbGRyZW4ucHVzaChlKX1bci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCl7fVtyLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjplPW51bGwsaW5jbHVkZTp0PSEwfSl7aWYodGhpc1tyLiRleHRyYV0uZ2VuZXJhdG9yKXtjb25zdCBlPXRoaXNbci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCksdD10aGlzW3IuJGV4dHJhXS5mYWlsaW5nTm9kZVtyLiR0b0hUTUxdKGUpO2lmKCF0LnN1Y2Nlc3MpcmV0dXJuIHQ7dC5odG1sJiZ0aGlzW3IuJGFkZEhUTUxdKHQuaHRtbCx0LmJib3gpO2RlbGV0ZSB0aGlzW3IuJGV4dHJhXS5mYWlsaW5nTm9kZX1lbHNlIHRoaXNbci4kZXh0cmFdLmdlbmVyYXRvcj10aGlzW21dKGUsdCk7Zm9yKDs7KXtjb25zdCBlPXRoaXNbci4kZXh0cmFdLmdlbmVyYXRvci5uZXh0KCk7aWYoZS5kb25lKWJyZWFrO2NvbnN0IHQ9ZS52YWx1ZTtpZighdC5zdWNjZXNzKXJldHVybiB0O3QuaHRtbCYmdGhpc1tyLiRhZGRIVE1MXSh0Lmh0bWwsdC5iYm94KX10aGlzW3IuJGV4dHJhXS5nZW5lcmF0b3I9bnVsbDtyZXR1cm4gbi5IVE1MUmVzdWx0LkVNUFRZfVtyLiRzZXRTZXRBdHRyaWJ1dGVzXShlKXt0aGlzW3ZdPW5ldyBTZXQoT2JqZWN0LmtleXMoZSkpfVt5XShlKXtjb25zdCB0PXRoaXNbdV0sYT10aGlzW3ZdO3JldHVyblsuLi5lXS5maWx0ZXIoKGU9PnQuaGFzKGUpJiYhYS5oYXMoZSkpKX1bci4kcmVzb2x2ZVByb3RvdHlwZXNdKGUsdD1uZXcgU2V0KXtmb3IoY29uc3QgYSBvZiB0aGlzW2RdKWFba10oZSx0KX1ba10oZSx0KXtjb25zdCBhPXRoaXNbYl0oZSx0KTthP3RoaXNbbF0oYSxlLHQpOnRoaXNbci4kcmVzb2x2ZVByb3RvdHlwZXNdKGUsdCl9W2JdKGUsdCl7Y29uc3R7dXNlOmEsdXNlaHJlZjpufT10aGlzO2lmKCFhJiYhbilyZXR1cm4gbnVsbDtsZXQgcz1udWxsLG89bnVsbCxoPW51bGwsdT1hO2lmKG4pe3U9bjtuLnN0YXJ0c1dpdGgoIiNzb20oIikmJm4uZW5kc1dpdGgoIikiKT9vPW4uc2xpY2UoNSwtMSk6bi5zdGFydHNXaXRoKCIuI3NvbSgiKSYmbi5lbmRzV2l0aCgiKSIpP289bi5zbGljZSg2LC0xKTpuLnN0YXJ0c1dpdGgoIiMiKT9oPW4uc2xpY2UoMSk6bi5zdGFydHNXaXRoKCIuIyIpJiYoaD1uLnNsaWNlKDIpKX1lbHNlIGEuc3RhcnRzV2l0aCgiIyIpP2g9YS5zbGljZSgxKTpvPWE7dGhpcy51c2U9dGhpcy51c2VocmVmPSIiO2lmKGgpcz1lLmdldChoKTtlbHNle3M9KDAsYy5zZWFyY2hOb2RlKShlLmdldChyLiRyb290KSx0aGlzLG8sITAsITEpO3MmJihzPXNbMF0pfWlmKCFzKXsoMCxpLndhcm4pKGBYRkEgLSBJbnZhbGlkIHByb3RvdHlwZSByZWZlcmVuY2U6ICR7dX0uYCk7cmV0dXJuIG51bGx9aWYoc1tyLiRub2RlTmFtZV0hPT10aGlzW3IuJG5vZGVOYW1lXSl7KDAsaS53YXJuKShgWEZBIC0gSW5jb21wYXRpYmxlIHByb3RvdHlwZTogJHtzW3IuJG5vZGVOYW1lXX0gIT09ICR7dGhpc1tyLiRub2RlTmFtZV19LmApO3JldHVybiBudWxsfWlmKHQuaGFzKHMpKXsoMCxpLndhcm4pKCJYRkEgLSBDeWNsZSBkZXRlY3RlZCBpbiBwcm90b3R5cGVzIHVzZS4iKTtyZXR1cm4gbnVsbH10LmFkZChzKTtjb25zdCBkPXNbYl0oZSx0KTtkJiZzW2xdKGQsZSx0KTtzW3IuJHJlc29sdmVQcm90b3R5cGVzXShlLHQpO3QuZGVsZXRlKHMpO3JldHVybiBzfVtsXShlLHQsYSl7aWYoYS5oYXMoZSkpeygwLGkud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpO3JldHVybn0hdGhpc1tyLiRjb250ZW50XSYmZVtyLiRjb250ZW50XSYmKHRoaXNbci4kY29udGVudF09ZVtyLiRjb250ZW50XSk7bmV3IFNldChhKS5hZGQoZSk7Zm9yKGNvbnN0IHQgb2YgdGhpc1t5XShlW3ZdKSl7dGhpc1t0XT1lW3RdO3RoaXNbdl0mJnRoaXNbdl0uYWRkKHQpfWZvcihjb25zdCBuIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZih0aGlzW3VdLmhhcyhuKSljb250aW51ZTtjb25zdCBpPXRoaXNbbl0scz1lW25dO2lmKGkgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSl7Zm9yKGNvbnN0IGUgb2YgaVtkXSllW2tdKHQsYSk7Zm9yKGxldCBuPWlbZF0ubGVuZ3RoLG89c1tkXS5sZW5ndGg7bjxvO24rKyl7Y29uc3Qgcz1lW2RdW25dW3IuJGNsb25lXSgpO2lmKCFpLnB1c2gocykpYnJlYWs7c1tDXT10aGlzO3RoaXNbZF0ucHVzaChzKTtzW2tdKHQsYSl9fWVsc2UgaWYobnVsbD09PWkpe2lmKG51bGwhPT1zKXtjb25zdCBlPXNbci4kY2xvbmVdKCk7ZVtDXT10aGlzO3RoaXNbbl09ZTt0aGlzW2RdLnB1c2goZSk7ZVtrXSh0LGEpfX1lbHNle2lbci4kcmVzb2x2ZVByb3RvdHlwZXNdKHQsYSk7cyYmaVtsXShzLHQsYSl9fX1zdGF0aWNbZl0oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoKGU9PlhGQU9iamVjdFtmXShlKSkpOiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWU/T2JqZWN0LmFzc2lnbih7fSxlKTplfVtyLiRjbG9uZV0oKXtjb25zdCBlPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpKTtmb3IoY29uc3QgdCBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRoaXMpKXRyeXtlW3RdPXRoaXNbdF19Y2F0Y2h7KDAsaS5zaGFkb3cpKGUsdCx0aGlzW3RdKX1lW3IuJHVpZF09YCR7ZVtyLiRub2RlTmFtZV19JHtPKyt9YDtlW2RdPVtdO2Zvcihjb25zdCB0IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZih0aGlzW3VdLmhhcyh0KSl7ZVt0XT1YRkFPYmplY3RbZl0odGhpc1t0XSk7Y29udGludWV9Y29uc3QgYT10aGlzW3RdO2VbdF09YSBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5P25ldyBYRkFPYmplY3RBcnJheShhW1NdKTpudWxsfWZvcihjb25zdCB0IG9mIHRoaXNbZF0pe2NvbnN0IGE9dFtyLiRub2RlTmFtZV0sbj10W3IuJGNsb25lXSgpO2VbZF0ucHVzaChuKTtuW0NdPWU7bnVsbD09PWVbYV0/ZVthXT1uOmVbYV1bZF0ucHVzaChuKX1yZXR1cm4gZX1bci4kZ2V0Q2hpbGRyZW5dKGU9bnVsbCl7cmV0dXJuIGU/dGhpc1tkXS5maWx0ZXIoKHQ9PnRbci4kbm9kZU5hbWVdPT09ZSkpOnRoaXNbZF19W3IuJGdldENoaWxkcmVuQnlDbGFzc10oZSl7cmV0dXJuIHRoaXNbZV19W3IuJGdldENoaWxkcmVuQnlOYW1lXShlLHQsYT0hMCl7cmV0dXJuIEFycmF5LmZyb20odGhpc1tyLiRnZXRDaGlsZHJlbkJ5TmFtZUl0XShlLHQsYSkpfSpbci4kZ2V0Q2hpbGRyZW5CeU5hbWVJdF0oZSx0LGE9ITApe2lmKCJwYXJlbnQiIT09ZSl7Zm9yKGNvbnN0IGEgb2YgdGhpc1tkXSl7YVtyLiRub2RlTmFtZV09PT1lJiYoeWllbGQgYSk7YS5uYW1lPT09ZSYmKHlpZWxkIGEpOyh0fHxhW3IuJGlzVHJhbnNwYXJlbnRdKCkpJiYoeWllbGQqYVtyLiRnZXRDaGlsZHJlbkJ5TmFtZUl0XShlLHQsITEpKX1hJiZ0aGlzW3VdLmhhcyhlKSYmKHlpZWxkIG5ldyBYRkFBdHRyaWJ1dGUodGhpcyxlLHRoaXNbZV0pKX1lbHNlIHlpZWxkIHRoaXNbQ119fXQuWEZBT2JqZWN0PVhGQU9iamVjdDtjbGFzcyBYRkFPYmplY3RBcnJheXtjb25zdHJ1Y3RvcihlPTEvMCl7dGhpc1tTXT1lO3RoaXNbZF09W119Z2V0IGlzWEZBT2JqZWN0KCl7cmV0dXJuITF9Z2V0IGlzWEZBT2JqZWN0QXJyYXkoKXtyZXR1cm4hMH1wdXNoKGUpe2lmKHRoaXNbZF0ubGVuZ3RoPD10aGlzW1NdKXt0aGlzW2RdLnB1c2goZSk7cmV0dXJuITB9KDAsaS53YXJuKShgWEZBIC0gbm9kZSAiJHtlW3IuJG5vZGVOYW1lXX0iIGFjY2VwdHMgbm8gbW9yZSB0aGFuICR7dGhpc1tTXX0gY2hpbGRyZW5gKTtyZXR1cm4hMX1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzW2RdLmxlbmd0aH1kdW1wKCl7cmV0dXJuIDE9PT10aGlzW2RdLmxlbmd0aD90aGlzW2RdWzBdW3IuJGR1bXBdKCk6dGhpc1tkXS5tYXAoKGU9PmVbci4kZHVtcF0oKSkpfVtyLiRjbG9uZV0oKXtjb25zdCBlPW5ldyBYRkFPYmplY3RBcnJheSh0aGlzW1NdKTtlW2RdPXRoaXNbZF0ubWFwKChlPT5lW3IuJGNsb25lXSgpKSk7cmV0dXJuIGV9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXNbZF19Y2xlYXIoKXt0aGlzW2RdLmxlbmd0aD0wfX10LlhGQU9iamVjdEFycmF5PVhGQU9iamVjdEFycmF5O2NsYXNzIFhGQUF0dHJpYnV0ZXtjb25zdHJ1Y3RvcihlLHQsYSl7dGhpc1tDXT1lO3RoaXNbci4kbm9kZU5hbWVdPXQ7dGhpc1tyLiRjb250ZW50XT1hO3RoaXNbci4kY29uc3VtZWRdPSExO3RoaXNbci4kdWlkXT0iYXR0cmlidXRlIitPKyt9W3IuJGdldFBhcmVudF0oKXtyZXR1cm4gdGhpc1tDXX1bci4kaXNEYXRhVmFsdWVdKCl7cmV0dXJuITB9W3IuJGdldERhdGFWYWx1ZV0oKXtyZXR1cm4gdGhpc1tyLiRjb250ZW50XS50cmltKCl9W3IuJHNldFZhbHVlXShlKXtlPWUudmFsdWV8fCIiO3RoaXNbci4kY29udGVudF09ZS50b1N0cmluZygpfVtyLiR0ZXh0XSgpe3JldHVybiB0aGlzW3IuJGNvbnRlbnRdfVtyLiRpc0Rlc2NlbmRlbnRdKGUpe3JldHVybiB0aGlzW0NdPT09ZXx8dGhpc1tDXVtyLiRpc0Rlc2NlbmRlbnRdKGUpfX10LlhGQUF0dHJpYnV0ZT1YRkFBdHRyaWJ1dGU7Y2xhc3MgWG1sT2JqZWN0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhPXt9KXtzdXBlcihlLHQpO3RoaXNbci4kY29udGVudF09IiI7dGhpc1tnXT1udWxsO2lmKCIjdGV4dCIhPT10KXtjb25zdCBlPW5ldyBNYXA7dGhpc1toXT1lO2Zvcihjb25zdFt0LHJdb2YgT2JqZWN0LmVudHJpZXMoYSkpZS5zZXQodCxuZXcgWEZBQXR0cmlidXRlKHRoaXMsdCxyKSk7aWYoYS5oYXNPd25Qcm9wZXJ0eShyLiRuc0F0dHJpYnV0ZXMpKXtjb25zdCBlPWFbci4kbnNBdHRyaWJ1dGVzXS54ZmEuZGF0YU5vZGU7dm9pZCAwIT09ZSYmKCJkYXRhR3JvdXAiPT09ZT90aGlzW2ddPSExOiJkYXRhVmFsdWUiPT09ZSYmKHRoaXNbZ109ITApKX19dGhpc1tyLiRjb25zdW1lZF09ITF9W3IuJHRvU3RyaW5nXShlKXtjb25zdCB0PXRoaXNbci4kbm9kZU5hbWVdO2lmKCIjdGV4dCI9PT10KXtlLnB1c2goKDAscy5lbmNvZGVUb1htbFN0cmluZykodGhpc1tyLiRjb250ZW50XSkpO3JldHVybn1jb25zdCBhPSgwLGkudXRmOFN0cmluZ1RvU3RyaW5nKSh0KSxuPXRoaXNbci4kbmFtZXNwYWNlSWRdPT09VD8ieGZhOiI6IiI7ZS5wdXNoKGA8JHtufSR7YX1gKTtmb3IoY29uc3RbdCxhXW9mIHRoaXNbaF0uZW50cmllcygpKXtjb25zdCBuPSgwLGkudXRmOFN0cmluZ1RvU3RyaW5nKSh0KTtlLnB1c2goYCAke259PSIkeygwLHMuZW5jb2RlVG9YbWxTdHJpbmcpKGFbci4kY29udGVudF0pfSJgKX1udWxsIT09dGhpc1tnXSYmKHRoaXNbZ10/ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhVmFsdWUiJyk6ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhR3JvdXAiJykpO2lmKHRoaXNbci4kY29udGVudF18fDAhPT10aGlzW2RdLmxlbmd0aCl7ZS5wdXNoKCI+Iik7aWYodGhpc1tyLiRjb250ZW50XSkic3RyaW5nIj09dHlwZW9mIHRoaXNbci4kY29udGVudF0/ZS5wdXNoKCgwLHMuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXNbci4kY29udGVudF0pKTp0aGlzW3IuJGNvbnRlbnRdW3IuJHRvU3RyaW5nXShlKTtlbHNlIGZvcihjb25zdCB0IG9mIHRoaXNbZF0pdFtyLiR0b1N0cmluZ10oZSk7ZS5wdXNoKGA8LyR7bn0ke2F9PmApfWVsc2UgZS5wdXNoKCIvPiIpfVtyLiRvbkNoaWxkXShlKXtpZih0aGlzW3IuJGNvbnRlbnRdKXtjb25zdCBlPW5ldyBYbWxPYmplY3QodGhpc1tyLiRuYW1lc3BhY2VJZF0sIiN0ZXh0Iik7dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7ZVtyLiRjb250ZW50XT10aGlzW3IuJGNvbnRlbnRdO3RoaXNbci4kY29udGVudF09IiJ9dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7cmV0dXJuITB9W3IuJG9uVGV4dF0oZSl7dGhpc1tyLiRjb250ZW50XSs9ZX1bci4kZmluYWxpemVdKCl7aWYodGhpc1tyLiRjb250ZW50XSYmdGhpc1tkXS5sZW5ndGg+MCl7Y29uc3QgZT1uZXcgWG1sT2JqZWN0KHRoaXNbci4kbmFtZXNwYWNlSWRdLCIjdGV4dCIpO3RoaXNbci4kYXBwZW5kQ2hpbGRdKGUpO2Vbci4kY29udGVudF09dGhpc1tyLiRjb250ZW50XTtkZWxldGUgdGhpc1tyLiRjb250ZW50XX19W3IuJHRvSFRNTF0oKXtyZXR1cm4iI3RleHQiPT09dGhpc1tyLiRub2RlTmFtZV0/bi5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6IiN0ZXh0Iix2YWx1ZTp0aGlzW3IuJGNvbnRlbnRdfSk6bi5IVE1MUmVzdWx0LkVNUFRZfVtyLiRnZXRDaGlsZHJlbl0oZT1udWxsKXtyZXR1cm4gZT90aGlzW2RdLmZpbHRlcigodD0+dFtyLiRub2RlTmFtZV09PT1lKSk6dGhpc1tkXX1bci4kZ2V0QXR0cmlidXRlc10oKXtyZXR1cm4gdGhpc1toXX1bci4kZ2V0Q2hpbGRyZW5CeUNsYXNzXShlKXtjb25zdCB0PXRoaXNbaF0uZ2V0KGUpO3JldHVybiB2b2lkIDAhPT10P3Q6dGhpc1tyLiRnZXRDaGlsZHJlbl0oZSl9KltyLiRnZXRDaGlsZHJlbkJ5TmFtZUl0XShlLHQpe2NvbnN0IGE9dGhpc1toXS5nZXQoZSk7YSYmKHlpZWxkIGEpO2Zvcihjb25zdCBhIG9mIHRoaXNbZF0pe2Fbci4kbm9kZU5hbWVdPT09ZSYmKHlpZWxkIGEpO3QmJih5aWVsZCphW3IuJGdldENoaWxkcmVuQnlOYW1lSXRdKGUsdCkpfX0qW3IuJGdldEF0dHJpYnV0ZUl0XShlLHQpe2NvbnN0IGE9dGhpc1toXS5nZXQoZSk7IWF8fHQmJmFbci4kY29uc3VtZWRdfHwoeWllbGQgYSk7Zm9yKGNvbnN0IGEgb2YgdGhpc1tkXSl5aWVsZCphW3IuJGdldEF0dHJpYnV0ZUl0XShlLHQpfSpbci4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKGUsdCxhKXtmb3IoY29uc3QgbiBvZiB0aGlzW2RdKXtuW3IuJG5vZGVOYW1lXSE9PWV8fGEmJm5bci4kY29uc3VtZWRdfHwoeWllbGQgbik7dCYmKHlpZWxkKm5bci4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKGUsdCxhKSl9fVtyLiRpc0RhdGFWYWx1ZV0oKXtyZXR1cm4gbnVsbD09PXRoaXNbZ10/MD09PXRoaXNbZF0ubGVuZ3RofHx0aGlzW2RdWzBdW3IuJG5hbWVzcGFjZUlkXT09PW8uTmFtZXNwYWNlSWRzLnhodG1sLmlkOnRoaXNbZ119W3IuJGdldERhdGFWYWx1ZV0oKXtyZXR1cm4gbnVsbD09PXRoaXNbZ10/MD09PXRoaXNbZF0ubGVuZ3RoP3RoaXNbci4kY29udGVudF0udHJpbSgpOnRoaXNbZF1bMF1bci4kbmFtZXNwYWNlSWRdPT09by5OYW1lc3BhY2VJZHMueGh0bWwuaWQ/dGhpc1tkXVswXVtyLiR0ZXh0XSgpLnRyaW0oKTpudWxsOnRoaXNbci4kY29udGVudF0udHJpbSgpfVtyLiRzZXRWYWx1ZV0oZSl7ZT1lLnZhbHVlfHwiIjt0aGlzW3IuJGNvbnRlbnRdPWUudG9TdHJpbmcoKX1bci4kZHVtcF0oZT0hMSl7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2UmJih0LiRucz10aGlzW3IuJG5hbWVzcGFjZUlkXSk7dGhpc1tyLiRjb250ZW50XSYmKHQuJGNvbnRlbnQ9dGhpc1tyLiRjb250ZW50XSk7dC4kbmFtZT10aGlzW3IuJG5vZGVOYW1lXTt0LmNoaWxkcmVuPVtdO2Zvcihjb25zdCBhIG9mIHRoaXNbZF0pdC5jaGlsZHJlbi5wdXNoKGFbci4kZHVtcF0oZSkpO3QuYXR0cmlidXRlcz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFtlLGFdb2YgdGhpc1toXSl0LmF0dHJpYnV0ZXNbZV09YVtyLiRjb250ZW50XTtyZXR1cm4gdH19dC5YbWxPYmplY3Q9WG1sT2JqZWN0O2NsYXNzIENvbnRlbnRPYmplY3QgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpO3RoaXNbci4kY29udGVudF09IiJ9W3IuJG9uVGV4dF0oZSl7dGhpc1tyLiRjb250ZW50XSs9ZX1bci4kZmluYWxpemVdKCl7fX10LkNvbnRlbnRPYmplY3Q9Q29udGVudE9iamVjdDtjbGFzcyBPcHRpb25PYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcihlLHQpO3RoaXNbeF09YX1bci4kZmluYWxpemVdKCl7dGhpc1tyLiRjb250ZW50XT0oMCxuLmdldEtleXdvcmQpKHtkYXRhOnRoaXNbci4kY29udGVudF0sZGVmYXVsdFZhbHVlOnRoaXNbeF1bMF0sdmFsaWRhdGU6ZT0+dGhpc1t4XS5pbmNsdWRlcyhlKX0pfVtyLiRjbGVhbl0oZSl7c3VwZXJbci4kY2xlYW5dKGUpO2RlbGV0ZSB0aGlzW3hdfX10Lk9wdGlvbk9iamVjdD1PcHRpb25PYmplY3Q7Y2xhc3MgU3RyaW5nT2JqZWN0IGV4dGVuZHMgQ29udGVudE9iamVjdHtbci4kZmluYWxpemVdKCl7dGhpc1tyLiRjb250ZW50XT10aGlzW3IuJGNvbnRlbnRdLnRyaW0oKX19dC5TdHJpbmdPYmplY3Q9U3RyaW5nT2JqZWN0O2NsYXNzIEludGVnZXJPYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhLHIpe3N1cGVyKGUsdCk7dGhpc1twXT1hO3RoaXNbRl09cn1bci4kZmluYWxpemVdKCl7dGhpc1tyLiRjb250ZW50XT0oMCxuLmdldEludGVnZXIpKHtkYXRhOnRoaXNbci4kY29udGVudF0sZGVmYXVsdFZhbHVlOnRoaXNbcF0sdmFsaWRhdGU6dGhpc1tGXX0pfVtyLiRjbGVhbl0oZSl7c3VwZXJbci4kY2xlYW5dKGUpO2RlbGV0ZSB0aGlzW3BdO2RlbGV0ZSB0aGlzW0ZdfX10LkludGVnZXJPYmplY3Q9SW50ZWdlck9iamVjdDt0Lk9wdGlvbjAxPWNsYXNzIE9wdGlvbjAxIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCwwLChlPT4xPT09ZSkpfX07dC5PcHRpb24xMD1jbGFzcyBPcHRpb24xMCBleHRlbmRzIEludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsMSwoZT0+MD09PWUpKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuY3JlYXRlRGF0YU5vZGU9ZnVuY3Rpb24gY3JlYXRlRGF0YU5vZGUoZSx0LGEpe2NvbnN0IGk9cGFyc2VFeHByZXNzaW9uKGEpO2lmKCFpKXJldHVybiBudWxsO2lmKGkuc29tZSgoZT0+ZS5vcGVyYXRvcj09PW8uZG90RG90KSkpcmV0dXJuIG51bGw7Y29uc3Qgcz1jLmdldChpWzBdLm5hbWUpO2xldCBsPTA7aWYocyl7ZT1zKGUsdCk7bD0xfWVsc2UgZT10fHxlO2ZvcihsZXQgdD1pLmxlbmd0aDtsPHQ7bCsrKXtjb25zdHtuYW1lOnQsb3BlcmF0b3I6YSxpbmRleDpzfT1pW2xdO2lmKCFpc0Zpbml0ZShzKSl7aVtsXS5pbmRleD0wO3JldHVybiBlLmNyZWF0ZU5vZGVzKGkuc2xpY2UobCkpfWxldCBjO3N3aXRjaChhKXtjYXNlIG8uZG90OmM9ZVtyLiRnZXRDaGlsZHJlbkJ5TmFtZV0odCwhMSk7YnJlYWs7Y2FzZSBvLmRvdERvdDpjPWVbci4kZ2V0Q2hpbGRyZW5CeU5hbWVdKHQsITApO2JyZWFrO2Nhc2Ugby5kb3RIYXNoOmM9ZVtyLiRnZXRDaGlsZHJlbkJ5Q2xhc3NdKHQpO2M9Yy5pc1hGQU9iamVjdEFycmF5P2MuY2hpbGRyZW46W2NdfWlmKDA9PT1jLmxlbmd0aClyZXR1cm4gZS5jcmVhdGVOb2RlcyhpLnNsaWNlKGwpKTtpZighKHM8Yy5sZW5ndGgpKXtpW2xdLmluZGV4PXMtYy5sZW5ndGg7cmV0dXJuIGUuY3JlYXRlTm9kZXMoaS5zbGljZShsKSl9e2NvbnN0IHQ9Y1tzXTtpZighdC5pc1hGQU9iamVjdCl7KDAsbi53YXJuKSgiWEZBIC0gQ2Fubm90IGNyZWF0ZSBhIG5vZGUuIik7cmV0dXJuIG51bGx9ZT10fX1yZXR1cm4gbnVsbH07dC5zZWFyY2hOb2RlPWZ1bmN0aW9uIHNlYXJjaE5vZGUoZSx0LGEsbj0hMCxpPSEwKXtjb25zdCBzPXBhcnNlRXhwcmVzc2lvbihhLG4pO2lmKCFzKXJldHVybiBudWxsO2NvbnN0IGg9Yy5nZXQoc1swXS5uYW1lKTtsZXQgdSxkPTA7aWYoaCl7dT0hMDtlPVtoKGUsdCldO2Q9MX1lbHNle3U9bnVsbD09PXQ7ZT1bdHx8ZV19Zm9yKGxldCBhPXMubGVuZ3RoO2Q8YTtkKyspe2NvbnN0e25hbWU6YSxjYWNoZU5hbWU6bixvcGVyYXRvcjpjLGluZGV4Omh9PXNbZF0sZj1bXTtmb3IoY29uc3QgdCBvZiBlKXtpZighdC5pc1hGQU9iamVjdCljb250aW51ZTtsZXQgZSxzO2lmKGkpe3M9bC5nZXQodCk7aWYoIXMpe3M9bmV3IE1hcDtsLnNldCh0LHMpfWU9cy5nZXQobil9aWYoIWUpe3N3aXRjaChjKXtjYXNlIG8uZG90OmU9dFtyLiRnZXRDaGlsZHJlbkJ5TmFtZV0oYSwhMSk7YnJlYWs7Y2FzZSBvLmRvdERvdDplPXRbci4kZ2V0Q2hpbGRyZW5CeU5hbWVdKGEsITApO2JyZWFrO2Nhc2Ugby5kb3RIYXNoOmU9dFtyLiRnZXRDaGlsZHJlbkJ5Q2xhc3NdKGEpO2U9ZS5pc1hGQU9iamVjdEFycmF5P2UuY2hpbGRyZW46W2VdfWkmJnMuc2V0KG4sZSl9ZS5sZW5ndGg+MCYmZi5wdXNoKGUpfWlmKDAhPT1mLmxlbmd0aHx8dXx8MCE9PWQpZT1pc0Zpbml0ZShoKT9mLmZpbHRlcigoZT0+aDxlLmxlbmd0aCkpLm1hcCgoZT0+ZVtoXSkpOmYuZmxhdCgpO2Vsc2V7Y29uc3QgYT10W3IuJGdldFBhcmVudF0oKTtpZighKHQ9YSkpcmV0dXJuIG51bGw7ZD0tMTtlPVt0XX19aWYoMD09PWUubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiBlfTt2YXIgcj1hKDc4KSxuPWEoMik7Y29uc3QgaT0vXlteLltdKy8scz0vXlteXF1dKy8sbz17ZG90OjAsZG90RG90OjEsZG90SGFzaDoyLGRvdEJyYWNrZXQ6Myxkb3RQYXJlbjo0fSxjPW5ldyBNYXAoW1siJGRhdGEiLChlLHQpPT5lLmRhdGFzZXRzP2UuZGF0YXNldHMuZGF0YTplXSxbIiRyZWNvcmQiLChlLHQpPT4oZS5kYXRhc2V0cz9lLmRhdGFzZXRzLmRhdGE6ZSlbci4kZ2V0Q2hpbGRyZW5dKClbMF1dLFsiJHRlbXBsYXRlIiwoZSx0KT0+ZS50ZW1wbGF0ZV0sWyIkY29ubmVjdGlvblNldCIsKGUsdCk9PmUuY29ubmVjdGlvblNldF0sWyIkZm9ybSIsKGUsdCk9PmUuZm9ybV0sWyIkbGF5b3V0IiwoZSx0KT0+ZS5sYXlvdXRdLFsiJGhvc3QiLChlLHQpPT5lLmhvc3RdLFsiJGRhdGFXaW5kb3ciLChlLHQpPT5lLmRhdGFXaW5kb3ddLFsiJGV2ZW50IiwoZSx0KT0+ZS5ldmVudF0sWyIhIiwoZSx0KT0+ZS5kYXRhc2V0c10sWyIkeGZhIiwoZSx0KT0+ZV0sWyJ4ZmEiLChlLHQpPT5lXSxbIiQiLChlLHQpPT50XV0pLGw9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKGUsdCxhPSEwKXtsZXQgcj1lLm1hdGNoKGkpO2lmKCFyKXJldHVybiBudWxsO2xldFtjXT1yO2NvbnN0IGw9W3tuYW1lOmMsY2FjaGVOYW1lOiIuIitjLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsLG9wZXJhdG9yOm8uZG90fV07bGV0IGg9Yy5sZW5ndGg7Zm9yKDtoPGUubGVuZ3RoOyl7Y29uc3QgZD1oO2lmKCJbIj09PWUuY2hhckF0KGgrKykpe3I9ZS5zbGljZShoKS5tYXRjaChzKTtpZighcil7KDAsbi53YXJuKSgiWEZBIC0gSW52YWxpZCBpbmRleCBpbiBTT00gZXhwcmVzc2lvbiIpO3JldHVybiBudWxsfWwuYXQoLTEpLmluZGV4PSIqIj09PSh1PSh1PXJbMF0pLnRyaW0oKSk/MS8wOnBhcnNlSW50KHUsMTApfHwwO2grPXJbMF0ubGVuZ3RoKzE7Y29udGludWV9bGV0IGY7c3dpdGNoKGUuY2hhckF0KGgpKXtjYXNlIi4iOmlmKCF0KXJldHVybiBudWxsO2grKztmPW8uZG90RG90O2JyZWFrO2Nhc2UiIyI6aCsrO2Y9by5kb3RIYXNoO2JyZWFrO2Nhc2UiWyI6aWYoYSl7KDAsbi53YXJuKSgiWEZBIC0gU09NIGV4cHJlc3Npb24gY29udGFpbnMgYSBGb3JtQ2FsYyBzdWJleHByZXNzaW9uIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4iKTtyZXR1cm4gbnVsbH1mPW8uZG90QnJhY2tldDticmVhaztjYXNlIigiOmlmKGEpeygwLG4ud2FybikoIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgSmF2YVNjcmlwdCBzdWJleHByZXNzaW9uIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4iKTtyZXR1cm4gbnVsbH1mPW8uZG90UGFyZW47YnJlYWs7ZGVmYXVsdDpmPW8uZG90fXI9ZS5zbGljZShoKS5tYXRjaChpKTtpZighcilicmVhaztbY109cjtoKz1jLmxlbmd0aDtsLnB1c2goe25hbWU6YyxjYWNoZU5hbWU6ZS5zbGljZShkLGgpLG9wZXJhdG9yOmYsaW5kZXg6MCxqczpudWxsLGZvcm1DYWxjOm51bGx9KX12YXIgdTtyZXR1cm4gbH19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5EYXRhSGFuZGxlcj12b2lkIDA7dmFyIHI9YSg3OCk7dC5EYXRhSGFuZGxlcj1jbGFzcyBEYXRhSGFuZGxlcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZGF0YT10O3RoaXMuZGF0YXNldD1lLmRhdGFzZXRzfHxudWxsfXNlcmlhbGl6ZShlKXtjb25zdCB0PVtbLTEsdGhpcy5kYXRhW3IuJGdldENoaWxkcmVuXSgpXV07Zm9yKDt0Lmxlbmd0aD4wOyl7Y29uc3QgYT10LmF0KC0xKSxbbixpXT1hO2lmKG4rMT09PWkubGVuZ3RoKXt0LnBvcCgpO2NvbnRpbnVlfWNvbnN0IHM9aVsrK2FbMF1dLG89ZS5nZXQoc1tyLiR1aWRdKTtpZihvKXNbci4kc2V0VmFsdWVdKG8pO2Vsc2V7Y29uc3QgdD1zW3IuJGdldEF0dHJpYnV0ZXNdKCk7Zm9yKGNvbnN0IGEgb2YgdC52YWx1ZXMoKSl7Y29uc3QgdD1lLmdldChhW3IuJHVpZF0pO2lmKHQpe2Fbci4kc2V0VmFsdWVdKHQpO2JyZWFrfX19Y29uc3QgYz1zW3IuJGdldENoaWxkcmVuXSgpO2MubGVuZ3RoPjAmJnQucHVzaChbLTEsY10pfWNvbnN0IGE9Wyc8eGZhOmRhdGFzZXRzIHhtbG5zOnhmYT0iaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtZGF0YS8xLjAvIj4nXTtpZih0aGlzLmRhdGFzZXQpZm9yKGNvbnN0IGUgb2YgdGhpcy5kYXRhc2V0W3IuJGdldENoaWxkcmVuXSgpKSJkYXRhIiE9PWVbci4kbm9kZU5hbWVdJiZlW3IuJHRvU3RyaW5nXShhKTt0aGlzLmRhdGFbci4kdG9TdHJpbmddKGEpO2EucHVzaCgiPC94ZmE6ZGF0YXNldHM+Iik7cmV0dXJuIGEuam9pbigiIil9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhGQVBhcnNlcj12b2lkIDA7dmFyIHI9YSg3OCksbj1hKDcxKSxpPWEoOTEpLHM9YSgyKTtjbGFzcyBYRkFQYXJzZXIgZXh0ZW5kcyBuLlhNTFBhcnNlckJhc2V7Y29uc3RydWN0b3IoZT1udWxsLHQ9ITEpe3N1cGVyKCk7dGhpcy5fYnVpbGRlcj1uZXcgaS5CdWlsZGVyKGUpO3RoaXMuX3N0YWNrPVtdO3RoaXMuX2dsb2JhbERhdGE9e3VzZWRUeXBlZmFjZXM6bmV3IFNldH07dGhpcy5faWRzPW5ldyBNYXA7dGhpcy5fY3VycmVudD10aGlzLl9idWlsZGVyLmJ1aWxkUm9vdCh0aGlzLl9pZHMpO3RoaXMuX2Vycm9yQ29kZT1uLlhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yO3RoaXMuX3doaXRlUmVnZXg9L15ccyskLzt0aGlzLl9uYnNwcz0vXHhhMCsvZzt0aGlzLl9yaWNoVGV4dD10fXBhcnNlKGUpe3RoaXMucGFyc2VYbWwoZSk7aWYodGhpcy5fZXJyb3JDb2RlPT09bi5YTUxQYXJzZXJFcnJvckNvZGUuTm9FcnJvcil7dGhpcy5fY3VycmVudFtyLiRmaW5hbGl6ZV0oKTtyZXR1cm4gdGhpcy5fY3VycmVudC5lbGVtZW50fX1vblRleHQoZSl7ZT1lLnJlcGxhY2UodGhpcy5fbmJzcHMsKGU9PmUuc2xpY2UoMSkrIiAiKSk7dGhpcy5fcmljaFRleHR8fHRoaXMuX2N1cnJlbnRbci4kYWNjZXB0V2hpdGVzcGFjZV0oKT90aGlzLl9jdXJyZW50W3IuJG9uVGV4dF0oZSx0aGlzLl9yaWNoVGV4dCk6dGhpcy5fd2hpdGVSZWdleC50ZXN0KGUpfHx0aGlzLl9jdXJyZW50W3IuJG9uVGV4dF0oZS50cmltKCkpfW9uQ2RhdGEoZSl7dGhpcy5fY3VycmVudFtyLiRvblRleHRdKGUpfV9ta0F0dHJpYnV0ZXMoZSx0KXtsZXQgYT1udWxsLG49bnVsbDtjb25zdCBpPU9iamVjdC5jcmVhdGUoe30pO2Zvcihjb25zdHtuYW1lOm8sdmFsdWU6Y31vZiBlKWlmKCJ4bWxucyI9PT1vKWE/KDAscy53YXJuKShgWEZBIC0gbXVsdGlwbGUgbmFtZXNwYWNlIGRlZmluaXRpb24gaW4gPCR7dH0+YCk6YT1jO2Vsc2UgaWYoby5zdGFydHNXaXRoKCJ4bWxuczoiKSl7Y29uc3QgZT1vLnN1YnN0cmluZyg2KTtufHwobj1bXSk7bi5wdXNoKHtwcmVmaXg6ZSx2YWx1ZTpjfSl9ZWxzZXtjb25zdCBlPW8uaW5kZXhPZigiOiIpO2lmKC0xPT09ZSlpW29dPWM7ZWxzZXtsZXQgdD1pW3IuJG5zQXR0cmlidXRlc107dHx8KHQ9aVtyLiRuc0F0dHJpYnV0ZXNdPU9iamVjdC5jcmVhdGUobnVsbCkpO2NvbnN0W2Esbl09W28uc2xpY2UoMCxlKSxvLnNsaWNlKGUrMSldOyh0W2FdfHw9T2JqZWN0LmNyZWF0ZShudWxsKSlbbl09Y319cmV0dXJuW2EsbixpXX1fZ2V0TmFtZUFuZFByZWZpeChlLHQpe2NvbnN0IGE9ZS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PT1hP1tlLG51bGxdOltlLnN1YnN0cmluZyhhKzEpLHQ/IiI6ZS5zdWJzdHJpbmcoMCxhKV19b25CZWdpbkVsZW1lbnQoZSx0LGEpe2NvbnN0W24saSxzXT10aGlzLl9ta0F0dHJpYnV0ZXModCxlKSxbbyxjXT10aGlzLl9nZXROYW1lQW5kUHJlZml4KGUsdGhpcy5fYnVpbGRlci5pc05zQWdub3N0aWMoKSksbD10aGlzLl9idWlsZGVyLmJ1aWxkKHtuc1ByZWZpeDpjLG5hbWU6byxhdHRyaWJ1dGVzOnMsbmFtZXNwYWNlOm4scHJlZml4ZXM6aX0pO2xbci4kZ2xvYmFsRGF0YV09dGhpcy5fZ2xvYmFsRGF0YTtpZihhKXtsW3IuJGZpbmFsaXplXSgpO3RoaXMuX2N1cnJlbnRbci4kb25DaGlsZF0obCkmJmxbci4kc2V0SWRdKHRoaXMuX2lkcyk7bFtyLiRjbGVhbl0odGhpcy5fYnVpbGRlcil9ZWxzZXt0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnQpO3RoaXMuX2N1cnJlbnQ9bH19b25FbmRFbGVtZW50KGUpe2NvbnN0IHQ9dGhpcy5fY3VycmVudDtpZih0W3IuJGlzQ0RBVEFYbWxdKCkmJiJzdHJpbmciPT10eXBlb2YgdFtyLiRjb250ZW50XSl7Y29uc3QgZT1uZXcgWEZBUGFyc2VyO2UuX2dsb2JhbERhdGE9dGhpcy5fZ2xvYmFsRGF0YTtjb25zdCBhPWUucGFyc2UodFtyLiRjb250ZW50XSk7dFtyLiRjb250ZW50XT1udWxsO3Rbci4kb25DaGlsZF0oYSl9dFtyLiRmaW5hbGl6ZV0oKTt0aGlzLl9jdXJyZW50PXRoaXMuX3N0YWNrLnBvcCgpO3RoaXMuX2N1cnJlbnRbci4kb25DaGlsZF0odCkmJnRbci4kc2V0SWRdKHRoaXMuX2lkcyk7dFtyLiRjbGVhbl0odGhpcy5fYnVpbGRlcil9b25FcnJvcihlKXt0aGlzLl9lcnJvckNvZGU9ZX19dC5YRkFQYXJzZXI9WEZBUGFyc2VyfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQnVpbGRlcj12b2lkIDA7dmFyIHI9YSg4MSksbj1hKDc4KSxpPWEoOTIpLHM9YSg4MCksbz1hKDEwMSksYz1hKDIpLGw9YSg4Nyk7Y2xhc3MgUm9vdCBleHRlbmRzIGwuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKC0xLCJyb290IixPYmplY3QuY3JlYXRlKG51bGwpKTt0aGlzLmVsZW1lbnQ9bnVsbDt0aGlzW24uJGlkc109ZX1bbi4kb25DaGlsZF0oZSl7dGhpcy5lbGVtZW50PWU7cmV0dXJuITB9W24uJGZpbmFsaXplXSgpe3N1cGVyW24uJGZpbmFsaXplXSgpO2lmKHRoaXMuZWxlbWVudC50ZW1wbGF0ZSBpbnN0YW5jZW9mIHMuVGVtcGxhdGUpe3RoaXNbbi4kaWRzXS5zZXQobi4kcm9vdCx0aGlzLmVsZW1lbnQpO3RoaXMuZWxlbWVudC50ZW1wbGF0ZVtuLiRyZXNvbHZlUHJvdG90eXBlc10odGhpc1tuLiRpZHNdKTt0aGlzLmVsZW1lbnQudGVtcGxhdGVbbi4kaWRzXT10aGlzW24uJGlkc119fX1jbGFzcyBFbXB0eSBleHRlbmRzIGwuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKCl7c3VwZXIoLTEsIiIsT2JqZWN0LmNyZWF0ZShudWxsKSl9W24uJG9uQ2hpbGRdKGUpe3JldHVybiExfX10LkJ1aWxkZXI9Y2xhc3MgQnVpbGRlcntjb25zdHJ1Y3RvcihlPW51bGwpe3RoaXMuX25hbWVzcGFjZVN0YWNrPVtdO3RoaXMuX25zQWdub3N0aWNMZXZlbD0wO3RoaXMuX25hbWVzcGFjZVByZWZpeGVzPW5ldyBNYXA7dGhpcy5fbmFtZXNwYWNlcz1uZXcgTWFwO3RoaXMuX25leHROc0lkPU1hdGgubWF4KC4uLk9iamVjdC52YWx1ZXMoci5OYW1lc3BhY2VJZHMpLm1hcCgoKHtpZDplfSk9PmUpKSk7dGhpcy5fY3VycmVudE5hbWVzcGFjZT1lfHxuZXcgby5Vbmtub3duTmFtZXNwYWNlKCsrdGhpcy5fbmV4dE5zSWQpfWJ1aWxkUm9vdChlKXtyZXR1cm4gbmV3IFJvb3QoZSl9YnVpbGQoe25zUHJlZml4OmUsbmFtZTp0LGF0dHJpYnV0ZXM6YSxuYW1lc3BhY2U6cyxwcmVmaXhlczpvfSl7Y29uc3QgYz1udWxsIT09cztpZihjKXt0aGlzLl9uYW1lc3BhY2VTdGFjay5wdXNoKHRoaXMuX2N1cnJlbnROYW1lc3BhY2UpO3RoaXMuX2N1cnJlbnROYW1lc3BhY2U9dGhpcy5fc2VhcmNoTmFtZXNwYWNlKHMpfW8mJnRoaXMuX2FkZE5hbWVzcGFjZVByZWZpeChvKTtpZihhLmhhc093blByb3BlcnR5KG4uJG5zQXR0cmlidXRlcykpe2NvbnN0IGU9aS5OYW1lc3BhY2VTZXRVcC5kYXRhc2V0cyx0PWFbbi4kbnNBdHRyaWJ1dGVzXTtsZXQgcj1udWxsO2Zvcihjb25zdFthLG5db2YgT2JqZWN0LmVudHJpZXModCkpe2lmKHRoaXMuX2dldE5hbWVzcGFjZVRvVXNlKGEpPT09ZSl7cj17eGZhOm59O2JyZWFrfX1yP2Fbbi4kbnNBdHRyaWJ1dGVzXT1yOmRlbGV0ZSBhW24uJG5zQXR0cmlidXRlc119Y29uc3QgbD10aGlzLl9nZXROYW1lc3BhY2VUb1VzZShlKSxoPWw/LltyLiRidWlsZFhGQU9iamVjdF0odCxhKXx8bmV3IEVtcHR5O2hbbi4kaXNOc0Fnbm9zdGljXSgpJiZ0aGlzLl9uc0Fnbm9zdGljTGV2ZWwrKzsoY3x8b3x8aFtuLiRpc05zQWdub3N0aWNdKCkpJiYoaFtuLiRjbGVhbnVwXT17aGFzTmFtZXNwYWNlOmMscHJlZml4ZXM6byxuc0Fnbm9zdGljOmhbbi4kaXNOc0Fnbm9zdGljXSgpfSk7cmV0dXJuIGh9aXNOc0Fnbm9zdGljKCl7cmV0dXJuIHRoaXMuX25zQWdub3N0aWNMZXZlbD4wfV9zZWFyY2hOYW1lc3BhY2UoZSl7bGV0IHQ9dGhpcy5fbmFtZXNwYWNlcy5nZXQoZSk7aWYodClyZXR1cm4gdDtmb3IoY29uc3RbYSx7Y2hlY2s6bn1db2YgT2JqZWN0LmVudHJpZXMoci5OYW1lc3BhY2VJZHMpKWlmKG4oZSkpe3Q9aS5OYW1lc3BhY2VTZXRVcFthXTtpZih0KXt0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpO3JldHVybiB0fWJyZWFrfXQ9bmV3IG8uVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKTt0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpO3JldHVybiB0fV9hZGROYW1lc3BhY2VQcmVmaXgoZSl7Zm9yKGNvbnN0e3ByZWZpeDp0LHZhbHVlOmF9b2YgZSl7Y29uc3QgZT10aGlzLl9zZWFyY2hOYW1lc3BhY2UoYSk7bGV0IHI9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KHQpO2lmKCFyKXtyPVtdO3RoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldCh0LHIpfXIucHVzaChlKX19X2dldE5hbWVzcGFjZVRvVXNlKGUpe2lmKCFlKXJldHVybiB0aGlzLl9jdXJyZW50TmFtZXNwYWNlO2NvbnN0IHQ9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpO2lmKHQ/Lmxlbmd0aD4wKXJldHVybiB0LmF0KC0xKTsoMCxjLndhcm4pKGBVbmtub3duIG5hbWVzcGFjZSBwcmVmaXg6ICR7ZX0uYCk7cmV0dXJuIG51bGx9Y2xlYW4oZSl7Y29uc3R7aGFzTmFtZXNwYWNlOnQscHJlZml4ZXM6YSxuc0Fnbm9zdGljOnJ9PWU7dCYmKHRoaXMuX2N1cnJlbnROYW1lc3BhY2U9dGhpcy5fbmFtZXNwYWNlU3RhY2sucG9wKCkpO2EmJmEuZm9yRWFjaCgoKHtwcmVmaXg6ZX0pPT57dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpLnBvcCgpfSkpO3ImJnRoaXMuX25zQWdub3N0aWNMZXZlbC0tfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5OYW1lc3BhY2VTZXRVcD12b2lkIDA7dmFyIHI9YSg5Myksbj1hKDk0KSxpPWEoOTUpLHM9YSg5Niksbz1hKDk3KSxjPWEoOTgpLGw9YSg4MCksaD1hKDk5KSx1PWEoMTAwKTtjb25zdCBkPXtjb25maWc6ci5Db25maWdOYW1lc3BhY2UsY29ubmVjdGlvbjpuLkNvbm5lY3Rpb25TZXROYW1lc3BhY2UsZGF0YXNldHM6aS5EYXRhc2V0c05hbWVzcGFjZSxsb2NhbGVTZXQ6cy5Mb2NhbGVTZXROYW1lc3BhY2Usc2lnbmF0dXJlOm8uU2lnbmF0dXJlTmFtZXNwYWNlLHN0eWxlc2hlZXQ6Yy5TdHlsZXNoZWV0TmFtZXNwYWNlLHRlbXBsYXRlOmwuVGVtcGxhdGVOYW1lc3BhY2UseGRwOmguWGRwTmFtZXNwYWNlLHhodG1sOnUuWGh0bWxOYW1lc3BhY2V9O3QuTmFtZXNwYWNlU2V0VXA9ZH0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkNvbmZpZ05hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg4MSksbj1hKDc4KSxpPWEoODcpLHM9YSg4NCksbz1hKDIpO2NvbnN0IGM9ci5OYW1lc3BhY2VJZHMuY29uZmlnLmlkO2NsYXNzIEFjcm9iYXQgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJhY3JvYmF0IiwhMCk7dGhpcy5hY3JvYmF0Nz1udWxsO3RoaXMuYXV0b1NhdmU9bnVsbDt0aGlzLmNvbW1vbj1udWxsO3RoaXMudmFsaWRhdGU9bnVsbDt0aGlzLnZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzPW51bGw7dGhpcy5zdWJtaXRVcmw9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEFjcm9iYXQ3IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYWNyb2JhdDciLCEwKTt0aGlzLmR5bmFtaWNSZW5kZXI9bnVsbH19Y2xhc3MgQURCRV9KU0NvbnNvbGUgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJBREJFX0pTQ29uc29sZSIsWyJkZWxlZ2F0ZSIsIkVuYWJsZSIsIkRpc2FibGUiXSl9fWNsYXNzIEFEQkVfSlNEZWJ1Z2dlciBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIkFEQkVfSlNEZWJ1Z2dlciIsWyJkZWxlZ2F0ZSIsIkVuYWJsZSIsIkRpc2FibGUiXSl9fWNsYXNzIEFkZFNpbGVudFByaW50IGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJhZGRTaWxlbnRQcmludCIpfX1jbGFzcyBBZGRWaWV3ZXJQcmVmZXJlbmNlcyBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYWRkVmlld2VyUHJlZmVyZW5jZXMiKX19Y2xhc3MgQWRqdXN0RGF0YSBleHRlbmRzIGkuT3B0aW9uMTB7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYWRqdXN0RGF0YSIpfX1jbGFzcyBBZG9iZUV4dGVuc2lvbkxldmVsIGV4dGVuZHMgaS5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLDAsKGU9PmU+PTEmJmU8PTgpKX19Y2xhc3MgQWdlbnQgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJhZ2VudCIsITApO3RoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIjt0aGlzLmNvbW1vbj1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgQWx3YXlzRW1iZWQgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYWx3YXlzRW1iZWQiKX19Y2xhc3MgQW1kIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYW1kIil9fWNsYXNzIEFyZWEgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJhcmVhIik7dGhpcy5sZXZlbD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubGV2ZWwsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZT49MSYmZTw9M30pO3RoaXMubmFtZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiIiwiYmFyY29kZSIsImNvcmVpbml0IiwiZGV2aWNlRHJpdmVyIiwiZm9udCIsImdlbmVyYWwiLCJsYXlvdXQiLCJtZXJnZSIsInNjcmlwdCIsInNpZ25hdHVyZSIsInNvdXJjZVNldCIsInRlbXBsYXRlQ2FjaGUiXSl9fWNsYXNzIEF0dHJpYnV0ZXMgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJhdHRyaWJ1dGVzIixbInByZXNlcnZlIiwiZGVsZWdhdGUiLCJpZ25vcmUiXSl9fWNsYXNzIEF1dG9TYXZlIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYXV0b1NhdmUiLFsiZGlzYWJsZWQiLCJlbmFibGVkIl0pfX1jbGFzcyBCYXNlIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYmFzZSIpfX1jbGFzcyBCYXRjaE91dHB1dCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImJhdGNoT3V0cHV0Iik7dGhpcy5mb3JtYXQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0LFsibm9uZSIsImNvbmNhdCIsInppcCIsInppcENvbXByZXNzIl0pfX1jbGFzcyBCZWhhdmlvck92ZXJyaWRlIGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImJlaGF2aW9yT3ZlcnJpZGUiKX1bbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT1uZXcgTWFwKHRoaXNbbi4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGU9PmUuaW5jbHVkZXMoIjoiKSkpLm1hcCgoZT0+ZS5zcGxpdCgiOiIsMikpKSl9fWNsYXNzIENhY2hlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY2FjaGUiLCEwKTt0aGlzLnRlbXBsYXRlQ2FjaGU9bnVsbH19Y2xhc3MgQ2hhbmdlIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJjaGFuZ2UiKX19Y2xhc3MgQ29tbW9uIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY29tbW9uIiwhMCk7dGhpcy5kYXRhPW51bGw7dGhpcy5sb2NhbGU9bnVsbDt0aGlzLmxvY2FsZVNldD1udWxsO3RoaXMubWVzc2FnaW5nPW51bGw7dGhpcy5zdXBwcmVzc0Jhbm5lcj1udWxsO3RoaXMudGVtcGxhdGU9bnVsbDt0aGlzLnZhbGlkYXRpb25NZXNzYWdpbmc9bnVsbDt0aGlzLnZlcnNpb25Db250cm9sPW51bGw7dGhpcy5sb2c9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIENvbXByZXNzIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY29tcHJlc3MiKTt0aGlzLnNjb3BlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnNjb3BlLFsiaW1hZ2VPbmx5IiwiZG9jdW1lbnQiXSl9fWNsYXNzIENvbXByZXNzTG9naWNhbFN0cnVjdHVyZSBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlIil9fWNsYXNzIENvbXByZXNzT2JqZWN0U3RyZWFtIGV4dGVuZHMgaS5PcHRpb24xMHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJjb21wcmVzc09iamVjdFN0cmVhbSIpfX1jbGFzcyBDb21wcmVzc2lvbiBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImNvbXByZXNzaW9uIiwhMCk7dGhpcy5jb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmU9bnVsbDt0aGlzLmNvbXByZXNzT2JqZWN0U3RyZWFtPW51bGw7dGhpcy5sZXZlbD1udWxsO3RoaXMudHlwZT1udWxsfX1jbGFzcyBDb25maWcgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJjb25maWciLCEwKTt0aGlzLmFjcm9iYXQ9bnVsbDt0aGlzLnByZXNlbnQ9bnVsbDt0aGlzLnRyYWNlPW51bGw7dGhpcy5hZ2VudD1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgQ29uZm9ybWFuY2UgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJjb25mb3JtYW5jZSIsWyJBIiwiQiJdKX19Y2xhc3MgQ29udGVudENvcHkgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImNvbnRlbnRDb3B5Iil9fWNsYXNzIENvcGllcyBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJjb3BpZXMiLDEsKGU9PmU+PTEpKX19Y2xhc3MgQ3JlYXRvciBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImNyZWF0b3IiKX19Y2xhc3MgQ3VycmVudFBhZ2UgZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY3VycmVudFBhZ2UiLDAsKGU9PmU+PTApKX19Y2xhc3MgRGF0YSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImRhdGEiLCEwKTt0aGlzLmFkanVzdERhdGE9bnVsbDt0aGlzLmF0dHJpYnV0ZXM9bnVsbDt0aGlzLmluY3JlbWVudGFsTG9hZD1udWxsO3RoaXMub3V0cHV0WFNMPW51bGw7dGhpcy5yYW5nZT1udWxsO3RoaXMucmVjb3JkPW51bGw7dGhpcy5zdGFydE5vZGU9bnVsbDt0aGlzLnVyaT1udWxsO3RoaXMud2luZG93PW51bGw7dGhpcy54c2w9bnVsbDt0aGlzLmV4Y2x1ZGVOUz1uZXcgaS5YRkFPYmplY3RBcnJheTt0aGlzLnRyYW5zZm9ybT1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgRGVidWcgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJkZWJ1ZyIsITApO3RoaXMudXJpPW51bGx9fWNsYXNzIERlZmF1bHRUeXBlZmFjZSBleHRlbmRzIGkuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJkZWZhdWx0VHlwZWZhY2UiKTt0aGlzLndyaXRpbmdTY3JpcHQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUud3JpdGluZ1NjcmlwdCxbIioiLCJBcmFiaWMiLCJDeXJpbGxpYyIsIkVhc3RFdXJvcGVhblJvbWFuIiwiR3JlZWsiLCJIZWJyZXciLCJKYXBhbmVzZSIsIktvcmVhbiIsIlJvbWFuIiwiU2ltcGxpZmllZENoaW5lc2UiLCJUaGFpIiwiVHJhZGl0aW9uYWxDaGluZXNlIiwiVmlldG5hbWVzZSJdKX19Y2xhc3MgRGVzdGluYXRpb24gZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJkZXN0aW5hdGlvbiIsWyJwZGYiLCJwY2wiLCJwcyIsIndlYkNsaWVudCIsInpwbCJdKX19Y2xhc3MgRG9jdW1lbnRBc3NlbWJseSBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiZG9jdW1lbnRBc3NlbWJseSIpfX1jbGFzcyBEcml2ZXIgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJkcml2ZXIiLCEwKTt0aGlzLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiI7dGhpcy5mb250SW5mbz1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIER1cGxleE9wdGlvbiBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImR1cGxleE9wdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4RmxpcExvbmdFZGdlIiwiZHVwbGV4RmxpcFNob3J0RWRnZSJdKX19Y2xhc3MgRHluYW1pY1JlbmRlciBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImR5bmFtaWNSZW5kZXIiLFsiZm9yYmlkZGVuIiwicmVxdWlyZWQiXSl9fWNsYXNzIEVtYmVkIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJlbWJlZCIpfX1jbGFzcyBFbmNyeXB0IGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJlbmNyeXB0Iil9fWNsYXNzIEVuY3J5cHRpb24gZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJlbmNyeXB0aW9uIiwhMCk7dGhpcy5lbmNyeXB0PW51bGw7dGhpcy5lbmNyeXB0aW9uTGV2ZWw9bnVsbDt0aGlzLnBlcm1pc3Npb25zPW51bGx9fWNsYXNzIEVuY3J5cHRpb25MZXZlbCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImVuY3J5cHRpb25MZXZlbCIsWyI0MGJpdCIsIjEyOGJpdCJdKX19Y2xhc3MgRW5mb3JjZSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImVuZm9yY2UiKX19Y2xhc3MgRXF1YXRlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiZXF1YXRlIik7dGhpcy5mb3JjZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuZm9yY2UsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+MD09PWV9KTt0aGlzLmZyb209ZS5mcm9tfHwiIjt0aGlzLnRvPWUudG98fCIifX1jbGFzcyBFcXVhdGVSYW5nZSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImVxdWF0ZVJhbmdlIik7dGhpcy5mcm9tPWUuZnJvbXx8IiI7dGhpcy50bz1lLnRvfHwiIjt0aGlzLl91bmljb2RlUmFuZ2U9ZS51bmljb2RlUmFuZ2V8fCIifWdldCB1bmljb2RlUmFuZ2UoKXtjb25zdCBlPVtdLHQ9L1VcKyhbMC05YS1mQS1GXSspLyxhPXRoaXMuX3VuaWNvZGVSYW5nZTtmb3IobGV0IHIgb2YgYS5zcGxpdCgiLCIpLm1hcCgoZT0+ZS50cmltKCkpKS5maWx0ZXIoKGU9PiEhZSkpKXtyPXIuc3BsaXQoIi0iLDIpLm1hcCgoZT0+e2NvbnN0IGE9ZS5tYXRjaCh0KTtyZXR1cm4gYT9wYXJzZUludChhWzFdLDE2KTowfSkpOzE9PT1yLmxlbmd0aCYmci5wdXNoKHJbMF0pO2UucHVzaChyKX1yZXR1cm4oMCxvLnNoYWRvdykodGhpcywidW5pY29kZVJhbmdlIixlKX19Y2xhc3MgRXhjbHVkZSBleHRlbmRzIGkuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJleGNsdWRlIil9W24uJGZpbmFsaXplXSgpe3RoaXNbbi4kY29udGVudF09dGhpc1tuLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZT0+ZSYmWyJjYWxjdWxhdGUiLCJjbG9zZSIsImVudGVyIiwiZXhpdCIsImluaXRpYWxpemUiLCJyZWFkeSIsInZhbGlkYXRlIl0uaW5jbHVkZXMoZSkpKX19Y2xhc3MgRXhjbHVkZU5TIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiZXhjbHVkZU5TIil9fWNsYXNzIEZsaXBMYWJlbCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImZsaXBMYWJlbCIsWyJ1c2VQcmludGVyU2V0dGluZyIsIm9uIiwib2ZmIl0pfX1jbGFzcyBGb250SW5mbyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImZvbnRJbmZvIiwhMCk7dGhpcy5lbWJlZD1udWxsO3RoaXMubWFwPW51bGw7dGhpcy5zdWJzZXRCZWxvdz1udWxsO3RoaXMuYWx3YXlzRW1iZWQ9bmV3IGkuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWZhdWx0VHlwZWZhY2U9bmV3IGkuWEZBT2JqZWN0QXJyYXk7dGhpcy5uZXZlckVtYmVkPW5ldyBpLlhGQU9iamVjdEFycmF5fX1jbGFzcyBGb3JtRmllbGRGaWxsaW5nIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJmb3JtRmllbGRGaWxsaW5nIil9fWNsYXNzIEdyb3VwUGFyZW50IGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiZ3JvdXBQYXJlbnQiKX19Y2xhc3MgSWZFbXB0eSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImlmRW1wdHkiLFsiZGF0YVZhbHVlIiwiZGF0YUdyb3VwIiwiaWdub3JlIiwicmVtb3ZlIl0pfX1jbGFzcyBJbmNsdWRlWERQQ29udGVudCBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImluY2x1ZGVYRFBDb250ZW50Iil9fWNsYXNzIEluY3JlbWVudGFsTG9hZCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImluY3JlbWVudGFsTG9hZCIsWyJub25lIiwiZm9yd2FyZE9ubHkiXSl9fWNsYXNzIEluY3JlbWVudGFsTWVyZ2UgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImluY3JlbWVudGFsTWVyZ2UiKX19Y2xhc3MgSW50ZXJhY3RpdmUgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImludGVyYWN0aXZlIil9fWNsYXNzIEpvZyBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImpvZyIsWyJ1c2VQcmludGVyU2V0dGluZyIsIm5vbmUiLCJwYWdlU2V0Il0pfX1jbGFzcyBMYWJlbFByaW50ZXIgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJsYWJlbFByaW50ZXIiLCEwKTt0aGlzLm5hbWU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbInpwbCIsImRwbCIsImlwbCIsInRjcGwiXSk7dGhpcy5iYXRjaE91dHB1dD1udWxsO3RoaXMuZmxpcExhYmVsPW51bGw7dGhpcy5mb250SW5mbz1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIExheW91dCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImxheW91dCIsWyJwYWdpbmF0ZSIsInBhbmVsIl0pfX1jbGFzcyBMZXZlbCBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJsZXZlbCIsMCwoZT0+ZT4wKSl9fWNsYXNzIExpbmVhcml6ZWQgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImxpbmVhcml6ZWQiKX19Y2xhc3MgTG9jYWxlIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywibG9jYWxlIil9fWNsYXNzIExvY2FsZVNldCBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImxvY2FsZVNldCIpfX1jbGFzcyBMb2cgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJsb2ciLCEwKTt0aGlzLm1vZGU9bnVsbDt0aGlzLnRocmVzaG9sZD1udWxsO3RoaXMudG89bnVsbDt0aGlzLnVyaT1udWxsfX1jbGFzcyBNYXBFbGVtZW50IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywibWFwIiwhMCk7dGhpcy5lcXVhdGU9bmV3IGkuWEZBT2JqZWN0QXJyYXk7dGhpcy5lcXVhdGVSYW5nZT1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgTWVkaXVtSW5mbyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm1lZGl1bUluZm8iLCEwKTt0aGlzLm1hcD1udWxsfX1jbGFzcyBNZXNzYWdlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywibWVzc2FnZSIsITApO3RoaXMubXNnSWQ9bnVsbDt0aGlzLnNldmVyaXR5PW51bGx9fWNsYXNzIE1lc3NhZ2luZyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm1lc3NhZ2luZyIsITApO3RoaXMubWVzc2FnZT1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgTW9kZSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm1vZGUiLFsiYXBwZW5kIiwib3ZlcndyaXRlIl0pfX1jbGFzcyBNb2RpZnlBbm5vdHMgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm1vZGlmeUFubm90cyIpfX1jbGFzcyBNc2dJZCBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJtc2dJZCIsMSwoZT0+ZT49MSkpfX1jbGFzcyBOYW1lQXR0ciBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm5hbWVBdHRyIil9fWNsYXNzIE5ldmVyRW1iZWQgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywibmV2ZXJFbWJlZCIpfX1jbGFzcyBOdW1iZXJPZkNvcGllcyBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJudW1iZXJPZkNvcGllcyIsbnVsbCwoZT0+ZT49MiYmZTw9NSkpfX1jbGFzcyBPcGVuQWN0aW9uIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywib3BlbkFjdGlvbiIsITApO3RoaXMuZGVzdGluYXRpb249bnVsbH19Y2xhc3MgT3V0cHV0IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywib3V0cHV0IiwhMCk7dGhpcy50bz1udWxsO3RoaXMudHlwZT1udWxsO3RoaXMudXJpPW51bGx9fWNsYXNzIE91dHB1dEJpbiBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm91dHB1dEJpbiIpfX1jbGFzcyBPdXRwdXRYU0wgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJvdXRwdXRYU0wiLCEwKTt0aGlzLnVyaT1udWxsfX1jbGFzcyBPdmVycHJpbnQgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJvdmVycHJpbnQiLFsibm9uZSIsImJvdGgiLCJkcmF3IiwiZmllbGQiXSl9fWNsYXNzIFBhY2tldHMgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwYWNrZXRzIil9W24uJGZpbmFsaXplXSgpeyIqIiE9PXRoaXNbbi4kY29udGVudF0mJih0aGlzW24uJGNvbnRlbnRdPXRoaXNbbi4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGU9PlsiY29uZmlnIiwiZGF0YXNldHMiLCJ0ZW1wbGF0ZSIsInhmZGYiLCJ4c2x0Il0uaW5jbHVkZXMoZSkpKSl9fWNsYXNzIFBhZ2VPZmZzZXQgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwYWdlT2Zmc2V0Iik7dGhpcy54PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS54LGRlZmF1bHRWYWx1ZToidXNlWERDU2V0dGluZyIsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLnk9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnksZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTplPT4hMH0pfX1jbGFzcyBQYWdlUmFuZ2UgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwYWdlUmFuZ2UiKX1bbi4kZmluYWxpemVdKCl7Y29uc3QgZT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKChlPT5wYXJzZUludChlLDEwKSkpLHQ9W107Zm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7YSs9Mil0LnB1c2goZS5zbGljZShhLGErMikpO3RoaXNbbi4kY29udGVudF09dH19Y2xhc3MgUGFnaW5hdGlvbiBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInBhZ2luYXRpb24iLFsic2ltcGxleCIsImR1cGxleFNob3J0RWRnZSIsImR1cGxleExvbmdFZGdlIl0pfX1jbGFzcyBQYWdpbmF0aW9uT3ZlcnJpZGUgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwYWdpbmF0aW9uT3ZlcnJpZGUiLFsibm9uZSIsImZvcmNlRHVwbGV4IiwiZm9yY2VEdXBsZXhMb25nRWRnZSIsImZvcmNlRHVwbGV4U2hvcnRFZGdlIiwiZm9yY2VTaW1wbGV4Il0pfX1jbGFzcyBQYXJ0IGV4dGVuZHMgaS5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInBhcnQiLDEsKGU9PiExKSl9fWNsYXNzIFBjbCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInBjbCIsITApO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy5qb2c9bnVsbDt0aGlzLm1lZGl1bUluZm89bnVsbDt0aGlzLm91dHB1dEJpbj1udWxsO3RoaXMucGFnZU9mZnNldD1udWxsO3RoaXMuc3RhcGxlPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgUGRmIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicGRmIiwhMCk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5hZG9iZUV4dGVuc2lvbkxldmVsPW51bGw7dGhpcy5iYXRjaE91dHB1dD1udWxsO3RoaXMuY29tcHJlc3Npb249bnVsbDt0aGlzLmNyZWF0b3I9bnVsbDt0aGlzLmVuY3J5cHRpb249bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy5pbnRlcmFjdGl2ZT1udWxsO3RoaXMubGluZWFyaXplZD1udWxsO3RoaXMub3BlbkFjdGlvbj1udWxsO3RoaXMucGRmYT1udWxsO3RoaXMucHJvZHVjZXI9bnVsbDt0aGlzLnJlbmRlclBvbGljeT1udWxsO3RoaXMuc2NyaXB0TW9kZWw9bnVsbDt0aGlzLnNpbGVudFByaW50PW51bGw7dGhpcy5zdWJtaXRGb3JtYXQ9bnVsbDt0aGlzLnRhZ2dlZD1udWxsO3RoaXMudmVyc2lvbj1udWxsO3RoaXMudmlld2VyUHJlZmVyZW5jZXM9bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBQZGZhIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicGRmYSIsITApO3RoaXMuYW1kPW51bGw7dGhpcy5jb25mb3JtYW5jZT1udWxsO3RoaXMuaW5jbHVkZVhEUENvbnRlbnQ9bnVsbDt0aGlzLnBhcnQ9bnVsbH19Y2xhc3MgUGVybWlzc2lvbnMgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwZXJtaXNzaW9ucyIsITApO3RoaXMuYWNjZXNzaWJsZUNvbnRlbnQ9bnVsbDt0aGlzLmNoYW5nZT1udWxsO3RoaXMuY29udGVudENvcHk9bnVsbDt0aGlzLmRvY3VtZW50QXNzZW1ibHk9bnVsbDt0aGlzLmZvcm1GaWVsZEZpbGxpbmc9bnVsbDt0aGlzLm1vZGlmeUFubm90cz1udWxsO3RoaXMucGxhaW50ZXh0TWV0YWRhdGE9bnVsbDt0aGlzLnByaW50PW51bGw7dGhpcy5wcmludEhpZ2hRdWFsaXR5PW51bGx9fWNsYXNzIFBpY2tUcmF5QnlQREZTaXplIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwaWNrVHJheUJ5UERGU2l6ZSIpfX1jbGFzcyBQaWN0dXJlIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicGljdHVyZSIpfX1jbGFzcyBQbGFpbnRleHRNZXRhZGF0YSBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicGxhaW50ZXh0TWV0YWRhdGEiKX19Y2xhc3MgUHJlc2VuY2UgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwcmVzZW5jZSIsWyJwcmVzZXJ2ZSIsImRpc3NvbHZlIiwiZGlzc29sdmVTdHJ1Y3R1cmUiLCJpZ25vcmUiLCJyZW1vdmUiXSl9fWNsYXNzIFByZXNlbnQgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwcmVzZW50IiwhMCk7dGhpcy5iZWhhdmlvck92ZXJyaWRlPW51bGw7dGhpcy5jYWNoZT1udWxsO3RoaXMuY29tbW9uPW51bGw7dGhpcy5jb3BpZXM9bnVsbDt0aGlzLmRlc3RpbmF0aW9uPW51bGw7dGhpcy5pbmNyZW1lbnRhbE1lcmdlPW51bGw7dGhpcy5sYXlvdXQ9bnVsbDt0aGlzLm91dHB1dD1udWxsO3RoaXMub3ZlcnByaW50PW51bGw7dGhpcy5wYWdpbmF0aW9uPW51bGw7dGhpcy5wYWdpbmF0aW9uT3ZlcnJpZGU9bnVsbDt0aGlzLnNjcmlwdD1udWxsO3RoaXMudmFsaWRhdGU9bnVsbDt0aGlzLnhkcD1udWxsO3RoaXMuZHJpdmVyPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMubGFiZWxQcmludGVyPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMucGNsPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMucGRmPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMucHM9bmV3IGkuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJtaXRVcmw9bmV3IGkuWEZBT2JqZWN0QXJyYXk7dGhpcy53ZWJDbGllbnQ9bmV3IGkuWEZBT2JqZWN0QXJyYXk7dGhpcy56cGw9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFByaW50IGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwcmludCIpfX1jbGFzcyBQcmludEhpZ2hRdWFsaXR5IGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwcmludEhpZ2hRdWFsaXR5Iil9fWNsYXNzIFByaW50U2NhbGluZyBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInByaW50U2NhbGluZyIsWyJhcHBkZWZhdWx0Iiwibm9TY2FsaW5nIl0pfX1jbGFzcyBQcmludGVyTmFtZSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInByaW50ZXJOYW1lIil9fWNsYXNzIFByb2R1Y2VyIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicHJvZHVjZXIiKX19Y2xhc3MgUHMgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwcyIsITApO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy5qb2c9bnVsbDt0aGlzLm1lZGl1bUluZm89bnVsbDt0aGlzLm91dHB1dEJpbj1udWxsO3RoaXMuc3RhcGxlPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgUmFuZ2UgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicmFuZ2UiKX1bbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8sMikubWFwKChlPT5lLnNwbGl0KCItIikubWFwKChlPT5wYXJzZUludChlLnRyaW0oKSwxMCkpKSkpLmZpbHRlcigoZT0+ZS5ldmVyeSgoZT0+IWlzTmFOKGUpKSkpKS5tYXAoKGU9PnsxPT09ZS5sZW5ndGgmJmUucHVzaChlWzBdKTtyZXR1cm4gZX0pKX19Y2xhc3MgUmVjb3JkIGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInJlY29yZCIpfVtuLiRmaW5hbGl6ZV0oKXt0aGlzW24uJGNvbnRlbnRdPXRoaXNbbi4kY29udGVudF0udHJpbSgpO2NvbnN0IGU9cGFyc2VJbnQodGhpc1tuLiRjb250ZW50XSwxMCk7IWlzTmFOKGUpJiZlPj0wJiYodGhpc1tuLiRjb250ZW50XT1lKX19Y2xhc3MgUmVsZXZhbnQgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicmVsZXZhbnQiKX1bbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLyl9fWNsYXNzIFJlbmFtZSBleHRlbmRzIGkuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJyZW5hbWUiKX1bbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKTsodGhpc1tuLiRjb250ZW50XS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoInhtbCIpfHxuZXcgUmVnRXhwKCJbXFxwe0x9X11bXFxwe0x9XFxkLl9cXHB7TX0tXSoiLCJ1IikudGVzdCh0aGlzW24uJGNvbnRlbnRdKSkmJigwLG8ud2FybikoIlhGQSAtIFJlbmFtZTogaW52YWxpZCBYRkEgbmFtZSIpfX1jbGFzcyBSZW5kZXJQb2xpY3kgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJyZW5kZXJQb2xpY3kiLFsic2VydmVyIiwiY2xpZW50Il0pfX1jbGFzcyBSdW5TY3JpcHRzIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicnVuU2NyaXB0cyIsWyJib3RoIiwiY2xpZW50Iiwibm9uZSIsInNlcnZlciJdKX19Y2xhc3MgU2NyaXB0IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywic2NyaXB0IiwhMCk7dGhpcy5jdXJyZW50UGFnZT1udWxsO3RoaXMuZXhjbHVkZT1udWxsO3RoaXMucnVuU2NyaXB0cz1udWxsfX1jbGFzcyBTY3JpcHRNb2RlbCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInNjcmlwdE1vZGVsIixbIlhGQSIsIm5vbmUiXSl9fWNsYXNzIFNldmVyaXR5IGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywic2V2ZXJpdHkiLFsiaWdub3JlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsInRyYWNlIiwid2FybmluZyJdKX19Y2xhc3MgU2lsZW50UHJpbnQgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJzaWxlbnRQcmludCIsITApO3RoaXMuYWRkU2lsZW50UHJpbnQ9bnVsbDt0aGlzLnByaW50ZXJOYW1lPW51bGx9fWNsYXNzIFN0YXBsZSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInN0YXBsZSIpO3RoaXMubW9kZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5tb2RlLFsidXNlUHJpbnRlclNldHRpbmciLCJvbiIsIm9mZiJdKX19Y2xhc3MgU3RhcnROb2RlIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywic3RhcnROb2RlIil9fWNsYXNzIFN0YXJ0UGFnZSBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJzdGFydFBhZ2UiLDAsKGU9PiEwKSl9fWNsYXNzIFN1Ym1pdEZvcm1hdCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInN1Ym1pdEZvcm1hdCIsWyJodG1sIiwiZGVsZWdhdGUiLCJmZGYiLCJ4bWwiLCJwZGYiXSl9fWNsYXNzIFN1Ym1pdFVybCBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInN1Ym1pdFVybCIpfX1jbGFzcyBTdWJzZXRCZWxvdyBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJzdWJzZXRCZWxvdyIsMTAwLChlPT5lPj0wJiZlPD0xMDApKX19Y2xhc3MgU3VwcHJlc3NCYW5uZXIgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInN1cHByZXNzQmFubmVyIil9fWNsYXNzIFRhZ2dlZCBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywidGFnZ2VkIil9fWNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywidGVtcGxhdGUiLCEwKTt0aGlzLmJhc2U9bnVsbDt0aGlzLnJlbGV2YW50PW51bGw7dGhpcy5zdGFydFBhZ2U9bnVsbDt0aGlzLnVyaT1udWxsO3RoaXMueHNsPW51bGx9fWNsYXNzIFRocmVzaG9sZCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInRocmVzaG9sZCIsWyJ0cmFjZSIsImVycm9yIiwiaW5mb3JtYXRpb24iLCJ3YXJuaW5nIl0pfX1jbGFzcyBUbyBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInRvIixbIm51bGwiLCJtZW1vcnkiLCJzdGRlcnIiLCJzdGRvdXQiLCJzeXN0ZW0iLCJ1cmkiXSl9fWNsYXNzIFRlbXBsYXRlQ2FjaGUgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJ0ZW1wbGF0ZUNhY2hlIik7dGhpcy5tYXhFbnRyaWVzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5tYXhFbnRyaWVzLGRlZmF1bHRWYWx1ZTo1LHZhbGlkYXRlOmU9PmU+PTB9KX19Y2xhc3MgVHJhY2UgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJ0cmFjZSIsITApO3RoaXMuYXJlYT1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgVHJhbnNmb3JtIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywidHJhbnNmb3JtIiwhMCk7dGhpcy5ncm91cFBhcmVudD1udWxsO3RoaXMuaWZFbXB0eT1udWxsO3RoaXMubmFtZUF0dHI9bnVsbDt0aGlzLnBpY3R1cmU9bnVsbDt0aGlzLnByZXNlbmNlPW51bGw7dGhpcy5yZW5hbWU9bnVsbDt0aGlzLndoaXRlc3BhY2U9bnVsbH19Y2xhc3MgVHlwZSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInR5cGUiLFsibm9uZSIsImFzY2lpODUiLCJhc2NpaUhleCIsImNjaXR0ZmF4IiwiZmxhdGUiLCJsenciLCJydW5MZW5ndGgiLCJuYXRpdmUiLCJ4ZHAiLCJtZXJnZWRYRFAiXSl9fWNsYXNzIFVyaSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInVyaSIpfX1jbGFzcyBWYWxpZGF0ZSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInZhbGlkYXRlIixbInByZVN1Ym1pdCIsInByZVByaW50IiwicHJlRXhlY3V0ZSIsInByZVNhdmUiXSl9fWNsYXNzIFZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIil9W24uJGZpbmFsaXplXSgpe3RoaXNbbi4kY29udGVudF09dGhpc1tuLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZT0+WyJkb2NSZWFkeSIsInBvc3RTaWduIl0uaW5jbHVkZXMoZSkpKX19Y2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2luZyBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInZhbGlkYXRpb25NZXNzYWdpbmciLFsiYWxsTWVzc2FnZXNJbmRpdmlkdWFsbHkiLCJhbGxNZXNzYWdlc1RvZ2V0aGVyIiwiZmlyc3RNZXNzYWdlT25seSIsIm5vTWVzc2FnZXMiXSl9fWNsYXNzIFZlcnNpb24gZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJ2ZXJzaW9uIixbIjEuNyIsIjEuNiIsIjEuNSIsIjEuNCIsIjEuMyIsIjEuMiJdKX19Y2xhc3MgVmVyc2lvbkNvbnRyb2wgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJWZXJzaW9uQ29udHJvbCIpO3RoaXMub3V0cHV0QmVsb3c9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub3V0cHV0QmVsb3csWyJ3YXJuIiwiZXJyb3IiLCJ1cGRhdGUiXSk7dGhpcy5zb3VyY2VBYm92ZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zb3VyY2VBYm92ZSxbIndhcm4iLCJlcnJvciJdKTt0aGlzLnNvdXJjZUJlbG93PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnNvdXJjZUJlbG93LFsidXBkYXRlIiwibWFpbnRhaW4iXSl9fWNsYXNzIFZpZXdlclByZWZlcmVuY2VzIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywidmlld2VyUHJlZmVyZW5jZXMiLCEwKTt0aGlzLkFEQkVfSlNDb25zb2xlPW51bGw7dGhpcy5BREJFX0pTRGVidWdnZXI9bnVsbDt0aGlzLmFkZFZpZXdlclByZWZlcmVuY2VzPW51bGw7dGhpcy5kdXBsZXhPcHRpb249bnVsbDt0aGlzLmVuZm9yY2U9bnVsbDt0aGlzLm51bWJlck9mQ29waWVzPW51bGw7dGhpcy5wYWdlUmFuZ2U9bnVsbDt0aGlzLnBpY2tUcmF5QnlQREZTaXplPW51bGw7dGhpcy5wcmludFNjYWxpbmc9bnVsbH19Y2xhc3MgV2ViQ2xpZW50IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywid2ViQ2xpZW50IiwhMCk7dGhpcy5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBXaGl0ZXNwYWNlIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywid2hpdGVzcGFjZSIsWyJwcmVzZXJ2ZSIsImx0cmltIiwibm9ybWFsaXplIiwicnRyaW0iLCJ0cmltIl0pfX1jbGFzcyBXaW5kb3cgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywid2luZG93Iil9W24uJGZpbmFsaXplXSgpe2NvbnN0IGU9dGhpc1tuLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKixccyovLDIpLm1hcCgoZT0+cGFyc2VJbnQoZSwxMCkpKTtpZihlLnNvbWUoKGU9PmlzTmFOKGUpKSkpdGhpc1tuLiRjb250ZW50XT1bMCwwXTtlbHNlezE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pO3RoaXNbbi4kY29udGVudF09ZX19fWNsYXNzIFhkYyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInhkYyIsITApO3RoaXMudXJpPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMueHNsPW5ldyBpLlhGQU9iamVjdEFycmF5fX1jbGFzcyBYZHAgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJ4ZHAiLCEwKTt0aGlzLnBhY2tldHM9bnVsbH19Y2xhc3MgWHNsIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywieHNsIiwhMCk7dGhpcy5kZWJ1Zz1udWxsO3RoaXMudXJpPW51bGx9fWNsYXNzIFpwbCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInpwbCIsITApO3RoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIjt0aGlzLmJhdGNoT3V0cHV0PW51bGw7dGhpcy5mbGlwTGFiZWw9bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgQ29uZmlnTmFtZXNwYWNle3N0YXRpY1tyLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihDb25maWdOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIENvbmZpZ05hbWVzcGFjZVtlXSh0KX1zdGF0aWMgYWNyb2JhdChlKXtyZXR1cm4gbmV3IEFjcm9iYXQoZSl9c3RhdGljIGFjcm9iYXQ3KGUpe3JldHVybiBuZXcgQWNyb2JhdDcoZSl9c3RhdGljIEFEQkVfSlNDb25zb2xlKGUpe3JldHVybiBuZXcgQURCRV9KU0NvbnNvbGUoZSl9c3RhdGljIEFEQkVfSlNEZWJ1Z2dlcihlKXtyZXR1cm4gbmV3IEFEQkVfSlNEZWJ1Z2dlcihlKX1zdGF0aWMgYWRkU2lsZW50UHJpbnQoZSl7cmV0dXJuIG5ldyBBZGRTaWxlbnRQcmludChlKX1zdGF0aWMgYWRkVmlld2VyUHJlZmVyZW5jZXMoZSl7cmV0dXJuIG5ldyBBZGRWaWV3ZXJQcmVmZXJlbmNlcyhlKX1zdGF0aWMgYWRqdXN0RGF0YShlKXtyZXR1cm4gbmV3IEFkanVzdERhdGEoZSl9c3RhdGljIGFkb2JlRXh0ZW5zaW9uTGV2ZWwoZSl7cmV0dXJuIG5ldyBBZG9iZUV4dGVuc2lvbkxldmVsKGUpfXN0YXRpYyBhZ2VudChlKXtyZXR1cm4gbmV3IEFnZW50KGUpfXN0YXRpYyBhbHdheXNFbWJlZChlKXtyZXR1cm4gbmV3IEFsd2F5c0VtYmVkKGUpfXN0YXRpYyBhbWQoZSl7cmV0dXJuIG5ldyBBbWQoZSl9c3RhdGljIGFyZWEoZSl7cmV0dXJuIG5ldyBBcmVhKGUpfXN0YXRpYyBhdHRyaWJ1dGVzKGUpe3JldHVybiBuZXcgQXR0cmlidXRlcyhlKX1zdGF0aWMgYXV0b1NhdmUoZSl7cmV0dXJuIG5ldyBBdXRvU2F2ZShlKX1zdGF0aWMgYmFzZShlKXtyZXR1cm4gbmV3IEJhc2UoZSl9c3RhdGljIGJhdGNoT3V0cHV0KGUpe3JldHVybiBuZXcgQmF0Y2hPdXRwdXQoZSl9c3RhdGljIGJlaGF2aW9yT3ZlcnJpZGUoZSl7cmV0dXJuIG5ldyBCZWhhdmlvck92ZXJyaWRlKGUpfXN0YXRpYyBjYWNoZShlKXtyZXR1cm4gbmV3IENhY2hlKGUpfXN0YXRpYyBjaGFuZ2UoZSl7cmV0dXJuIG5ldyBDaGFuZ2UoZSl9c3RhdGljIGNvbW1vbihlKXtyZXR1cm4gbmV3IENvbW1vbihlKX1zdGF0aWMgY29tcHJlc3MoZSl7cmV0dXJuIG5ldyBDb21wcmVzcyhlKX1zdGF0aWMgY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlKGUpe3JldHVybiBuZXcgQ29tcHJlc3NMb2dpY2FsU3RydWN0dXJlKGUpfXN0YXRpYyBjb21wcmVzc09iamVjdFN0cmVhbShlKXtyZXR1cm4gbmV3IENvbXByZXNzT2JqZWN0U3RyZWFtKGUpfXN0YXRpYyBjb21wcmVzc2lvbihlKXtyZXR1cm4gbmV3IENvbXByZXNzaW9uKGUpfXN0YXRpYyBjb25maWcoZSl7cmV0dXJuIG5ldyBDb25maWcoZSl9c3RhdGljIGNvbmZvcm1hbmNlKGUpe3JldHVybiBuZXcgQ29uZm9ybWFuY2UoZSl9c3RhdGljIGNvbnRlbnRDb3B5KGUpe3JldHVybiBuZXcgQ29udGVudENvcHkoZSl9c3RhdGljIGNvcGllcyhlKXtyZXR1cm4gbmV3IENvcGllcyhlKX1zdGF0aWMgY3JlYXRvcihlKXtyZXR1cm4gbmV3IENyZWF0b3IoZSl9c3RhdGljIGN1cnJlbnRQYWdlKGUpe3JldHVybiBuZXcgQ3VycmVudFBhZ2UoZSl9c3RhdGljIGRhdGEoZSl7cmV0dXJuIG5ldyBEYXRhKGUpfXN0YXRpYyBkZWJ1ZyhlKXtyZXR1cm4gbmV3IERlYnVnKGUpfXN0YXRpYyBkZWZhdWx0VHlwZWZhY2UoZSl7cmV0dXJuIG5ldyBEZWZhdWx0VHlwZWZhY2UoZSl9c3RhdGljIGRlc3RpbmF0aW9uKGUpe3JldHVybiBuZXcgRGVzdGluYXRpb24oZSl9c3RhdGljIGRvY3VtZW50QXNzZW1ibHkoZSl7cmV0dXJuIG5ldyBEb2N1bWVudEFzc2VtYmx5KGUpfXN0YXRpYyBkcml2ZXIoZSl7cmV0dXJuIG5ldyBEcml2ZXIoZSl9c3RhdGljIGR1cGxleE9wdGlvbihlKXtyZXR1cm4gbmV3IER1cGxleE9wdGlvbihlKX1zdGF0aWMgZHluYW1pY1JlbmRlcihlKXtyZXR1cm4gbmV3IER5bmFtaWNSZW5kZXIoZSl9c3RhdGljIGVtYmVkKGUpe3JldHVybiBuZXcgRW1iZWQoZSl9c3RhdGljIGVuY3J5cHQoZSl7cmV0dXJuIG5ldyBFbmNyeXB0KGUpfXN0YXRpYyBlbmNyeXB0aW9uKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbihlKX1zdGF0aWMgZW5jcnlwdGlvbkxldmVsKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbkxldmVsKGUpfXN0YXRpYyBlbmZvcmNlKGUpe3JldHVybiBuZXcgRW5mb3JjZShlKX1zdGF0aWMgZXF1YXRlKGUpe3JldHVybiBuZXcgRXF1YXRlKGUpfXN0YXRpYyBlcXVhdGVSYW5nZShlKXtyZXR1cm4gbmV3IEVxdWF0ZVJhbmdlKGUpfXN0YXRpYyBleGNsdWRlKGUpe3JldHVybiBuZXcgRXhjbHVkZShlKX1zdGF0aWMgZXhjbHVkZU5TKGUpe3JldHVybiBuZXcgRXhjbHVkZU5TKGUpfXN0YXRpYyBmbGlwTGFiZWwoZSl7cmV0dXJuIG5ldyBGbGlwTGFiZWwoZSl9c3RhdGljIGZvbnRJbmZvKGUpe3JldHVybiBuZXcgRm9udEluZm8oZSl9c3RhdGljIGZvcm1GaWVsZEZpbGxpbmcoZSl7cmV0dXJuIG5ldyBGb3JtRmllbGRGaWxsaW5nKGUpfXN0YXRpYyBncm91cFBhcmVudChlKXtyZXR1cm4gbmV3IEdyb3VwUGFyZW50KGUpfXN0YXRpYyBpZkVtcHR5KGUpe3JldHVybiBuZXcgSWZFbXB0eShlKX1zdGF0aWMgaW5jbHVkZVhEUENvbnRlbnQoZSl7cmV0dXJuIG5ldyBJbmNsdWRlWERQQ29udGVudChlKX1zdGF0aWMgaW5jcmVtZW50YWxMb2FkKGUpe3JldHVybiBuZXcgSW5jcmVtZW50YWxMb2FkKGUpfXN0YXRpYyBpbmNyZW1lbnRhbE1lcmdlKGUpe3JldHVybiBuZXcgSW5jcmVtZW50YWxNZXJnZShlKX1zdGF0aWMgaW50ZXJhY3RpdmUoZSl7cmV0dXJuIG5ldyBJbnRlcmFjdGl2ZShlKX1zdGF0aWMgam9nKGUpe3JldHVybiBuZXcgSm9nKGUpfXN0YXRpYyBsYWJlbFByaW50ZXIoZSl7cmV0dXJuIG5ldyBMYWJlbFByaW50ZXIoZSl9c3RhdGljIGxheW91dChlKXtyZXR1cm4gbmV3IExheW91dChlKX1zdGF0aWMgbGV2ZWwoZSl7cmV0dXJuIG5ldyBMZXZlbChlKX1zdGF0aWMgbGluZWFyaXplZChlKXtyZXR1cm4gbmV3IExpbmVhcml6ZWQoZSl9c3RhdGljIGxvY2FsZShlKXtyZXR1cm4gbmV3IExvY2FsZShlKX1zdGF0aWMgbG9jYWxlU2V0KGUpe3JldHVybiBuZXcgTG9jYWxlU2V0KGUpfXN0YXRpYyBsb2coZSl7cmV0dXJuIG5ldyBMb2coZSl9c3RhdGljIG1hcChlKXtyZXR1cm4gbmV3IE1hcEVsZW1lbnQoZSl9c3RhdGljIG1lZGl1bUluZm8oZSl7cmV0dXJuIG5ldyBNZWRpdW1JbmZvKGUpfXN0YXRpYyBtZXNzYWdlKGUpe3JldHVybiBuZXcgTWVzc2FnZShlKX1zdGF0aWMgbWVzc2FnaW5nKGUpe3JldHVybiBuZXcgTWVzc2FnaW5nKGUpfXN0YXRpYyBtb2RlKGUpe3JldHVybiBuZXcgTW9kZShlKX1zdGF0aWMgbW9kaWZ5QW5ub3RzKGUpe3JldHVybiBuZXcgTW9kaWZ5QW5ub3RzKGUpfXN0YXRpYyBtc2dJZChlKXtyZXR1cm4gbmV3IE1zZ0lkKGUpfXN0YXRpYyBuYW1lQXR0cihlKXtyZXR1cm4gbmV3IE5hbWVBdHRyKGUpfXN0YXRpYyBuZXZlckVtYmVkKGUpe3JldHVybiBuZXcgTmV2ZXJFbWJlZChlKX1zdGF0aWMgbnVtYmVyT2ZDb3BpZXMoZSl7cmV0dXJuIG5ldyBOdW1iZXJPZkNvcGllcyhlKX1zdGF0aWMgb3BlbkFjdGlvbihlKXtyZXR1cm4gbmV3IE9wZW5BY3Rpb24oZSl9c3RhdGljIG91dHB1dChlKXtyZXR1cm4gbmV3IE91dHB1dChlKX1zdGF0aWMgb3V0cHV0QmluKGUpe3JldHVybiBuZXcgT3V0cHV0QmluKGUpfXN0YXRpYyBvdXRwdXRYU0woZSl7cmV0dXJuIG5ldyBPdXRwdXRYU0woZSl9c3RhdGljIG92ZXJwcmludChlKXtyZXR1cm4gbmV3IE92ZXJwcmludChlKX1zdGF0aWMgcGFja2V0cyhlKXtyZXR1cm4gbmV3IFBhY2tldHMoZSl9c3RhdGljIHBhZ2VPZmZzZXQoZSl7cmV0dXJuIG5ldyBQYWdlT2Zmc2V0KGUpfXN0YXRpYyBwYWdlUmFuZ2UoZSl7cmV0dXJuIG5ldyBQYWdlUmFuZ2UoZSl9c3RhdGljIHBhZ2luYXRpb24oZSl7cmV0dXJuIG5ldyBQYWdpbmF0aW9uKGUpfXN0YXRpYyBwYWdpbmF0aW9uT3ZlcnJpZGUoZSl7cmV0dXJuIG5ldyBQYWdpbmF0aW9uT3ZlcnJpZGUoZSl9c3RhdGljIHBhcnQoZSl7cmV0dXJuIG5ldyBQYXJ0KGUpfXN0YXRpYyBwY2woZSl7cmV0dXJuIG5ldyBQY2woZSl9c3RhdGljIHBkZihlKXtyZXR1cm4gbmV3IFBkZihlKX1zdGF0aWMgcGRmYShlKXtyZXR1cm4gbmV3IFBkZmEoZSl9c3RhdGljIHBlcm1pc3Npb25zKGUpe3JldHVybiBuZXcgUGVybWlzc2lvbnMoZSl9c3RhdGljIHBpY2tUcmF5QnlQREZTaXplKGUpe3JldHVybiBuZXcgUGlja1RyYXlCeVBERlNpemUoZSl9c3RhdGljIHBpY3R1cmUoZSl7cmV0dXJuIG5ldyBQaWN0dXJlKGUpfXN0YXRpYyBwbGFpbnRleHRNZXRhZGF0YShlKXtyZXR1cm4gbmV3IFBsYWludGV4dE1ldGFkYXRhKGUpfXN0YXRpYyBwcmVzZW5jZShlKXtyZXR1cm4gbmV3IFByZXNlbmNlKGUpfXN0YXRpYyBwcmVzZW50KGUpe3JldHVybiBuZXcgUHJlc2VudChlKX1zdGF0aWMgcHJpbnQoZSl7cmV0dXJuIG5ldyBQcmludChlKX1zdGF0aWMgcHJpbnRIaWdoUXVhbGl0eShlKXtyZXR1cm4gbmV3IFByaW50SGlnaFF1YWxpdHkoZSl9c3RhdGljIHByaW50U2NhbGluZyhlKXtyZXR1cm4gbmV3IFByaW50U2NhbGluZyhlKX1zdGF0aWMgcHJpbnRlck5hbWUoZSl7cmV0dXJuIG5ldyBQcmludGVyTmFtZShlKX1zdGF0aWMgcHJvZHVjZXIoZSl7cmV0dXJuIG5ldyBQcm9kdWNlcihlKX1zdGF0aWMgcHMoZSl7cmV0dXJuIG5ldyBQcyhlKX1zdGF0aWMgcmFuZ2UoZSl7cmV0dXJuIG5ldyBSYW5nZShlKX1zdGF0aWMgcmVjb3JkKGUpe3JldHVybiBuZXcgUmVjb3JkKGUpfXN0YXRpYyByZWxldmFudChlKXtyZXR1cm4gbmV3IFJlbGV2YW50KGUpfXN0YXRpYyByZW5hbWUoZSl7cmV0dXJuIG5ldyBSZW5hbWUoZSl9c3RhdGljIHJlbmRlclBvbGljeShlKXtyZXR1cm4gbmV3IFJlbmRlclBvbGljeShlKX1zdGF0aWMgcnVuU2NyaXB0cyhlKXtyZXR1cm4gbmV3IFJ1blNjcmlwdHMoZSl9c3RhdGljIHNjcmlwdChlKXtyZXR1cm4gbmV3IFNjcmlwdChlKX1zdGF0aWMgc2NyaXB0TW9kZWwoZSl7cmV0dXJuIG5ldyBTY3JpcHRNb2RlbChlKX1zdGF0aWMgc2V2ZXJpdHkoZSl7cmV0dXJuIG5ldyBTZXZlcml0eShlKX1zdGF0aWMgc2lsZW50UHJpbnQoZSl7cmV0dXJuIG5ldyBTaWxlbnRQcmludChlKX1zdGF0aWMgc3RhcGxlKGUpe3JldHVybiBuZXcgU3RhcGxlKGUpfXN0YXRpYyBzdGFydE5vZGUoZSl7cmV0dXJuIG5ldyBTdGFydE5vZGUoZSl9c3RhdGljIHN0YXJ0UGFnZShlKXtyZXR1cm4gbmV3IFN0YXJ0UGFnZShlKX1zdGF0aWMgc3VibWl0Rm9ybWF0KGUpe3JldHVybiBuZXcgU3VibWl0Rm9ybWF0KGUpfXN0YXRpYyBzdWJtaXRVcmwoZSl7cmV0dXJuIG5ldyBTdWJtaXRVcmwoZSl9c3RhdGljIHN1YnNldEJlbG93KGUpe3JldHVybiBuZXcgU3Vic2V0QmVsb3coZSl9c3RhdGljIHN1cHByZXNzQmFubmVyKGUpe3JldHVybiBuZXcgU3VwcHJlc3NCYW5uZXIoZSl9c3RhdGljIHRhZ2dlZChlKXtyZXR1cm4gbmV3IFRhZ2dlZChlKX1zdGF0aWMgdGVtcGxhdGUoZSl7cmV0dXJuIG5ldyBUZW1wbGF0ZShlKX1zdGF0aWMgdGVtcGxhdGVDYWNoZShlKXtyZXR1cm4gbmV3IFRlbXBsYXRlQ2FjaGUoZSl9c3RhdGljIHRocmVzaG9sZChlKXtyZXR1cm4gbmV3IFRocmVzaG9sZChlKX1zdGF0aWMgdG8oZSl7cmV0dXJuIG5ldyBUbyhlKX1zdGF0aWMgdHJhY2UoZSl7cmV0dXJuIG5ldyBUcmFjZShlKX1zdGF0aWMgdHJhbnNmb3JtKGUpe3JldHVybiBuZXcgVHJhbnNmb3JtKGUpfXN0YXRpYyB0eXBlKGUpe3JldHVybiBuZXcgVHlwZShlKX1zdGF0aWMgdXJpKGUpe3JldHVybiBuZXcgVXJpKGUpfXN0YXRpYyB2YWxpZGF0ZShlKXtyZXR1cm4gbmV3IFZhbGlkYXRlKGUpfXN0YXRpYyB2YWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcyhlKXtyZXR1cm4gbmV3IFZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzKGUpfXN0YXRpYyB2YWxpZGF0aW9uTWVzc2FnaW5nKGUpe3JldHVybiBuZXcgVmFsaWRhdGlvbk1lc3NhZ2luZyhlKX1zdGF0aWMgdmVyc2lvbihlKXtyZXR1cm4gbmV3IFZlcnNpb24oZSl9c3RhdGljIHZlcnNpb25Db250cm9sKGUpe3JldHVybiBuZXcgVmVyc2lvbkNvbnRyb2woZSl9c3RhdGljIHZpZXdlclByZWZlcmVuY2VzKGUpe3JldHVybiBuZXcgVmlld2VyUHJlZmVyZW5jZXMoZSl9c3RhdGljIHdlYkNsaWVudChlKXtyZXR1cm4gbmV3IFdlYkNsaWVudChlKX1zdGF0aWMgd2hpdGVzcGFjZShlKXtyZXR1cm4gbmV3IFdoaXRlc3BhY2UoZSl9c3RhdGljIHdpbmRvdyhlKXtyZXR1cm4gbmV3IFdpbmRvdyhlKX1zdGF0aWMgeGRjKGUpe3JldHVybiBuZXcgWGRjKGUpfXN0YXRpYyB4ZHAoZSl7cmV0dXJuIG5ldyBYZHAoZSl9c3RhdGljIHhzbChlKXtyZXR1cm4gbmV3IFhzbChlKX1zdGF0aWMgenBsKGUpe3JldHVybiBuZXcgWnBsKGUpfX10LkNvbmZpZ05hbWVzcGFjZT1Db25maWdOYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Db25uZWN0aW9uU2V0TmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDgxKSxuPWEoODcpO2NvbnN0IGk9ci5OYW1lc3BhY2VJZHMuY29ubmVjdGlvblNldC5pZDtjbGFzcyBDb25uZWN0aW9uU2V0IGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwiY29ubmVjdGlvblNldCIsITApO3RoaXMud3NkbENvbm5lY3Rpb249bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy54bWxDb25uZWN0aW9uPW5ldyBuLlhGQU9iamVjdEFycmF5O3RoaXMueHNkQ29ubmVjdGlvbj1uZXcgbi5YRkFPYmplY3RBcnJheX19Y2xhc3MgRWZmZWN0aXZlSW5wdXRQb2xpY3kgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJlZmZlY3RpdmVJbnB1dFBvbGljeSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBFZmZlY3RpdmVPdXRwdXRQb2xpY3kgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJlZmZlY3RpdmVPdXRwdXRQb2xpY3kiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgT3BlcmF0aW9uIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwib3BlcmF0aW9uIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmlucHV0PWUuaW5wdXR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMub3V0cHV0PWUub3V0cHV0fHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFJvb3RFbGVtZW50IGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwicm9vdEVsZW1lbnQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgU29hcEFjdGlvbiBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInNvYXBBY3Rpb24iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgU29hcEFkZHJlc3MgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJzb2FwQWRkcmVzcyIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBVcmkgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJ1cmkiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgV3NkbEFkZHJlc3MgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJ3c2RsQWRkcmVzcyIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBXc2RsQ29ubmVjdGlvbiBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksIndzZGxDb25uZWN0aW9uIiwhMCk7dGhpcy5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMuZWZmZWN0aXZlSW5wdXRQb2xpY3k9bnVsbDt0aGlzLmVmZmVjdGl2ZU91dHB1dFBvbGljeT1udWxsO3RoaXMub3BlcmF0aW9uPW51bGw7dGhpcy5zb2FwQWN0aW9uPW51bGw7dGhpcy5zb2FwQWRkcmVzcz1udWxsO3RoaXMud3NkbEFkZHJlc3M9bnVsbH19Y2xhc3MgWG1sQ29ubmVjdGlvbiBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInhtbENvbm5lY3Rpb24iLCEwKTt0aGlzLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51cmk9bnVsbH19Y2xhc3MgWHNkQ29ubmVjdGlvbiBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInhzZENvbm5lY3Rpb24iLCEwKTt0aGlzLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yb290RWxlbWVudD1udWxsO3RoaXMudXJpPW51bGx9fWNsYXNzIENvbm5lY3Rpb25TZXROYW1lc3BhY2V7c3RhdGljW3IuJGJ1aWxkWEZBT2JqZWN0XShlLHQpe2lmKENvbm5lY3Rpb25TZXROYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIENvbm5lY3Rpb25TZXROYW1lc3BhY2VbZV0odCl9c3RhdGljIGNvbm5lY3Rpb25TZXQoZSl7cmV0dXJuIG5ldyBDb25uZWN0aW9uU2V0KGUpfXN0YXRpYyBlZmZlY3RpdmVJbnB1dFBvbGljeShlKXtyZXR1cm4gbmV3IEVmZmVjdGl2ZUlucHV0UG9saWN5KGUpfXN0YXRpYyBlZmZlY3RpdmVPdXRwdXRQb2xpY3koZSl7cmV0dXJuIG5ldyBFZmZlY3RpdmVPdXRwdXRQb2xpY3koZSl9c3RhdGljIG9wZXJhdGlvbihlKXtyZXR1cm4gbmV3IE9wZXJhdGlvbihlKX1zdGF0aWMgcm9vdEVsZW1lbnQoZSl7cmV0dXJuIG5ldyBSb290RWxlbWVudChlKX1zdGF0aWMgc29hcEFjdGlvbihlKXtyZXR1cm4gbmV3IFNvYXBBY3Rpb24oZSl9c3RhdGljIHNvYXBBZGRyZXNzKGUpe3JldHVybiBuZXcgU29hcEFkZHJlc3MoZSl9c3RhdGljIHVyaShlKXtyZXR1cm4gbmV3IFVyaShlKX1zdGF0aWMgd3NkbEFkZHJlc3MoZSl7cmV0dXJuIG5ldyBXc2RsQWRkcmVzcyhlKX1zdGF0aWMgd3NkbENvbm5lY3Rpb24oZSl7cmV0dXJuIG5ldyBXc2RsQ29ubmVjdGlvbihlKX1zdGF0aWMgeG1sQ29ubmVjdGlvbihlKXtyZXR1cm4gbmV3IFhtbENvbm5lY3Rpb24oZSl9c3RhdGljIHhzZENvbm5lY3Rpb24oZSl7cmV0dXJuIG5ldyBYc2RDb25uZWN0aW9uKGUpfX10LkNvbm5lY3Rpb25TZXROYW1lc3BhY2U9Q29ubmVjdGlvblNldE5hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkRhdGFzZXRzTmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDc4KSxuPWEoODEpLGk9YSg4Nyk7Y29uc3Qgcz1uLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDtjbGFzcyBEYXRhIGV4dGVuZHMgaS5YbWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZGF0YSIsZSl9W3IuJGlzTnNBZ25vc3RpY10oKXtyZXR1cm4hMH19Y2xhc3MgRGF0YXNldHMgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJkYXRhc2V0cyIsITApO3RoaXMuZGF0YT1udWxsO3RoaXMuU2lnbmF0dXJlPW51bGx9W3IuJG9uQ2hpbGRdKGUpe2NvbnN0IHQ9ZVtyLiRub2RlTmFtZV07KCJkYXRhIj09PXQmJmVbci4kbmFtZXNwYWNlSWRdPT09c3x8IlNpZ25hdHVyZSI9PT10JiZlW3IuJG5hbWVzcGFjZUlkXT09PW4uTmFtZXNwYWNlSWRzLnNpZ25hdHVyZS5pZCkmJih0aGlzW3RdPWUpO3RoaXNbci4kYXBwZW5kQ2hpbGRdKGUpfX1jbGFzcyBEYXRhc2V0c05hbWVzcGFjZXtzdGF0aWNbbi4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoRGF0YXNldHNOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIERhdGFzZXRzTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBkYXRhc2V0cyhlKXtyZXR1cm4gbmV3IERhdGFzZXRzKGUpfXN0YXRpYyBkYXRhKGUpe3JldHVybiBuZXcgRGF0YShlKX19dC5EYXRhc2V0c05hbWVzcGFjZT1EYXRhc2V0c05hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkxvY2FsZVNldE5hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg4MSksbj1hKDg3KSxpPWEoODQpO2NvbnN0IHM9ci5OYW1lc3BhY2VJZHMubG9jYWxlU2V0LmlkO2NsYXNzIENhbGVuZGFyU3ltYm9scyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImNhbGVuZGFyU3ltYm9scyIsITApO3RoaXMubmFtZT0iZ3JlZ29yaWFuIjt0aGlzLmRheU5hbWVzPW5ldyBuLlhGQU9iamVjdEFycmF5KDIpO3RoaXMuZXJhTmFtZXM9bnVsbDt0aGlzLm1lcmlkaWVtTmFtZXM9bnVsbDt0aGlzLm1vbnRoTmFtZXM9bmV3IG4uWEZBT2JqZWN0QXJyYXkoMil9fWNsYXNzIEN1cnJlbmN5U3ltYm9sIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiY3VycmVuY3lTeW1ib2wiKTt0aGlzLm5hbWU9KDAsaS5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbInN5bWJvbCIsImlzb25hbWUiLCJkZWNpbWFsIl0pfX1jbGFzcyBDdXJyZW5jeVN5bWJvbHMgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJjdXJyZW5jeVN5bWJvbHMiLCEwKTt0aGlzLmN1cnJlbmN5U3ltYm9sPW5ldyBuLlhGQU9iamVjdEFycmF5KDMpfX1jbGFzcyBEYXRlUGF0dGVybiBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImRhdGVQYXR0ZXJuIik7dGhpcy5uYW1lPSgwLGkuZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJmdWxsIiwibG9uZyIsIm1lZCIsInNob3J0Il0pfX1jbGFzcyBEYXRlUGF0dGVybnMgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJkYXRlUGF0dGVybnMiLCEwKTt0aGlzLmRhdGVQYXR0ZXJuPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpfX1jbGFzcyBEYXRlVGltZVN5bWJvbHMgZXh0ZW5kcyBuLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZGF0ZVRpbWVTeW1ib2xzIil9fWNsYXNzIERheSBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImRheSIpfX1jbGFzcyBEYXlOYW1lcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImRheU5hbWVzIiwhMCk7dGhpcy5hYmJyPSgwLGkuZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5kYXk9bmV3IG4uWEZBT2JqZWN0QXJyYXkoNyl9fWNsYXNzIEVyYSBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImVyYSIpfX1jbGFzcyBFcmFOYW1lcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImVyYU5hbWVzIiwhMCk7dGhpcy5lcmE9bmV3IG4uWEZBT2JqZWN0QXJyYXkoMil9fWNsYXNzIExvY2FsZSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImxvY2FsZSIsITApO3RoaXMuZGVzYz1lLmRlc2N8fCIiO3RoaXMubmFtZT0iaXNvbmFtZSI7dGhpcy5jYWxlbmRhclN5bWJvbHM9bnVsbDt0aGlzLmN1cnJlbmN5U3ltYm9scz1udWxsO3RoaXMuZGF0ZVBhdHRlcm5zPW51bGw7dGhpcy5kYXRlVGltZVN5bWJvbHM9bnVsbDt0aGlzLm51bWJlclBhdHRlcm5zPW51bGw7dGhpcy5udW1iZXJTeW1ib2xzPW51bGw7dGhpcy50aW1lUGF0dGVybnM9bnVsbDt0aGlzLnR5cGVGYWNlcz1udWxsfX1jbGFzcyBMb2NhbGVTZXQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJsb2NhbGVTZXQiLCEwKTt0aGlzLmxvY2FsZT1uZXcgbi5YRkFPYmplY3RBcnJheX19Y2xhc3MgTWVyaWRpZW0gZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJtZXJpZGllbSIpfX1jbGFzcyBNZXJpZGllbU5hbWVzIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibWVyaWRpZW1OYW1lcyIsITApO3RoaXMubWVyaWRpZW09bmV3IG4uWEZBT2JqZWN0QXJyYXkoMil9fWNsYXNzIE1vbnRoIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibW9udGgiKX19Y2xhc3MgTW9udGhOYW1lcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm1vbnRoTmFtZXMiLCEwKTt0aGlzLmFiYnI9KDAsaS5nZXRJbnRlZ2VyKSh7ZGF0YTplLmFiYnIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLm1vbnRoPW5ldyBuLlhGQU9iamVjdEFycmF5KDEyKX19Y2xhc3MgTnVtYmVyUGF0dGVybiBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm51bWJlclBhdHRlcm4iKTt0aGlzLm5hbWU9KDAsaS5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSl9fWNsYXNzIE51bWJlclBhdHRlcm5zIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibnVtYmVyUGF0dGVybnMiLCEwKTt0aGlzLm51bWJlclBhdHRlcm49bmV3IG4uWEZBT2JqZWN0QXJyYXkoNCl9fWNsYXNzIE51bWJlclN5bWJvbCBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm51bWJlclN5bWJvbCIpO3RoaXMubmFtZT0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZGVjaW1hbCIsImdyb3VwaW5nIiwicGVyY2VudCIsIm1pbnVzIiwiemVybyJdKX19Y2xhc3MgTnVtYmVyU3ltYm9scyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm51bWJlclN5bWJvbHMiLCEwKTt0aGlzLm51bWJlclN5bWJvbD1uZXcgbi5YRkFPYmplY3RBcnJheSg1KX19Y2xhc3MgVGltZVBhdHRlcm4gZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJ0aW1lUGF0dGVybiIpO3RoaXMubmFtZT0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZnVsbCIsImxvbmciLCJtZWQiLCJzaG9ydCJdKX19Y2xhc3MgVGltZVBhdHRlcm5zIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywidGltZVBhdHRlcm5zIiwhMCk7dGhpcy50aW1lUGF0dGVybj1uZXcgbi5YRkFPYmplY3RBcnJheSg0KX19Y2xhc3MgVHlwZUZhY2UgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJ0eXBlRmFjZSIsITApO3RoaXMubmFtZT0iInxlLm5hbWV9fWNsYXNzIFR5cGVGYWNlcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsInR5cGVGYWNlcyIsITApO3RoaXMudHlwZUZhY2U9bmV3IG4uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIExvY2FsZVNldE5hbWVzcGFjZXtzdGF0aWNbci4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoTG9jYWxlU2V0TmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBMb2NhbGVTZXROYW1lc3BhY2VbZV0odCl9c3RhdGljIGNhbGVuZGFyU3ltYm9scyhlKXtyZXR1cm4gbmV3IENhbGVuZGFyU3ltYm9scyhlKX1zdGF0aWMgY3VycmVuY3lTeW1ib2woZSl7cmV0dXJuIG5ldyBDdXJyZW5jeVN5bWJvbChlKX1zdGF0aWMgY3VycmVuY3lTeW1ib2xzKGUpe3JldHVybiBuZXcgQ3VycmVuY3lTeW1ib2xzKGUpfXN0YXRpYyBkYXRlUGF0dGVybihlKXtyZXR1cm4gbmV3IERhdGVQYXR0ZXJuKGUpfXN0YXRpYyBkYXRlUGF0dGVybnMoZSl7cmV0dXJuIG5ldyBEYXRlUGF0dGVybnMoZSl9c3RhdGljIGRhdGVUaW1lU3ltYm9scyhlKXtyZXR1cm4gbmV3IERhdGVUaW1lU3ltYm9scyhlKX1zdGF0aWMgZGF5KGUpe3JldHVybiBuZXcgRGF5KGUpfXN0YXRpYyBkYXlOYW1lcyhlKXtyZXR1cm4gbmV3IERheU5hbWVzKGUpfXN0YXRpYyBlcmEoZSl7cmV0dXJuIG5ldyBFcmEoZSl9c3RhdGljIGVyYU5hbWVzKGUpe3JldHVybiBuZXcgRXJhTmFtZXMoZSl9c3RhdGljIGxvY2FsZShlKXtyZXR1cm4gbmV3IExvY2FsZShlKX1zdGF0aWMgbG9jYWxlU2V0KGUpe3JldHVybiBuZXcgTG9jYWxlU2V0KGUpfXN0YXRpYyBtZXJpZGllbShlKXtyZXR1cm4gbmV3IE1lcmlkaWVtKGUpfXN0YXRpYyBtZXJpZGllbU5hbWVzKGUpe3JldHVybiBuZXcgTWVyaWRpZW1OYW1lcyhlKX1zdGF0aWMgbW9udGgoZSl7cmV0dXJuIG5ldyBNb250aChlKX1zdGF0aWMgbW9udGhOYW1lcyhlKXtyZXR1cm4gbmV3IE1vbnRoTmFtZXMoZSl9c3RhdGljIG51bWJlclBhdHRlcm4oZSl7cmV0dXJuIG5ldyBOdW1iZXJQYXR0ZXJuKGUpfXN0YXRpYyBudW1iZXJQYXR0ZXJucyhlKXtyZXR1cm4gbmV3IE51bWJlclBhdHRlcm5zKGUpfXN0YXRpYyBudW1iZXJTeW1ib2woZSl7cmV0dXJuIG5ldyBOdW1iZXJTeW1ib2woZSl9c3RhdGljIG51bWJlclN5bWJvbHMoZSl7cmV0dXJuIG5ldyBOdW1iZXJTeW1ib2xzKGUpfXN0YXRpYyB0aW1lUGF0dGVybihlKXtyZXR1cm4gbmV3IFRpbWVQYXR0ZXJuKGUpfXN0YXRpYyB0aW1lUGF0dGVybnMoZSl7cmV0dXJuIG5ldyBUaW1lUGF0dGVybnMoZSl9c3RhdGljIHR5cGVGYWNlKGUpe3JldHVybiBuZXcgVHlwZUZhY2UoZSl9c3RhdGljIHR5cGVGYWNlcyhlKXtyZXR1cm4gbmV3IFR5cGVGYWNlcyhlKX19dC5Mb2NhbGVTZXROYW1lc3BhY2U9TG9jYWxlU2V0TmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU2lnbmF0dXJlTmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDgxKSxuPWEoODcpO2NvbnN0IGk9ci5OYW1lc3BhY2VJZHMuc2lnbmF0dXJlLmlkO2NsYXNzIFNpZ25hdHVyZSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInNpZ25hdHVyZSIsITApfX1jbGFzcyBTaWduYXR1cmVOYW1lc3BhY2V7c3RhdGljW3IuJGJ1aWxkWEZBT2JqZWN0XShlLHQpe2lmKFNpZ25hdHVyZU5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gU2lnbmF0dXJlTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBzaWduYXR1cmUoZSl7cmV0dXJuIG5ldyBTaWduYXR1cmUoZSl9fXQuU2lnbmF0dXJlTmFtZXNwYWNlPVNpZ25hdHVyZU5hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlN0eWxlc2hlZXROYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoODEpLG49YSg4Nyk7Y29uc3QgaT1yLk5hbWVzcGFjZUlkcy5zdHlsZXNoZWV0LmlkO2NsYXNzIFN0eWxlc2hlZXQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJzdHlsZXNoZWV0IiwhMCl9fWNsYXNzIFN0eWxlc2hlZXROYW1lc3BhY2V7c3RhdGljW3IuJGJ1aWxkWEZBT2JqZWN0XShlLHQpe2lmKFN0eWxlc2hlZXROYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFN0eWxlc2hlZXROYW1lc3BhY2VbZV0odCl9c3RhdGljIHN0eWxlc2hlZXQoZSl7cmV0dXJuIG5ldyBTdHlsZXNoZWV0KGUpfX10LlN0eWxlc2hlZXROYW1lc3BhY2U9U3R5bGVzaGVldE5hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhkcE5hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg4MSksbj1hKDc4KSxpPWEoODcpO2NvbnN0IHM9ci5OYW1lc3BhY2VJZHMueGRwLmlkO2NsYXNzIFhkcCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsInhkcCIsITApO3RoaXMudXVpZD1lLnV1aWR8fCIiO3RoaXMudGltZVN0YW1wPWUudGltZVN0YW1wfHwiIjt0aGlzLmNvbmZpZz1udWxsO3RoaXMuY29ubmVjdGlvblNldD1udWxsO3RoaXMuZGF0YXNldHM9bnVsbDt0aGlzLmxvY2FsZVNldD1udWxsO3RoaXMuc3R5bGVzaGVldD1uZXcgaS5YRkFPYmplY3RBcnJheTt0aGlzLnRlbXBsYXRlPW51bGx9W24uJG9uQ2hpbGRDaGVja10oZSl7Y29uc3QgdD1yLk5hbWVzcGFjZUlkc1tlW24uJG5vZGVOYW1lXV07cmV0dXJuIHQmJmVbbi4kbmFtZXNwYWNlSWRdPT09dC5pZH19Y2xhc3MgWGRwTmFtZXNwYWNle3N0YXRpY1tyLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihYZHBOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFhkcE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgeGRwKGUpe3JldHVybiBuZXcgWGRwKGUpfX10LlhkcE5hbWVzcGFjZT1YZHBOYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YaHRtbE5hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg3OCksbj1hKDgxKSxpPWEoODMpLHM9YSg4NCksbz1hKDg3KTtjb25zdCBjPW4uTmFtZXNwYWNlSWRzLnhodG1sLmlkLGw9U3ltYm9sKCksaD1uZXcgU2V0KFsiY29sb3IiLCJmb250IiwiZm9udC1mYW1pbHkiLCJmb250LXNpemUiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC13ZWlnaHQiLCJtYXJnaW4iLCJtYXJnaW4tYm90dG9tIiwibWFyZ2luLWxlZnQiLCJtYXJnaW4tcmlnaHQiLCJtYXJnaW4tdG9wIiwibGV0dGVyLXNwYWNpbmciLCJsaW5lLWhlaWdodCIsIm9ycGhhbnMiLCJwYWdlLWJyZWFrLWFmdGVyIiwicGFnZS1icmVhay1iZWZvcmUiLCJwYWdlLWJyZWFrLWluc2lkZSIsInRhYi1pbnRlcnZhbCIsInRhYi1zdG9wIiwidGV4dC1hbGlnbiIsInRleHQtZGVjb3JhdGlvbiIsInRleHQtaW5kZW50IiwidmVydGljYWwtYWxpZ24iLCJ3aWRvd3MiLCJrZXJuaW5nLW1vZGUiLCJ4ZmEtZm9udC1ob3Jpem9udGFsLXNjYWxlIiwieGZhLWZvbnQtdmVydGljYWwtc2NhbGUiLCJ4ZmEtc3BhY2VydW4iLCJ4ZmEtdGFiLXN0b3BzIl0pLHU9bmV3IE1hcChbWyJwYWdlLWJyZWFrLWFmdGVyIiwiYnJlYWtBZnRlciJdLFsicGFnZS1icmVhay1iZWZvcmUiLCJicmVha0JlZm9yZSJdLFsicGFnZS1icmVhay1pbnNpZGUiLCJicmVha0luc2lkZSJdLFsia2VybmluZy1tb2RlIixlPT4ibm9uZSI9PT1lPyJub25lIjoibm9ybWFsIl0sWyJ4ZmEtZm9udC1ob3Jpem9udGFsLXNjYWxlIixlPT5gc2NhbGVYKCR7TWF0aC5tYXgoMCxNYXRoLm1pbihwYXJzZUludChlKS8xMDApKS50b0ZpeGVkKDIpfSlgXSxbInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIixlPT5gc2NhbGVZKCR7TWF0aC5tYXgoMCxNYXRoLm1pbihwYXJzZUludChlKS8xMDApKS50b0ZpeGVkKDIpfSlgXSxbInhmYS1zcGFjZXJ1biIsIiJdLFsieGZhLXRhYi1zdG9wcyIsIiJdLFsiZm9udC1zaXplIiwoZSx0KT0+e2U9dC5mb250U2l6ZT0oMCxzLmdldE1lYXN1cmVtZW50KShlKTtyZXR1cm4oMCxpLm1lYXN1cmVUb1N0cmluZykoLjk5KmUpfV0sWyJsZXR0ZXItc3BhY2luZyIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJsaW5lLWhlaWdodCIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJtYXJnaW4iLGU9PigwLGkubWVhc3VyZVRvU3RyaW5nKSgoMCxzLmdldE1lYXN1cmVtZW50KShlKSldLFsibWFyZ2luLWJvdHRvbSIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJtYXJnaW4tbGVmdCIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJtYXJnaW4tcmlnaHQiLGU9PigwLGkubWVhc3VyZVRvU3RyaW5nKSgoMCxzLmdldE1lYXN1cmVtZW50KShlKSldLFsibWFyZ2luLXRvcCIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJ0ZXh0LWluZGVudCIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJmb250LWZhbWlseSIsZT0+ZV0sWyJ2ZXJ0aWNhbC1hbGlnbiIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV1dKSxkPS9ccysvZyxmPS9bXHJcbl0rL2csZz0vXHJcbj8vZztmdW5jdGlvbiBtYXBTdHlsZShlLHQsYSl7Y29uc3Qgbj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKCFlKXJldHVybiBuO2NvbnN0IG89T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3RbdCxhXW9mIGUuc3BsaXQoIjsiKS5tYXAoKGU9PmUuc3BsaXQoIjoiLDIpKSkpe2NvbnN0IGU9dS5nZXQodCk7aWYoIiI9PT1lKWNvbnRpbnVlO2xldCByPWE7ZSYmKHI9InN0cmluZyI9PXR5cGVvZiBlP2U6ZShhLG8pKTt0LmVuZHNXaXRoKCJzY2FsZSIpP24udHJhbnNmb3JtPW4udHJhbnNmb3JtP2Ake25bdF19ICR7cn1gOnI6blt0LnJlcGxhY2VBbGwoLy0oW2EtekEtWl0pL2csKChlLHQpPT50LnRvVXBwZXJDYXNlKCkpKV09cn1uLmZvbnRGYW1pbHkmJigwLGkuc2V0Rm9udEZhbWlseSkoe3R5cGVmYWNlOm4uZm9udEZhbWlseSx3ZWlnaHQ6bi5mb250V2VpZ2h0fHwibm9ybWFsIixwb3N0dXJlOm4uZm9udFN0eWxlfHwibm9ybWFsIixzaXplOm8uZm9udFNpemV8fDB9LHQsdFtyLiRnbG9iYWxEYXRhXS5mb250RmluZGVyLG4pO2lmKGEmJm4udmVydGljYWxBbGlnbiYmIjBweCIhPT1uLnZlcnRpY2FsQWxpZ24mJm4uZm9udFNpemUpe2NvbnN0IGU9LjU4Myx0PS4zMzMsYT0oMCxzLmdldE1lYXN1cmVtZW50KShuLmZvbnRTaXplKTtuLmZvbnRTaXplPSgwLGkubWVhc3VyZVRvU3RyaW5nKShhKmUpO24udmVydGljYWxBbGlnbj0oMCxpLm1lYXN1cmVUb1N0cmluZykoTWF0aC5zaWduKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKG4udmVydGljYWxBbGlnbikpKmEqdCl9YSYmbi5mb250U2l6ZSYmKG4uZm9udFNpemU9YGNhbGMoJHtuLmZvbnRTaXplfSAqIHZhcigtLXNjYWxlLWZhY3RvcikpYCk7KDAsaS5maXhUZXh0SW5kZW50KShuKTtyZXR1cm4gbn1jb25zdCBwPW5ldyBTZXQoWyJib2R5IiwiaHRtbCJdKTtjbGFzcyBYaHRtbE9iamVjdCBleHRlbmRzIG8uWG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoYyx0KTt0aGlzW2xdPSExO3RoaXMuc3R5bGU9ZS5zdHlsZXx8IiJ9W3IuJGNsZWFuXShlKXtzdXBlcltyLiRjbGVhbl0oZSk7dGhpcy5zdHlsZT1mdW5jdGlvbiBjaGVja1N0eWxlKGUpe3JldHVybiBlLnN0eWxlP2Uuc3R5bGUudHJpbSgpLnNwbGl0KC9ccyo7XHMqLykuZmlsdGVyKChlPT4hIWUpKS5tYXAoKGU9PmUuc3BsaXQoL1xzKjpccyovLDIpKSkuZmlsdGVyKCgoW3QsYV0pPT57ImZvbnQtZmFtaWx5Ij09PXQmJmVbci4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcy5hZGQoYSk7cmV0dXJuIGguaGFzKHQpfSkpLm1hcCgoZT0+ZS5qb2luKCI6IikpKS5qb2luKCI7Iik6IiJ9KHRoaXMpfVtyLiRhY2NlcHRXaGl0ZXNwYWNlXSgpe3JldHVybiFwLmhhcyh0aGlzW3IuJG5vZGVOYW1lXSl9W3IuJG9uVGV4dF0oZSx0PSExKXtpZih0KXRoaXNbbF09ITA7ZWxzZXtlPWUucmVwbGFjZUFsbChmLCIiKTt0aGlzLnN0eWxlLmluY2x1ZGVzKCJ4ZmEtc3BhY2VydW46eWVzIil8fChlPWUucmVwbGFjZUFsbChkLCIgIikpfWUmJih0aGlzW3IuJGNvbnRlbnRdKz1lKX1bci4kcHVzaEdseXBoc10oZSx0PSEwKXtjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCksbj17dG9wOk5hTixib3R0b206TmFOLGxlZnQ6TmFOLHJpZ2h0Ok5hTn07bGV0IGk9bnVsbDtmb3IoY29uc3RbZSx0XW9mIHRoaXMuc3R5bGUuc3BsaXQoIjsiKS5tYXAoKGU9PmUuc3BsaXQoIjoiLDIpKSkpc3dpdGNoKGUpe2Nhc2UiZm9udC1mYW1pbHkiOmEudHlwZWZhY2U9KDAscy5zdHJpcFF1b3RlcykodCk7YnJlYWs7Y2FzZSJmb250LXNpemUiOmEuc2l6ZT0oMCxzLmdldE1lYXN1cmVtZW50KSh0KTticmVhaztjYXNlImZvbnQtd2VpZ2h0IjphLndlaWdodD10O2JyZWFrO2Nhc2UiZm9udC1zdHlsZSI6YS5wb3N0dXJlPXQ7YnJlYWs7Y2FzZSJsZXR0ZXItc3BhY2luZyI6YS5sZXR0ZXJTcGFjaW5nPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKHQpO2JyZWFrO2Nhc2UibWFyZ2luIjpjb25zdCBlPXQuc3BsaXQoLyBcdC8pLm1hcCgoZT0+KDAscy5nZXRNZWFzdXJlbWVudCkoZSkpKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpuLnRvcD1uLmJvdHRvbT1uLmxlZnQ9bi5yaWdodD1lWzBdO2JyZWFrO2Nhc2UgMjpuLnRvcD1uLmJvdHRvbT1lWzBdO24ubGVmdD1uLnJpZ2h0PWVbMV07YnJlYWs7Y2FzZSAzOm4udG9wPWVbMF07bi5ib3R0b209ZVsyXTtuLmxlZnQ9bi5yaWdodD1lWzFdO2JyZWFrO2Nhc2UgNDpuLnRvcD1lWzBdO24ubGVmdD1lWzFdO24uYm90dG9tPWVbMl07bi5yaWdodD1lWzNdfWJyZWFrO2Nhc2UibWFyZ2luLXRvcCI6bi50b3A9KDAscy5nZXRNZWFzdXJlbWVudCkodCk7YnJlYWs7Y2FzZSJtYXJnaW4tYm90dG9tIjpuLmJvdHRvbT0oMCxzLmdldE1lYXN1cmVtZW50KSh0KTticmVhaztjYXNlIm1hcmdpbi1sZWZ0IjpuLmxlZnQ9KDAscy5nZXRNZWFzdXJlbWVudCkodCk7YnJlYWs7Y2FzZSJtYXJnaW4tcmlnaHQiOm4ucmlnaHQ9KDAscy5nZXRNZWFzdXJlbWVudCkodCk7YnJlYWs7Y2FzZSJsaW5lLWhlaWdodCI6aT0oMCxzLmdldE1lYXN1cmVtZW50KSh0KX1lLnB1c2hEYXRhKGEsbixpKTtpZih0aGlzW3IuJGNvbnRlbnRdKWUuYWRkU3RyaW5nKHRoaXNbci4kY29udGVudF0pO2Vsc2UgZm9yKGNvbnN0IHQgb2YgdGhpc1tyLiRnZXRDaGlsZHJlbl0oKSkiI3RleHQiIT09dFtyLiRub2RlTmFtZV0/dFtyLiRwdXNoR2x5cGhzXShlKTplLmFkZFN0cmluZyh0W3IuJGNvbnRlbnRdKTt0JiZlLnBvcEZvbnQoKX1bci4kdG9IVE1MXShlKXtjb25zdCB0PVtdO3RoaXNbci4kZXh0cmFdPXtjaGlsZHJlbjp0fTt0aGlzW3IuJGNoaWxkcmVuVG9IVE1MXSh7fSk7aWYoMD09PXQubGVuZ3RoJiYhdGhpc1tyLiRjb250ZW50XSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO2xldCBhO2E9dGhpc1tsXT90aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF0ucmVwbGFjZUFsbChnLCJcbiIpOnZvaWQgMDp0aGlzW3IuJGNvbnRlbnRdfHx2b2lkIDA7cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOnRoaXNbci4kbm9kZU5hbWVdLGF0dHJpYnV0ZXM6e2hyZWY6dGhpcy5ocmVmLHN0eWxlOm1hcFN0eWxlKHRoaXMuc3R5bGUsdGhpcyx0aGlzW2xdKX0sY2hpbGRyZW46dCx2YWx1ZTphfSl9fWNsYXNzIEEgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJhIik7dGhpcy5ocmVmPSgwLGkuZml4VVJMKShlLmhyZWYpfHwiIn19Y2xhc3MgQiBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImIiKX1bci4kcHVzaEdseXBoc10oZSl7ZS5wdXNoRm9udCh7d2VpZ2h0OiJib2xkIn0pO3N1cGVyW3IuJHB1c2hHbHlwaHNdKGUpO2UucG9wRm9udCgpfX1jbGFzcyBCb2R5IGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiYm9keSIpfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9c3VwZXJbci4kdG9IVE1MXShlKSx7aHRtbDphfT10O2lmKCFhKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7YS5uYW1lPSJkaXYiO2EuYXR0cmlidXRlcy5jbGFzcz1bInhmYVJpY2giXTtyZXR1cm4gdH19Y2xhc3MgQnIgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJiciIpfVtyLiR0ZXh0XSgpe3JldHVybiJcbiJ9W3IuJHB1c2hHbHlwaHNdKGUpe2UuYWRkU3RyaW5nKCJcbiIpfVtyLiR0b0hUTUxdKGUpe3JldHVybiBzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiYnIifSl9fWNsYXNzIEh0bWwgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJodG1sIil9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD1bXTt0aGlzW3IuJGV4dHJhXT17Y2hpbGRyZW46dH07dGhpc1tyLiRjaGlsZHJlblRvSFRNTF0oe30pO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LHZhbHVlOnRoaXNbci4kY29udGVudF18fCIifSk7aWYoMT09PXQubGVuZ3RoKXtjb25zdCBlPXRbMF07aWYoZS5hdHRyaWJ1dGVzPy5jbGFzcy5pbmNsdWRlcygieGZhUmljaCIpKXJldHVybiBzLkhUTUxSZXN1bHQuc3VjY2VzcyhlKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LGNoaWxkcmVuOnR9KX19Y2xhc3MgSSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImkiKX1bci4kcHVzaEdseXBoc10oZSl7ZS5wdXNoRm9udCh7cG9zdHVyZToiaXRhbGljIn0pO3N1cGVyW3IuJHB1c2hHbHlwaHNdKGUpO2UucG9wRm9udCgpfX1jbGFzcyBMaSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImxpIil9fWNsYXNzIE9sIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwib2wiKX19Y2xhc3MgUCBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInAiKX1bci4kcHVzaEdseXBoc10oZSl7c3VwZXJbci4kcHVzaEdseXBoc10oZSwhMSk7ZS5hZGRTdHJpbmcoIlxuIik7ZS5hZGRQYXJhKCk7ZS5wb3BGb250KCl9W3IuJHRleHRdKCl7cmV0dXJuIHRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldENoaWxkcmVuXSgpLmF0KC0xKT09PXRoaXM/c3VwZXJbci4kdGV4dF0oKTpzdXBlcltyLiR0ZXh0XSgpKyJcbiJ9fWNsYXNzIFNwYW4gZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJzcGFuIil9fWNsYXNzIFN1YiBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInN1YiIpfX1jbGFzcyBTdXAgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJzdXAiKX19Y2xhc3MgVWwgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJ1bCIpfX1jbGFzcyBYaHRtbE5hbWVzcGFjZXtzdGF0aWNbbi4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoWGh0bWxOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFhodG1sTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBhKGUpe3JldHVybiBuZXcgQShlKX1zdGF0aWMgYihlKXtyZXR1cm4gbmV3IEIoZSl9c3RhdGljIGJvZHkoZSl7cmV0dXJuIG5ldyBCb2R5KGUpfXN0YXRpYyBicihlKXtyZXR1cm4gbmV3IEJyKGUpfXN0YXRpYyBodG1sKGUpe3JldHVybiBuZXcgSHRtbChlKX1zdGF0aWMgaShlKXtyZXR1cm4gbmV3IEkoZSl9c3RhdGljIGxpKGUpe3JldHVybiBuZXcgTGkoZSl9c3RhdGljIG9sKGUpe3JldHVybiBuZXcgT2woZSl9c3RhdGljIHAoZSl7cmV0dXJuIG5ldyBQKGUpfXN0YXRpYyBzcGFuKGUpe3JldHVybiBuZXcgU3BhbihlKX1zdGF0aWMgc3ViKGUpe3JldHVybiBuZXcgU3ViKGUpfXN0YXRpYyBzdXAoZSl7cmV0dXJuIG5ldyBTdXAoZSl9c3RhdGljIHVsKGUpe3JldHVybiBuZXcgVWwoZSl9fXQuWGh0bWxOYW1lc3BhY2U9WGh0bWxOYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Vbmtub3duTmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDgxKSxuPWEoODcpO2NsYXNzIFVua25vd25OYW1lc3BhY2V7Y29uc3RydWN0b3IoZSl7dGhpcy5uYW1lc3BhY2VJZD1lfVtyLiRidWlsZFhGQU9iamVjdF0oZSx0KXtyZXR1cm4gbmV3IG4uWG1sT2JqZWN0KHRoaXMubmFtZXNwYWNlSWQsZSx0KX19dC5Vbmtub3duTmFtZXNwYWNlPVVua25vd25OYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5EYXRhc2V0UmVhZGVyPXZvaWQgMDt2YXIgcj1hKDIpLG49YSgzKSxpPWEoNzEpO2Z1bmN0aW9uIGRlY29kZVN0cmluZyhlKXt0cnl7cmV0dXJuKDAsci5zdHJpbmdUb1VURjhTdHJpbmcpKGUpfWNhdGNoKHQpeygwLHIud2FybikoYFVURi04IGRlY29kaW5nIGZhaWxlZDogIiR7dH0iLmApO3JldHVybiBlfX1jbGFzcyBEYXRhc2V0WE1MUGFyc2VyIGV4dGVuZHMgaS5TaW1wbGVYTUxQYXJzZXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5ub2RlPW51bGx9b25FbmRFbGVtZW50KGUpe2NvbnN0IHQ9c3VwZXIub25FbmRFbGVtZW50KGUpO2lmKHQmJiJ4ZmE6ZGF0YXNldHMiPT09ZSl7dGhpcy5ub2RlPXQ7dGhyb3cgbmV3IEVycm9yKCJBYm9ydGluZyBEYXRhc2V0WE1MUGFyc2VyLiIpfX19dC5EYXRhc2V0UmVhZGVyPWNsYXNzIERhdGFzZXRSZWFkZXJ7Y29uc3RydWN0b3IoZSl7aWYoZS5kYXRhc2V0cyl0aGlzLm5vZGU9bmV3IGkuU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUuZGF0YXNldHMpLmRvY3VtZW50RWxlbWVudDtlbHNle2NvbnN0IHQ9bmV3IERhdGFzZXRYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KTt0cnl7dC5wYXJzZUZyb21TdHJpbmcoZVsieGRwOnhkcCJdKX1jYXRjaHt9dGhpcy5ub2RlPXQubm9kZX19Z2V0VmFsdWUoZSl7aWYoIXRoaXMubm9kZXx8IWUpcmV0dXJuIiI7Y29uc3QgdD10aGlzLm5vZGUuc2VhcmNoTm9kZSgoMCxuLnBhcnNlWEZBUGF0aCkoZSksMCk7aWYoIXQpcmV0dXJuIiI7Y29uc3QgYT10LmZpcnN0Q2hpbGQ7cmV0dXJuInZhbHVlIj09PWE/Lm5vZGVOYW1lP3QuY2hpbGRyZW4ubWFwKChlPT5kZWNvZGVTdHJpbmcoZS50ZXh0Q29udGVudCkpKTpkZWNvZGVTdHJpbmcodC50ZXh0Q29udGVudCl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhSZWY9dm9pZCAwO3ZhciByPWEoMiksbj1hKDQpLGk9YSgxNikscz1hKDMpLG89YSg1KSxjPWEoNzQpO3QuWFJlZj1jbGFzcyBYUmVmeyNCPW51bGw7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnN0cmVhbT1lO3RoaXMucGRmTWFuYWdlcj10O3RoaXMuZW50cmllcz1bXTt0aGlzLl94cmVmU3Rtcz1uZXcgU2V0O3RoaXMuX2NhY2hlTWFwPW5ldyBNYXA7dGhpcy5fcGVuZGluZ1JlZnM9bmV3IG4uUmVmU2V0O3RoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW09bnVsbDt0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW09bnVsbH1nZXROZXdQZXJzaXN0ZW50UmVmKGUpe251bGw9PT10aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtJiYodGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bT10aGlzLmVudHJpZXMubGVuZ3RofHwxKTtjb25zdCB0PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0rKzt0aGlzLl9jYWNoZU1hcC5zZXQodCxlKTtyZXR1cm4gbi5SZWYuZ2V0KHQsMCl9Z2V0TmV3VGVtcG9yYXJ5UmVmKCl7bnVsbD09PXRoaXMuX25ld1RlbXBvcmFyeVJlZk51bSYmKHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bT10aGlzLmVudHJpZXMubGVuZ3RofHwxKTtyZXR1cm4gbi5SZWYuZ2V0KHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bSsrLDApfXJlc2V0TmV3VGVtcG9yYXJ5UmVmKCl7dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtPW51bGx9c2V0U3RhcnRYUmVmKGUpe3RoaXMuc3RhcnRYUmVmUXVldWU9W2VdfXBhcnNlKGU9ITEpe2xldCB0LGEsaTtpZihlKXsoMCxyLndhcm4pKCJJbmRleGluZyBhbGwgUERGIG9iamVjdHMiKTt0PXRoaXMuaW5kZXhPYmplY3RzKCl9ZWxzZSB0PXRoaXMucmVhZFhSZWYoKTt0LmFzc2lnblhyZWYodGhpcyk7dGhpcy50cmFpbGVyPXQ7dHJ5e2E9dC5nZXQoIkVuY3J5cHQiKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoYFhSZWYucGFyc2UgLSBJbnZhbGlkICJFbmNyeXB0IiByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZihhIGluc3RhbmNlb2Ygbi5EaWN0KXtjb25zdCBlPXQuZ2V0KCJJRCIpLHI9ZT8ubGVuZ3RoP2VbMF06IiI7YS5zdXBwcmVzc0VuY3J5cHRpb249ITA7dGhpcy5lbmNyeXB0PW5ldyBjLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkoYSxyLHRoaXMucGRmTWFuYWdlci5wYXNzd29yZCl9dHJ5e2k9dC5nZXQoIlJvb3QiKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoYFhSZWYucGFyc2UgLSBJbnZhbGlkICJSb290IiByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZihpIGluc3RhbmNlb2Ygbi5EaWN0KXRyeXtpZihpLmdldCgiUGFnZXMiKWluc3RhbmNlb2Ygbi5EaWN0KXt0aGlzLnJvb3Q9aTtyZXR1cm59fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci53YXJuKShgWFJlZi5wYXJzZSAtIEludmFsaWQgIlBhZ2VzIiByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZighZSl0aHJvdyBuZXcgcy5YUmVmUGFyc2VFeGNlcHRpb247dGhyb3cgbmV3IHIuSW52YWxpZFBERkV4Y2VwdGlvbigiSW52YWxpZCBSb290IHJlZmVyZW5jZS4iKX1wcm9jZXNzWFJlZlRhYmxlKGUpeyJ0YWJsZVN0YXRlImluIHRoaXN8fCh0aGlzLnRhYmxlU3RhdGU9e2VudHJ5TnVtOjAsc3RyZWFtUG9zOmUubGV4ZXIuc3RyZWFtLnBvcyxwYXJzZXJCdWYxOmUuYnVmMSxwYXJzZXJCdWYyOmUuYnVmMn0pO2NvbnN0IHQ9dGhpcy5yZWFkWFJlZlRhYmxlKGUpO2lmKCEoMCxuLmlzQ21kKSh0LCJ0cmFpbGVyIikpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IGZpbmQgdHJhaWxlciBkaWN0aW9uYXJ5Iik7bGV0IGE9ZS5nZXRPYmooKTthIGluc3RhbmNlb2Ygbi5EaWN0fHwhYS5kaWN0fHwoYT1hLmRpY3QpO2lmKCEoYSBpbnN0YW5jZW9mIG4uRGljdCkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IHBhcnNlIHRyYWlsZXIgZGljdGlvbmFyeSIpO2RlbGV0ZSB0aGlzLnRhYmxlU3RhdGU7cmV0dXJuIGF9cmVhZFhSZWZUYWJsZShlKXtjb25zdCB0PWUubGV4ZXIuc3RyZWFtLGE9dGhpcy50YWJsZVN0YXRlO3QucG9zPWEuc3RyZWFtUG9zO2UuYnVmMT1hLnBhcnNlckJ1ZjE7ZS5idWYyPWEucGFyc2VyQnVmMjtsZXQgaTtmb3IoOzspe2lmKCEoImZpcnN0RW50cnlOdW0iaW4gYSl8fCEoImVudHJ5Q291bnQiaW4gYSkpe2lmKCgwLG4uaXNDbWQpKGk9ZS5nZXRPYmooKSwidHJhaWxlciIpKWJyZWFrO2EuZmlyc3RFbnRyeU51bT1pO2EuZW50cnlDb3VudD1lLmdldE9iaigpfWxldCBzPWEuZmlyc3RFbnRyeU51bTtjb25zdCBvPWEuZW50cnlDb3VudDtpZighTnVtYmVyLmlzSW50ZWdlcihzKXx8IU51bWJlci5pc0ludGVnZXIobykpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogd3JvbmcgdHlwZXMgaW4gc3Vic2VjdGlvbiBoZWFkZXIiKTtmb3IobGV0IGk9YS5lbnRyeU51bTtpPG87aSsrKXthLnN0cmVhbVBvcz10LnBvczthLmVudHJ5TnVtPWk7YS5wYXJzZXJCdWYxPWUuYnVmMTthLnBhcnNlckJ1ZjI9ZS5idWYyO2NvbnN0IGM9e307Yy5vZmZzZXQ9ZS5nZXRPYmooKTtjLmdlbj1lLmdldE9iaigpO2NvbnN0IGw9ZS5nZXRPYmooKTtpZihsIGluc3RhbmNlb2Ygbi5DbWQpc3dpdGNoKGwuY21kKXtjYXNlImYiOmMuZnJlZT0hMDticmVhaztjYXNlIm4iOmMudW5jb21wcmVzc2VkPSEwfWlmKCFOdW1iZXIuaXNJbnRlZ2VyKGMub2Zmc2V0KXx8IU51bWJlci5pc0ludGVnZXIoYy5nZW4pfHwhYy5mcmVlJiYhYy51bmNvbXByZXNzZWQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgZW50cnkgaW4gWFJlZiBzdWJzZWN0aW9uOiAke3N9LCAke299YCk7MD09PWkmJmMuZnJlZSYmMT09PXMmJihzPTApO3RoaXMuZW50cmllc1tpK3NdfHwodGhpcy5lbnRyaWVzW2krc109Yyl9YS5lbnRyeU51bT0wO2Euc3RyZWFtUG9zPXQucG9zO2EucGFyc2VyQnVmMT1lLmJ1ZjE7YS5wYXJzZXJCdWYyPWUuYnVmMjtkZWxldGUgYS5maXJzdEVudHJ5TnVtO2RlbGV0ZSBhLmVudHJ5Q291bnR9aWYodGhpcy5lbnRyaWVzWzBdJiYhdGhpcy5lbnRyaWVzWzBdLmZyZWUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogdW5leHBlY3RlZCBmaXJzdCBvYmplY3QiKTtyZXR1cm4gaX1wcm9jZXNzWFJlZlN0cmVhbShlKXtpZighKCJzdHJlYW1TdGF0ZSJpbiB0aGlzKSl7Y29uc3QgdD1lLmRpY3QsYT10LmdldCgiVyIpO2xldCByPXQuZ2V0KCJJbmRleCIpO3J8fChyPVswLHQuZ2V0KCJTaXplIildKTt0aGlzLnN0cmVhbVN0YXRlPXtlbnRyeVJhbmdlczpyLGJ5dGVXaWR0aHM6YSxlbnRyeU51bTowLHN0cmVhbVBvczplLnBvc319dGhpcy5yZWFkWFJlZlN0cmVhbShlKTtkZWxldGUgdGhpcy5zdHJlYW1TdGF0ZTtyZXR1cm4gZS5kaWN0fXJlYWRYUmVmU3RyZWFtKGUpe2NvbnN0IHQ9dGhpcy5zdHJlYW1TdGF0ZTtlLnBvcz10LnN0cmVhbVBvcztjb25zdFthLG4saV09dC5ieXRlV2lkdGhzLHM9dC5lbnRyeVJhbmdlcztmb3IoO3MubGVuZ3RoPjA7KXtjb25zdFtvLGNdPXM7aWYoIU51bWJlci5pc0ludGVnZXIobyl8fCFOdW1iZXIuaXNJbnRlZ2VyKGMpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgcmFuZ2UgZmllbGRzOiAke299LCAke2N9YCk7aWYoIU51bWJlci5pc0ludGVnZXIoYSl8fCFOdW1iZXIuaXNJbnRlZ2VyKG4pfHwhTnVtYmVyLmlzSW50ZWdlcihpKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBYUmVmIGVudHJ5IGZpZWxkcyBsZW5ndGg6ICR7b30sICR7Y31gKTtmb3IobGV0IHM9dC5lbnRyeU51bTtzPGM7KytzKXt0LmVudHJ5TnVtPXM7dC5zdHJlYW1Qb3M9ZS5wb3M7bGV0IGM9MCxsPTAsaD0wO2ZvcihsZXQgdD0wO3Q8YTsrK3Qpe2NvbnN0IHQ9ZS5nZXRCeXRlKCk7aWYoLTE9PT10KXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAndHlwZScuIik7Yz1jPDw4fHR9MD09PWEmJihjPTEpO2ZvcihsZXQgdD0wO3Q8bjsrK3Qpe2NvbnN0IHQ9ZS5nZXRCeXRlKCk7aWYoLTE9PT10KXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnb2Zmc2V0Jy4iKTtsPWw8PDh8dH1mb3IobGV0IHQ9MDt0PGk7Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIGJ5dGVXaWR0aHMgJ2dlbmVyYXRpb24nLiIpO2g9aDw8OHx0fWNvbnN0IHU9e307dS5vZmZzZXQ9bDt1Lmdlbj1oO3N3aXRjaChjKXtjYXNlIDA6dS5mcmVlPSEwO2JyZWFrO2Nhc2UgMTp1LnVuY29tcHJlc3NlZD0hMDticmVhaztjYXNlIDI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBYUmVmIGVudHJ5IHR5cGU6ICR7Y31gKX10aGlzLmVudHJpZXNbbytzXXx8KHRoaXMuZW50cmllc1tvK3NdPXUpfXQuZW50cnlOdW09MDt0LnN0cmVhbVBvcz1lLnBvcztzLnNwbGljZSgwLDIpfX1pbmRleE9iamVjdHMoKXtmdW5jdGlvbiByZWFkVG9rZW4oZSx0KXtsZXQgYT0iIixyPWVbdF07Zm9yKDsxMCE9PXImJjEzIT09ciYmNjAhPT1yJiYhKCsrdD49ZS5sZW5ndGgpOyl7YSs9U3RyaW5nLmZyb21DaGFyQ29kZShyKTtyPWVbdF19cmV0dXJuIGF9ZnVuY3Rpb24gc2tpcFVudGlsKGUsdCxhKXtjb25zdCByPWEubGVuZ3RoLG49ZS5sZW5ndGg7bGV0IGk9MDtmb3IoO3Q8bjspe2xldCBuPTA7Zm9yKDtuPHImJmVbdCtuXT09PWFbbl07KSsrbjtpZihuPj1yKWJyZWFrO3QrKztpKyt9cmV0dXJuIGl9Y29uc3QgZT0vXGIoZW5kb2JqfFxkK1xzK1xkK1xzK29ianx4cmVmfHRyYWlsZXJccyo8PClcYi9nLHQ9L1xiKHN0YXJ0eHJlZnxcZCtccytcZCtccytvYmopXGIvZyxhPS9eKFxkKylccysoXGQrKVxzK29ialxiLyxvPW5ldyBVaW50OEFycmF5KFsxMTYsMTE0LDk3LDEwNSwxMDgsMTAxLDExNF0pLGM9bmV3IFVpbnQ4QXJyYXkoWzExNSwxMTYsOTcsMTE0LDExNiwxMjAsMTE0LDEwMSwxMDJdKSxsPW5ldyBVaW50OEFycmF5KFs0Nyw4OCw4MiwxMDEsMTAyXSk7dGhpcy5lbnRyaWVzLmxlbmd0aD0wO3RoaXMuX2NhY2hlTWFwLmNsZWFyKCk7Y29uc3QgaD10aGlzLnN0cmVhbTtoLnBvcz0wO2NvbnN0IHU9aC5nZXRCeXRlcygpLGQ9KDAsci5ieXRlc1RvU3RyaW5nKSh1KSxmPXUubGVuZ3RoO2xldCBnPWguc3RhcnQ7Y29uc3QgcD1bXSxtPVtdO2Zvcig7ZzxmOyl7bGV0IG49dVtnXTtpZig5PT09bnx8MTA9PT1ufHwxMz09PW58fDMyPT09bil7KytnO2NvbnRpbnVlfWlmKDM3PT09bil7ZG97KytnO2lmKGc+PWYpYnJlYWs7bj11W2ddfXdoaWxlKDEwIT09biYmMTMhPT1uKTtjb250aW51ZX1jb25zdCBiPXJlYWRUb2tlbih1LGcpO2xldCB5O2lmKGIuc3RhcnRzV2l0aCgieHJlZiIpJiYoND09PWIubGVuZ3RofHwvXHMvLnRlc3QoYls0XSkpKXtnKz1za2lwVW50aWwodSxnLG8pO3AucHVzaChnKTtnKz1za2lwVW50aWwodSxnLGMpfWVsc2UgaWYoeT1hLmV4ZWMoYikpe2NvbnN0IHQ9MHx5WzFdLGE9MHx5WzJdLG49ZytiLmxlbmd0aDtsZXQgbyxjPSExO2lmKHRoaXMuZW50cmllc1t0XSl7aWYodGhpcy5lbnRyaWVzW3RdLmdlbj09PWEpdHJ5e25ldyBpLlBhcnNlcih7bGV4ZXI6bmV3IGkuTGV4ZXIoaC5tYWtlU3ViU3RyZWFtKG4pKX0pLmdldE9iaigpO2M9ITB9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIHMuUGFyc2VyRU9GRXhjZXB0aW9uPygwLHIud2FybikoYGluZGV4T2JqZWN0cyAtLSBjaGVja2luZyBvYmplY3QgKCR7Yn0pOiAiJHtlfSIuYCk6Yz0hMH19ZWxzZSBjPSEwO2MmJih0aGlzLmVudHJpZXNbdF09e29mZnNldDpnLWguc3RhcnQsZ2VuOmEsdW5jb21wcmVzc2VkOiEwfSk7ZS5sYXN0SW5kZXg9bjtjb25zdCBwPWUuZXhlYyhkKTtpZihwKXtvPWUubGFzdEluZGV4KzEtZztpZigiZW5kb2JqIiE9PXBbMV0peygwLHIud2FybikoYGluZGV4T2JqZWN0czogRm91bmQgIiR7cFsxXX0iIGluc2lkZSBvZiBhbm90aGVyICJvYmoiLCBjYXVzZWQgYnkgbWlzc2luZyAiZW5kb2JqIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci5gKTtvLT1wWzFdLmxlbmd0aCsxfX1lbHNlIG89Zi1nO2NvbnN0IHc9dS5zdWJhcnJheShnLGcrbyksUz1za2lwVW50aWwodywwLGwpO2lmKFM8byYmd1tTKzVdPDY0KXttLnB1c2goZy1oLnN0YXJ0KTt0aGlzLl94cmVmU3Rtcy5hZGQoZy1oLnN0YXJ0KX1nKz1vfWVsc2UgaWYoYi5zdGFydHNXaXRoKCJ0cmFpbGVyIikmJig3PT09Yi5sZW5ndGh8fC9ccy8udGVzdChiWzddKSkpe3AucHVzaChnKTtjb25zdCBlPWcrYi5sZW5ndGg7bGV0IGE7dC5sYXN0SW5kZXg9ZTtjb25zdCBuPXQuZXhlYyhkKTtpZihuKXthPXQubGFzdEluZGV4KzEtZztpZigic3RhcnR4cmVmIiE9PW5bMV0peygwLHIud2FybikoYGluZGV4T2JqZWN0czogRm91bmQgIiR7blsxXX0iIGFmdGVyICJ0cmFpbGVyIiwgY2F1c2VkIGJ5IG1pc3NpbmcgInN0YXJ0eHJlZiIgLS0gdHJ5aW5nIHRvIHJlY292ZXIuYCk7YS09blsxXS5sZW5ndGgrMX19ZWxzZSBhPWYtZztnKz1hfWVsc2UgZys9Yi5sZW5ndGgrMX1mb3IoY29uc3QgZSBvZiBtKXt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goZSk7dGhpcy5yZWFkWFJlZighMCl9Y29uc3QgYj1bXTtsZXQgeSx3LFM9ITE7Zm9yKGNvbnN0IGUgb2YgcCl7aC5wb3M9ZTtjb25zdCB0PW5ldyBpLlBhcnNlcih7bGV4ZXI6bmV3IGkuTGV4ZXIoaCkseHJlZjp0aGlzLGFsbG93U3RyZWFtczohMCxyZWNvdmVyeU1vZGU6ITB9KSxhPXQuZ2V0T2JqKCk7aWYoISgwLG4uaXNDbWQpKGEsInRyYWlsZXIiKSljb250aW51ZTtjb25zdCByPXQuZ2V0T2JqKCk7aWYociBpbnN0YW5jZW9mIG4uRGljdCl7Yi5wdXNoKHIpO3IuaGFzKCJFbmNyeXB0IikmJihTPSEwKX19Zm9yKGNvbnN0IGUgb2ZbLi4uYiwiZ2VuRmFsbGJhY2siLC4uLmJdKXtpZigiZ2VuRmFsbGJhY2siPT09ZSl7aWYoIXcpYnJlYWs7dGhpcy5fZ2VuZXJhdGlvbkZhbGxiYWNrPSEwO2NvbnRpbnVlfWxldCB0PSExO3RyeXtjb25zdCBhPWUuZ2V0KCJSb290Iik7aWYoIShhIGluc3RhbmNlb2Ygbi5EaWN0KSljb250aW51ZTtjb25zdCByPWEuZ2V0KCJQYWdlcyIpO2lmKCEociBpbnN0YW5jZW9mIG4uRGljdCkpY29udGludWU7Y29uc3QgaT1yLmdldCgiQ291bnQiKTtOdW1iZXIuaXNJbnRlZ2VyKGkpJiYodD0hMCl9Y2F0Y2goZSl7dz1lO2NvbnRpbnVlfWlmKHQmJighU3x8ZS5oYXMoIkVuY3J5cHQiKSkmJmUuaGFzKCJJRCIpKXJldHVybiBlO3k9ZX1pZih5KXJldHVybiB5O2lmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O3Rocm93IG5ldyByLkludmFsaWRQREZFeGNlcHRpb24oIkludmFsaWQgUERGIHN0cnVjdHVyZS4iKX1yZWFkWFJlZihlPSExKXtjb25zdCB0PXRoaXMuc3RyZWFtLGE9bmV3IFNldDtmb3IoO3RoaXMuc3RhcnRYUmVmUXVldWUubGVuZ3RoOyl7dHJ5e2NvbnN0IGU9dGhpcy5zdGFydFhSZWZRdWV1ZVswXTtpZihhLmhhcyhlKSl7KDAsci53YXJuKSgicmVhZFhSZWYgLSBza2lwcGluZyBYUmVmIHRhYmxlIHNpbmNlIGl0IHdhcyBhbHJlYWR5IHBhcnNlZC4iKTt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnNoaWZ0KCk7Y29udGludWV9YS5hZGQoZSk7dC5wb3M9ZSt0LnN0YXJ0O2NvbnN0IHM9bmV3IGkuUGFyc2VyKHtsZXhlcjpuZXcgaS5MZXhlcih0KSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSk7bGV0IGMsbD1zLmdldE9iaigpO2lmKCgwLG4uaXNDbWQpKGwsInhyZWYiKSl7Yz10aGlzLnByb2Nlc3NYUmVmVGFibGUocyk7dGhpcy50b3BEaWN0fHwodGhpcy50b3BEaWN0PWMpO2w9Yy5nZXQoIlhSZWZTdG0iKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGwpJiYhdGhpcy5feHJlZlN0bXMuaGFzKGwpKXt0aGlzLl94cmVmU3Rtcy5hZGQobCk7dGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKGwpO3RoaXMuI0I/Pz1sfX1lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIGhlYWRlciIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcihzLmdldE9iaigpKSYmKDAsbi5pc0NtZCkocy5nZXRPYmooKSwib2JqIikmJihsPXMuZ2V0T2JqKCkpaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7Yz10aGlzLnByb2Nlc3NYUmVmU3RyZWFtKGwpO3RoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1jKTtpZighYyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW0iKX1sPWMuZ2V0KCJQcmV2Iik7TnVtYmVyLmlzSW50ZWdlcihsKT90aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobCk6bCBpbnN0YW5jZW9mIG4uUmVmJiZ0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobC5udW0pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci5pbmZvKSgiKHdoaWxlIHJlYWRpbmcgWFJlZik6ICIrZSl9dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpfWlmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O2lmKCFlKXRocm93IG5ldyBzLlhSZWZQYXJzZUV4Y2VwdGlvbn1nZXQgbGFzdFhSZWZTdHJlYW1Qb3MoKXtyZXR1cm4gdGhpcy4jQj8/KHRoaXMuX3hyZWZTdG1zLnNpemU+MD9NYXRoLm1heCguLi50aGlzLl94cmVmU3Rtcyk6bnVsbCl9Z2V0RW50cnkoZSl7Y29uc3QgdD10aGlzLmVudHJpZXNbZV07cmV0dXJuIHQmJiF0LmZyZWUmJnQub2Zmc2V0P3Q6bnVsbH1mZXRjaElmUmVmKGUsdD0hMSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBuLlJlZj90aGlzLmZldGNoKGUsdCk6ZX1mZXRjaChlLHQ9ITEpe2lmKCEoZSBpbnN0YW5jZW9mIG4uUmVmKSl0aHJvdyBuZXcgRXJyb3IoInJlZiBvYmplY3QgaXMgbm90IGEgcmVmZXJlbmNlIik7Y29uc3QgYT1lLm51bSxpPXRoaXMuX2NhY2hlTWFwLmdldChhKTtpZih2b2lkIDAhPT1pKXtpIGluc3RhbmNlb2Ygbi5EaWN0JiYhaS5vYmpJZCYmKGkub2JqSWQ9ZS50b1N0cmluZygpKTtyZXR1cm4gaX1sZXQgcz10aGlzLmdldEVudHJ5KGEpO2lmKG51bGw9PT1zKXt0aGlzLl9jYWNoZU1hcC5zZXQoYSxzKTtyZXR1cm4gc31pZih0aGlzLl9wZW5kaW5nUmVmcy5oYXMoZSkpe3RoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShlKTsoMCxyLndhcm4pKGBJZ25vcmluZyBjaXJjdWxhciByZWZlcmVuY2U6ICR7ZX0uYCk7cmV0dXJuIG4uQ0lSQ1VMQVJfUkVGfXRoaXMuX3BlbmRpbmdSZWZzLnB1dChlKTt0cnl7cz1zLnVuY29tcHJlc3NlZD90aGlzLmZldGNoVW5jb21wcmVzc2VkKGUscyx0KTp0aGlzLmZldGNoQ29tcHJlc3NlZChlLHMsdCk7dGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKGUpfWNhdGNoKHQpe3RoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShlKTt0aHJvdyB0fXMgaW5zdGFuY2VvZiBuLkRpY3Q/cy5vYmpJZD1lLnRvU3RyaW5nKCk6cyBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSYmKHMuZGljdC5vYmpJZD1lLnRvU3RyaW5nKCkpO3JldHVybiBzfWZldGNoVW5jb21wcmVzc2VkKGUsdCxhPSExKXtjb25zdCBjPWUuZ2VuO2xldCBsPWUubnVtO2lmKHQuZ2VuIT09Yyl7Y29uc3QgaT1gSW5jb25zaXN0ZW50IGdlbmVyYXRpb24gaW4gWFJlZjogJHtlfWA7aWYodGhpcy5fZ2VuZXJhdGlvbkZhbGxiYWNrJiZ0LmdlbjxjKXsoMCxyLndhcm4pKGkpO3JldHVybiB0aGlzLmZldGNoVW5jb21wcmVzc2VkKG4uUmVmLmdldChsLHQuZ2VuKSx0LGEpfXRocm93IG5ldyBzLlhSZWZFbnRyeUV4Y2VwdGlvbihpKX1jb25zdCBoPXRoaXMuc3RyZWFtLm1ha2VTdWJTdHJlYW0odC5vZmZzZXQrdGhpcy5zdHJlYW0uc3RhcnQpLHU9bmV3IGkuUGFyc2VyKHtsZXhlcjpuZXcgaS5MZXhlcihoKSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSksZD11LmdldE9iaigpLGY9dS5nZXRPYmooKSxnPXUuZ2V0T2JqKCk7aWYoZCE9PWx8fGYhPT1jfHwhKGcgaW5zdGFuY2VvZiBuLkNtZCkpdGhyb3cgbmV3IHMuWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtlfWApO2lmKCJvYmoiIT09Zy5jbWQpe2lmKGcuY21kLnN0YXJ0c1dpdGgoIm9iaiIpKXtsPXBhcnNlSW50KGcuY21kLnN1YnN0cmluZygzKSwxMCk7aWYoIU51bWJlci5pc05hTihsKSlyZXR1cm4gbH10aHJvdyBuZXcgcy5YUmVmRW50cnlFeGNlcHRpb24oYEJhZCAodW5jb21wcmVzc2VkKSBYUmVmIGVudHJ5OiAke2V9YCl9KHQ9dGhpcy5lbmNyeXB0JiYhYT91LmdldE9iaih0aGlzLmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGwsYykpOnUuZ2V0T2JqKCkpaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW18fHRoaXMuX2NhY2hlTWFwLnNldChsLHQpO3JldHVybiB0fWZldGNoQ29tcHJlc3NlZChlLHQsYT0hMSl7Y29uc3QgYz10Lm9mZnNldCxsPXRoaXMuZmV0Y2gobi5SZWYuZ2V0KGMsMCkpO2lmKCEobCBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoImJhZCBPYmpTdG0gc3RyZWFtIik7Y29uc3QgaD1sLmRpY3QuZ2V0KCJGaXJzdCIpLHU9bC5kaWN0LmdldCgiTiIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGgpfHwhTnVtYmVyLmlzSW50ZWdlcih1KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiaW52YWxpZCBmaXJzdCBhbmQgbiBwYXJhbWV0ZXJzIGZvciBPYmpTdG0gc3RyZWFtIik7bGV0IGQ9bmV3IGkuUGFyc2VyKHtsZXhlcjpuZXcgaS5MZXhlcihsKSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSk7Y29uc3QgZj1uZXcgQXJyYXkodSksZz1uZXcgQXJyYXkodSk7Zm9yKGxldCBlPTA7ZTx1OysrZSl7Y29uc3QgdD1kLmdldE9iaigpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHQpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBpbnZhbGlkIG9iamVjdCBudW1iZXIgaW4gdGhlIE9ialN0bSBzdHJlYW06ICR7dH1gKTtjb25zdCBhPWQuZ2V0T2JqKCk7aWYoIU51bWJlci5pc0ludGVnZXIoYSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYGludmFsaWQgb2JqZWN0IG9mZnNldCBpbiB0aGUgT2JqU3RtIHN0cmVhbTogJHthfWApO2ZbZV09dDtnW2VdPWF9Y29uc3QgcD0obC5zdGFydHx8MCkraCxtPW5ldyBBcnJheSh1KTtmb3IobGV0IGU9MDtlPHU7KytlKXtjb25zdCB0PWU8dS0xP2dbZSsxXS1nW2VdOnZvaWQgMDtpZih0PDApdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtLiIpO2Q9bmV3IGkuUGFyc2VyKHtsZXhlcjpuZXcgaS5MZXhlcihsLm1ha2VTdWJTdHJlYW0ocCtnW2VdLHQsbC5kaWN0KSkseHJlZjp0aGlzLGFsbG93U3RyZWFtczohMH0pO2NvbnN0IGE9ZC5nZXRPYmooKTttW2VdPWE7aWYoYSBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSljb250aW51ZTtjb25zdCBuPWZbZV0scz10aGlzLmVudHJpZXNbbl07cyYmcy5vZmZzZXQ9PT1jJiZzLmdlbj09PWUmJnRoaXMuX2NhY2hlTWFwLnNldChuLGEpfWlmKHZvaWQgMD09PSh0PW1bdC5nZW5dKSl0aHJvdyBuZXcgcy5YUmVmRW50cnlFeGNlcHRpb24oYEJhZCAoY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtlfWApO3JldHVybiB0fWFzeW5jIGZldGNoSWZSZWZBc3luYyhlLHQpe3JldHVybiBlIGluc3RhbmNlb2Ygbi5SZWY/dGhpcy5mZXRjaEFzeW5jKGUsdCk6ZX1hc3luYyBmZXRjaEFzeW5jKGUsdCl7dHJ5e3JldHVybiB0aGlzLmZldGNoKGUsdCl9Y2F0Y2goYSl7aWYoIShhIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpdGhyb3cgYTthd2FpdCB0aGlzLnBkZk1hbmFnZXIucmVxdWVzdFJhbmdlKGEuYmVnaW4sYS5lbmQpO3JldHVybiB0aGlzLmZldGNoQXN5bmMoZSx0KX19Z2V0Q2F0YWxvZ09iaigpe3JldHVybiB0aGlzLnJvb3R9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk1lc3NhZ2VIYW5kbGVyPXZvaWQgMDt2YXIgcj1hKDIpO2NvbnN0IG49MSxpPTIscz0xLG89MixjPTMsbD00LGg9NSx1PTYsZD03LGY9ODtmdW5jdGlvbiB3cmFwUmVhc29uKGUpe2UgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZXx8KDAsci51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyk7c3dpdGNoKGUubmFtZSl7Y2FzZSJBYm9ydEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyByLkFib3J0RXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJNaXNzaW5nUERGRXhjZXB0aW9uIjpyZXR1cm4gbmV3IHIuTWlzc2luZ1BERkV4Y2VwdGlvbihlLm1lc3NhZ2UpO2Nhc2UiUGFzc3dvcmRFeGNlcHRpb24iOnJldHVybiBuZXcgci5QYXNzd29yZEV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5jb2RlKTtjYXNlIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiI6cmV0dXJuIG5ldyByLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5zdGF0dXMpO2Nhc2UiVW5rbm93bkVycm9yRXhjZXB0aW9uIjpyZXR1cm4gbmV3IHIuVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLmRldGFpbHMpO2RlZmF1bHQ6cmV0dXJuIG5ldyByLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKX19dC5NZXNzYWdlSGFuZGxlcj1jbGFzcyBNZXNzYWdlSGFuZGxlcntjb25zdHJ1Y3RvcihlLHQsYSl7dGhpcy5zb3VyY2VOYW1lPWU7dGhpcy50YXJnZXROYW1lPXQ7dGhpcy5jb21PYmo9YTt0aGlzLmNhbGxiYWNrSWQ9MTt0aGlzLnN0cmVhbUlkPTE7dGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZT0+e2NvbnN0IHQ9ZS5kYXRhO2lmKHQudGFyZ2V0TmFtZSE9PXRoaXMuc291cmNlTmFtZSlyZXR1cm47aWYodC5zdHJlYW0pe3RoaXMuI0UodCk7cmV0dXJufWlmKHQuY2FsbGJhY2spe2NvbnN0IGU9dC5jYWxsYmFja0lkLGE9dGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tlXTtpZighYSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGNhbGxiYWNrICR7ZX1gKTtkZWxldGUgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tlXTtpZih0LmNhbGxiYWNrPT09bilhLnJlc29sdmUodC5kYXRhKTtlbHNle2lmKHQuY2FsbGJhY2shPT1pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBjYWxsYmFjayBjYXNlIik7YS5yZWplY3Qod3JhcFJlYXNvbih0LnJlYXNvbikpfXJldHVybn1jb25zdCByPXRoaXMuYWN0aW9uSGFuZGxlclt0LmFjdGlvbl07aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogJHt0LmFjdGlvbn1gKTtpZih0LmNhbGxiYWNrSWQpe2NvbnN0IGU9dGhpcy5zb3VyY2VOYW1lLHM9dC5zb3VyY2VOYW1lO25ldyBQcm9taXNlKChmdW5jdGlvbihlKXtlKHIodC5kYXRhKSl9KSkudGhlbigoZnVuY3Rpb24ocil7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTplLHRhcmdldE5hbWU6cyxjYWxsYmFjazpuLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLGRhdGE6cn0pfSksKGZ1bmN0aW9uKHIpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6ZSx0YXJnZXROYW1lOnMsY2FsbGJhY2s6aSxjYWxsYmFja0lkOnQuY2FsbGJhY2tJZCxyZWFzb246d3JhcFJlYXNvbihyKX0pfSkpfWVsc2UgdC5zdHJlYW1JZD90aGlzLiNOKHQpOnIodC5kYXRhKX07YS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9b24oZSx0KXtjb25zdCBhPXRoaXMuYWN0aW9uSGFuZGxlcjtpZihhW2VdKXRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgYWxyZWFkeSBhbiBhY3Rpb25OYW1lIGNhbGxlZCAiJHtlfSJgKTthW2VdPXR9c2VuZChlLHQsYSl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGRhdGE6dH0sYSl9c2VuZFdpdGhQcm9taXNlKGUsdCxhKXtjb25zdCBuPXRoaXMuY2FsbGJhY2tJZCsrLGk9bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHk7dGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tuXT1pO3RyeXt0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTp0aGlzLnNvdXJjZU5hbWUsdGFyZ2V0TmFtZTp0aGlzLnRhcmdldE5hbWUsYWN0aW9uOmUsY2FsbGJhY2tJZDpuLGRhdGE6dH0sYSl9Y2F0Y2goZSl7aS5yZWplY3QoZSl9cmV0dXJuIGkucHJvbWlzZX1zZW5kV2l0aFN0cmVhbShlLHQsYSxuKXtjb25zdCBpPXRoaXMuc3RyZWFtSWQrKyxvPXRoaXMuc291cmNlTmFtZSxjPXRoaXMudGFyZ2V0TmFtZSxsPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmE9Pntjb25zdCBzPW5ldyByLlByb21pc2VDYXBhYmlsaXR5O3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbaV09e2NvbnRyb2xsZXI6YSxzdGFydENhbGw6cyxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX07bC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpvLHRhcmdldE5hbWU6YyxhY3Rpb246ZSxzdHJlYW1JZDppLGRhdGE6dCxkZXNpcmVkU2l6ZTphLmRlc2lyZWRTaXplfSxuKTtyZXR1cm4gcy5wcm9taXNlfSxwdWxsOmU9Pntjb25zdCB0PW5ldyByLlByb21pc2VDYXBhYmlsaXR5O3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbaV0ucHVsbENhbGw9dDtsLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOm8sdGFyZ2V0TmFtZTpjLHN0cmVhbTp1LHN0cmVhbUlkOmksZGVzaXJlZFNpemU6ZS5kZXNpcmVkU2l6ZX0pO3JldHVybiB0LnByb21pc2V9LGNhbmNlbDplPT57KDAsci5hc3NlcnQpKGUgaW5zdGFuY2VvZiBFcnJvciwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO2NvbnN0IHQ9bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHk7dGhpcy5zdHJlYW1Db250cm9sbGVyc1tpXS5jYW5jZWxDYWxsPXQ7dGhpcy5zdHJlYW1Db250cm9sbGVyc1tpXS5pc0Nsb3NlZD0hMDtsLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOm8sdGFyZ2V0TmFtZTpjLHN0cmVhbTpzLHN0cmVhbUlkOmkscmVhc29uOndyYXBSZWFzb24oZSl9KTtyZXR1cm4gdC5wcm9taXNlfX0sYSl9I04oZSl7Y29uc3QgdD1lLnN0cmVhbUlkLGE9dGhpcy5zb3VyY2VOYW1lLG49ZS5zb3VyY2VOYW1lLGk9dGhpcy5jb21PYmoscz10aGlzLG89dGhpcy5hY3Rpb25IYW5kbGVyW2UuYWN0aW9uXSx1PXtlbnF1ZXVlKGUscz0xLG8pe2lmKHRoaXMuaXNDYW5jZWxsZWQpcmV0dXJuO2NvbnN0IGM9dGhpcy5kZXNpcmVkU2l6ZTt0aGlzLmRlc2lyZWRTaXplLT1zO2lmKGM+MCYmdGhpcy5kZXNpcmVkU2l6ZTw9MCl7dGhpcy5zaW5rQ2FwYWJpbGl0eT1uZXcgci5Qcm9taXNlQ2FwYWJpbGl0eTt0aGlzLnJlYWR5PXRoaXMuc2lua0NhcGFiaWxpdHkucHJvbWlzZX1pLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpsLHN0cmVhbUlkOnQsY2h1bms6ZX0sbyl9LGNsb3NlKCl7aWYoIXRoaXMuaXNDYW5jZWxsZWQpe3RoaXMuaXNDYW5jZWxsZWQ9ITA7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6bixzdHJlYW06YyxzdHJlYW1JZDp0fSk7ZGVsZXRlIHMuc3RyZWFtU2lua3NbdF19fSxlcnJvcihlKXsoMCxyLmFzc2VydCkoZSBpbnN0YW5jZW9mIEVycm9yLCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb24iKTtpZighdGhpcy5pc0NhbmNlbGxlZCl7dGhpcy5pc0NhbmNlbGxlZD0hMDtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpoLHN0cmVhbUlkOnQscmVhc29uOndyYXBSZWFzb24oZSl9KX19LHNpbmtDYXBhYmlsaXR5Om5ldyByLlByb21pc2VDYXBhYmlsaXR5LG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6ZS5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTt1LnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTt1LnJlYWR5PXUuc2lua0NhcGFiaWxpdHkucHJvbWlzZTt0aGlzLnN0cmVhbVNpbmtzW3RdPXU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QobyhlLmRhdGEsdSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6bixzdHJlYW06ZixzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpmLHN0cmVhbUlkOnQscmVhc29uOndyYXBSZWFzb24oZSl9KX0pKX0jRShlKXtjb25zdCB0PWUuc3RyZWFtSWQsYT10aGlzLnNvdXJjZU5hbWUsbj1lLnNvdXJjZU5hbWUsaT10aGlzLmNvbU9iaixnPXRoaXMuc3RyZWFtQ29udHJvbGxlcnNbdF0scD10aGlzLnN0cmVhbVNpbmtzW3RdO3N3aXRjaChlLnN0cmVhbSl7Y2FzZSBmOmUuc3VjY2Vzcz9nLnN0YXJ0Q2FsbC5yZXNvbHZlKCk6Zy5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTticmVhaztjYXNlIGQ6ZS5zdWNjZXNzP2cucHVsbENhbGwucmVzb2x2ZSgpOmcucHVsbENhbGwucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTticmVhaztjYXNlIHU6aWYoIXApe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOm4sc3RyZWFtOmQsc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSk7YnJlYWt9cC5kZXNpcmVkU2l6ZTw9MCYmZS5kZXNpcmVkU2l6ZT4wJiZwLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtwLmRlc2lyZWRTaXplPWUuZGVzaXJlZFNpemU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2UocC5vblB1bGw/LigpKX0pKS50aGVuKChmdW5jdGlvbigpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOm4sc3RyZWFtOmQsc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6bixzdHJlYW06ZCxzdHJlYW1JZDp0LHJlYXNvbjp3cmFwUmVhc29uKGUpfSl9KSk7YnJlYWs7Y2FzZSBsOigwLHIuYXNzZXJ0KShnLCJlbnF1ZXVlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyIik7aWYoZy5pc0Nsb3NlZClicmVhaztnLmNvbnRyb2xsZXIuZW5xdWV1ZShlLmNodW5rKTticmVhaztjYXNlIGM6KDAsci5hc3NlcnQpKGcsImNsb3NlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyIik7aWYoZy5pc0Nsb3NlZClicmVhaztnLmlzQ2xvc2VkPSEwO2cuY29udHJvbGxlci5jbG9zZSgpO3RoaXMuI1IoZyx0KTticmVhaztjYXNlIGg6KDAsci5hc3NlcnQpKGcsImVycm9yIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyIik7Zy5jb250cm9sbGVyLmVycm9yKHdyYXBSZWFzb24oZS5yZWFzb24pKTt0aGlzLiNSKGcsdCk7YnJlYWs7Y2FzZSBvOmUuc3VjY2Vzcz9nLmNhbmNlbENhbGwucmVzb2x2ZSgpOmcuY2FuY2VsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihlLnJlYXNvbikpO3RoaXMuI1IoZyx0KTticmVhaztjYXNlIHM6aWYoIXApYnJlYWs7bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QocC5vbkNhbmNlbD8uKHdyYXBSZWFzb24oZS5yZWFzb24pKSl9KSkudGhlbigoZnVuY3Rpb24oKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpvLHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOm4sc3RyZWFtOm8sc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfSkpO3Auc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTtwLmlzQ2FuY2VsbGVkPSEwO2RlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW3RdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHN0cmVhbSBjYXNlIil9fWFzeW5jI1IoZSx0KXthd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW2Uuc3RhcnRDYWxsPy5wcm9taXNlLGUucHVsbENhbGw/LnByb21pc2UsZS5jYW5jZWxDYWxsPy5wcm9taXNlXSk7ZGVsZXRlIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbdF19ZGVzdHJveSgpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUERGV29ya2VyU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDIpO3QuUERGV29ya2VyU3RyZWFtPWNsYXNzIFBERldvcmtlclN0cmVhbXtjb25zdHJ1Y3RvcihlKXt0aGlzLl9tc2dIYW5kbGVyPWU7dGhpcy5fY29udGVudExlbmd0aD1udWxsO3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW51bGw7dGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycz1bXX1nZXRGdWxsUmVhZGVyKCl7KDAsci5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGV29ya2VyU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIik7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bmV3IFBERldvcmtlclN0cmVhbVJlYWRlcih0aGlzLl9tc2dIYW5kbGVyKTtyZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXJ9Z2V0UmFuZ2VSZWFkZXIoZSx0KXtjb25zdCBhPW5ldyBQREZXb3JrZXJTdHJlYW1SYW5nZVJlYWRlcihlLHQsdGhpcy5fbXNnSGFuZGxlcik7dGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKGEpO3JldHVybiBhfWNhbmNlbEFsbFJlcXVlc3RzKGUpe3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPy5jYW5jZWwoZSk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zbGljZSgwKSl0LmNhbmNlbChlKX19O2NsYXNzIFBERldvcmtlclN0cmVhbVJlYWRlcntjb25zdHJ1Y3RvcihlKXt0aGlzLl9tc2dIYW5kbGVyPWU7dGhpcy5vblByb2dyZXNzPW51bGw7dGhpcy5fY29udGVudExlbmd0aD1udWxsO3RoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9ITE7dGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9ITE7Y29uc3QgdD10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRSZWFkZXIiKTt0aGlzLl9yZWFkZXI9dC5nZXRSZWFkZXIoKTt0aGlzLl9oZWFkZXJzUmVhZHk9dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIlJlYWRlckhlYWRlcnNSZWFkeSIpLnRoZW4oKGU9Pnt0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD1lLmlzU3RyZWFtaW5nU3VwcG9ydGVkO3RoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9ZS5pc1JhbmdlU3VwcG9ydGVkO3RoaXMuX2NvbnRlbnRMZW5ndGg9ZS5jb250ZW50TGVuZ3RofSkpfWdldCBoZWFkZXJzUmVhZHkoKXtyZXR1cm4gdGhpcy5faGVhZGVyc1JlYWR5fWdldCBjb250ZW50TGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGh9Z2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfWdldCBpc1JhbmdlU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9YXN5bmMgcmVhZCgpe2NvbnN0e3ZhbHVlOmUsZG9uZTp0fT1hd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO3JldHVybiB0P3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06e3ZhbHVlOmUuYnVmZmVyLGRvbmU6ITF9fWNhbmNlbChlKXt0aGlzLl9yZWFkZXIuY2FuY2VsKGUpfX1jbGFzcyBQREZXb3JrZXJTdHJlYW1SYW5nZVJlYWRlcntjb25zdHJ1Y3RvcihlLHQsYSl7dGhpcy5fbXNnSGFuZGxlcj1hO3RoaXMub25Qcm9ncmVzcz1udWxsO2NvbnN0IHI9dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbSgiR2V0UmFuZ2VSZWFkZXIiLHtiZWdpbjplLGVuZDp0fSk7dGhpcy5fcmVhZGVyPXIuZ2V0UmVhZGVyKCl9Z2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCl7cmV0dXJuITF9YXN5bmMgcmVhZCgpe2NvbnN0e3ZhbHVlOmUsZG9uZTp0fT1hd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO3JldHVybiB0P3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06e3ZhbHVlOmUuYnVmZmVyLGRvbmU6ITF9fWNhbmNlbChlKXt0aGlzLl9yZWFkZXIuY2FuY2VsKGUpfX19XSx0PXt9O2Z1bmN0aW9uIF9fd19wZGZqc19yZXF1aXJlX18oYSl7dmFyIHI9dFthXTtpZih2b2lkIDAhPT1yKXJldHVybiByLmV4cG9ydHM7dmFyIG49dFthXT17ZXhwb3J0czp7fX07ZVthXShuLG4uZXhwb3J0cyxfX3dfcGRmanNfcmVxdWlyZV9fKTtyZXR1cm4gbi5leHBvcnRzfXZhciBhPXt9OygoKT0+e3ZhciBlPWE7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJXb3JrZXJNZXNzYWdlSGFuZGxlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuV29ya2VyTWVzc2FnZUhhbmRsZXJ9fSk7dmFyIHQ9X193X3BkZmpzX3JlcXVpcmVfXygxKX0pKCk7cmV0dXJuIGF9KSgpKSk7";function Fl(H){return!!(typeof H=="object"&&H&&"gen"in H&&"num"in H)}async function tl(H,m){return typeof m=="string"?H.getDestination(m):m}async function Ol(H,m){return m&&Fl(m[0])?m[0]:null}const Cl=H=>H.type==="XYZ"&&H.spec.length===3,nl=H=>H.type==="Fit"&&H.spec.length===0,Kl=H=>H.type==="FitH"&&H.spec.length===1,ol=H=>H.type==="FitV"&&H.spec.length===1,Ql=H=>H.type==="FitR"&&H.spec.length===4,El=H=>H.type==="FitB"&&H.spec.length===0,gl=H=>H.type==="FitBH"&&H.spec.length===1,Hl=H=>H.type==="FitBV"&&H.spec.length===1;function Pl(H,m){const O={type:H,spec:m};return Cl(O)||nl(O)||Kl(O)||ol(O)||Ql(O)||El(O)||gl(O)||Hl(O)?O:(console.warn("no location type found for ",H,m),null)}const Bl=H=>H&&H.every(m=>!isNaN(m));function vl(H){pdfExports.GlobalWorkerOptions.workerSrc=H}function fl(H,m={onProgress:void 0,onPassword:void 0,onError:void 0,password:""}){var O;(O=pdfExports.GlobalWorkerOptions)!=null&&O.workerSrc||vl(kl);const s=shallowRef(),Y=shallowRef(0),B=shallowRef({});function r(C){const D=pdfExports.getDocument(C);if(m.onProgress&&(D.onProgress=m.onProgress),m.onPassword)D.onPassword=m.onPassword;else if(m.password){const N=(j,k)=>{j(m.password??"")};D.onPassword=N}D.promise.then(async N=>{s.value=N.loadingTask,Y.value=N.numPages;const j=await N.getMetadata(),k=await N.getAttachments(),w=await N.getJSActions(),L=await N.getOutline();B.value={metadata:j,attachments:k,javascript:w,outline:L}},N=>{typeof m.onError=="function"&&m.onError(N)})}async function ZZ(C){var D;const N=await((D=s.value)==null?void 0:D.promise);if(!N)return null;const j=await tl(N,C),k=await Ol(N,j);if(!k||!j)return null;const w=await N.getPageIndex(k),L=j[1].name,n=j.slice(2),u=Bl(n)?Pl(L,n):null;return{pageIndex:w,location:u??{type:"Fit",spec:[]}}}return isRef(H)?(H.value&&r(H.value),watch(H,()=>{H.value&&r(H.value)})):H&&r(H),{pdf:s,pages:Y,info:B,getPDFDestination:ZZ}}const rl={install(H){H.component(ll.name,ll)}};export{ll as VuePDF,rl as VuePDFPlugin,rl as default,fl as usePDF};
|